mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-10-16 12:21:18 +02:00
zsh-workers/8474
This commit is contained in:
parent
beaf69f428
commit
8f35520cb3
2 changed files with 59 additions and 29 deletions
|
@ -182,7 +182,8 @@ scanpmparameters(HashTable ht, ScanFunc func, int flags)
|
|||
for (hn = realparamtab->nodes[i]; hn; hn = hn->next) {
|
||||
pm.nam = hn->nam;
|
||||
if (func != scancountparams &&
|
||||
(flags & (SCANPM_WANTVALS|SCANPM_MATCHVAL)))
|
||||
((flags & (SCANPM_WANTVALS|SCANPM_MATCHVAL)) ||
|
||||
!(flags & SCANPM_WANTKEYS)))
|
||||
pm.u.str = paramtypestr((Param) hn);
|
||||
func((HashNode) &pm, flags);
|
||||
}
|
||||
|
@ -314,7 +315,8 @@ scanpmcommands(HashTable ht, ScanFunc func, int flags)
|
|||
pm.nam = hn->nam;
|
||||
cmd = (Cmdnam) hn;
|
||||
if (func != scancountparams &&
|
||||
(flags & (SCANPM_WANTVALS|SCANPM_MATCHVAL))) {
|
||||
((flags & (SCANPM_WANTVALS|SCANPM_MATCHVAL)) ||
|
||||
!(flags & SCANPM_WANTKEYS))) {
|
||||
if (cmd->flags & HASHED)
|
||||
pm.u.str = cmd->u.cmd;
|
||||
else {
|
||||
|
@ -516,7 +518,8 @@ scanfunctions(HashTable ht, ScanFunc func, int flags, int dis)
|
|||
if (dis ? (hn->flags & DISABLED) : !(hn->flags & DISABLED)) {
|
||||
pm.nam = hn->nam;
|
||||
if (func != scancountparams &&
|
||||
(flags & (SCANPM_WANTVALS|SCANPM_MATCHVAL))) {
|
||||
((flags & (SCANPM_WANTVALS|SCANPM_MATCHVAL)) ||
|
||||
!(flags & SCANPM_WANTKEYS))) {
|
||||
if (((Shfunc) hn)->flags & PM_UNDEFINED) {
|
||||
Shfunc shf = (Shfunc) hn;
|
||||
pm.u.str =
|
||||
|
@ -625,7 +628,8 @@ scanbuiltins(HashTable ht, ScanFunc func, int flags, int dis)
|
|||
if (dis ? (hn->flags & DISABLED) : !(hn->flags & DISABLED)) {
|
||||
pm.nam = hn->nam;
|
||||
if (func != scancountparams &&
|
||||
(flags & (SCANPM_WANTVALS|SCANPM_MATCHVAL))) {
|
||||
((flags & (SCANPM_WANTVALS|SCANPM_MATCHVAL)) ||
|
||||
!(flags & SCANPM_WANTKEYS))) {
|
||||
char *t = ((((Builtin) hn)->handlerfunc ||
|
||||
(hn->flags & BINF_PREFIX)) ?
|
||||
"defined" : "undefined");
|
||||
|
@ -1059,7 +1063,8 @@ scanpmhistory(HashTable ht, ScanFunc func, int flags)
|
|||
|
||||
while (he) {
|
||||
if (func != scancountparams &&
|
||||
(flags & (SCANPM_WANTVALS|SCANPM_MATCHVAL))) {
|
||||
((flags & (SCANPM_WANTVALS|SCANPM_MATCHVAL)) ||
|
||||
!(flags & SCANPM_WANTKEYS))) {
|
||||
sprintf(buf, "%d", he->histnum);
|
||||
pm.nam = dupstring(buf);
|
||||
pm.u.str = dupstring(he->text);
|
||||
|
@ -1181,7 +1186,8 @@ scanpmjobtexts(HashTable ht, ScanFunc func, int flags)
|
|||
if (jobtab[job].stat && jobtab[job].procs &&
|
||||
!(jobtab[job].stat & STAT_NOPRINT)) {
|
||||
if (func != scancountparams &&
|
||||
(flags & (SCANPM_WANTVALS|SCANPM_MATCHVAL))) {
|
||||
((flags & (SCANPM_WANTVALS|SCANPM_MATCHVAL)) ||
|
||||
!(flags & SCANPM_WANTKEYS))) {
|
||||
sprintf(buf, "%d", job);
|
||||
pm.nam = dupstring(buf);
|
||||
pm.u.str = pmjobtext(job);
|
||||
|
@ -1286,7 +1292,8 @@ scanpmjobstates(HashTable ht, ScanFunc func, int flags)
|
|||
if (jobtab[job].stat && jobtab[job].procs &&
|
||||
!(jobtab[job].stat & STAT_NOPRINT)) {
|
||||
if (func != scancountparams &&
|
||||
(flags & (SCANPM_WANTVALS|SCANPM_MATCHVAL))) {
|
||||
((flags & (SCANPM_WANTVALS|SCANPM_MATCHVAL)) ||
|
||||
!(flags & SCANPM_WANTKEYS))) {
|
||||
sprintf(buf, "%d", job);
|
||||
pm.nam = dupstring(buf);
|
||||
pm.u.str = pmjobstate(job);
|
||||
|
@ -1418,7 +1425,8 @@ scanpmnameddirs(HashTable ht, ScanFunc func, int flags)
|
|||
if (!((nd = (Nameddir) hn)->flags & ND_USERNAME)) {
|
||||
pm.nam = hn->nam;
|
||||
if (func != scancountparams &&
|
||||
(flags & (SCANPM_WANTVALS|SCANPM_MATCHVAL)))
|
||||
((flags & (SCANPM_WANTVALS|SCANPM_MATCHVAL)) ||
|
||||
!(flags & SCANPM_WANTKEYS)))
|
||||
pm.u.str = dupstring(nd->dir);
|
||||
func((HashNode) &pm, flags);
|
||||
}
|
||||
|
@ -1486,7 +1494,8 @@ scanpmuserdirs(HashTable ht, ScanFunc func, int flags)
|
|||
if ((nd = (Nameddir) hn)->flags & ND_USERNAME) {
|
||||
pm.nam = hn->nam;
|
||||
if (func != scancountparams &&
|
||||
(flags & (SCANPM_WANTVALS|SCANPM_MATCHVAL)))
|
||||
((flags & (SCANPM_WANTVALS|SCANPM_MATCHVAL)) ||
|
||||
!(flags & SCANPM_WANTKEYS)))
|
||||
pm.u.str = dupstring(nd->dir);
|
||||
func((HashNode) &pm, flags);
|
||||
}
|
||||
|
@ -1703,7 +1712,8 @@ scanaliases(HashTable ht, ScanFunc func, int flags, int global, int dis)
|
|||
(dis ? (al->flags & DISABLED) : !(al->flags & DISABLED))) {
|
||||
pm.nam = hn->nam;
|
||||
if (func != scancountparams &&
|
||||
(flags & (SCANPM_WANTVALS|SCANPM_MATCHVAL)))
|
||||
((flags & (SCANPM_WANTVALS|SCANPM_MATCHVAL)) ||
|
||||
!(flags & SCANPM_WANTKEYS)))
|
||||
pm.u.str = dupstring(al->text);
|
||||
func((HashNode) &pm, flags);
|
||||
}
|
||||
|
|
|
@ -1232,7 +1232,7 @@ fillnameddirtable(HashTable ht)
|
|||
#if defined(HAVE_NIS) || defined(HAVE_NIS_PLUS)
|
||||
FILE *pwf;
|
||||
char buf[BUFSIZ], *p, *d, *de;
|
||||
int skipping;
|
||||
int skipping, oldct = nameddirtab->ct, usepwf = 1;
|
||||
|
||||
# ifndef HAVE_NIS_PLUS
|
||||
char domain[YPMAXDOMAIN];
|
||||
|
@ -1250,28 +1250,48 @@ fillnameddirtable(HashTable ht)
|
|||
nis_list("passwd.org_dir", EXPAND_NAME|ALL_RESULTS|FOLLOW_LINKS|FOLLOW_PATH,
|
||||
add_userdir, 0);
|
||||
# endif
|
||||
/* Don't forget the non-NIS matches from the flat passwd file */
|
||||
if ((pwf = fopen(PASSWD_FILE, "r")) != NULL) {
|
||||
skipping = 0;
|
||||
while (fgets(buf, BUFSIZ, pwf) != NULL) {
|
||||
if (strchr(buf, '\n') != NULL) {
|
||||
if (!skipping) {
|
||||
if ((p = strchr(buf, ':')) != NULL) {
|
||||
*p++ = '\0';
|
||||
if ((de = strrchr(p, ':'))) {
|
||||
*de = '\0';
|
||||
if ((d = strrchr(p, ':'))) {
|
||||
if (*++d && buf[0])
|
||||
adduserdir(buf, d, ND_USERNAME, 1);
|
||||
if (nameddirtab->ct == oldct) {
|
||||
/* Using NIS or NIS+ didn't add any user directories. This seems
|
||||
* fishy, so we fall back to using getpwent(). If we don't have
|
||||
* that, we only use the passwd file. */
|
||||
#ifdef HAVE_GETPWENT
|
||||
struct passwd *pw;
|
||||
|
||||
setpwent();
|
||||
|
||||
/* loop through the password file/database *
|
||||
* and add all entries returned. */
|
||||
while ((pw = getpwent()) && !errflag)
|
||||
adduserdir(pw->pw_name, pw->pw_dir, ND_USERNAME, 1);
|
||||
|
||||
endpwent();
|
||||
usepwf = 0;
|
||||
#endif /* HAVE_GETPWENT */
|
||||
}
|
||||
if (usepwf) {
|
||||
/* Don't forget the non-NIS matches from the flat passwd file */
|
||||
if ((pwf = fopen(PASSWD_FILE, "r")) != NULL) {
|
||||
skipping = 0;
|
||||
while (fgets(buf, BUFSIZ, pwf) != NULL) {
|
||||
if (strchr(buf, '\n') != NULL) {
|
||||
if (!skipping) {
|
||||
if ((p = strchr(buf, ':')) != NULL) {
|
||||
*p++ = '\0';
|
||||
if ((de = strrchr(p, ':'))) {
|
||||
*de = '\0';
|
||||
if ((d = strrchr(p, ':'))) {
|
||||
if (*++d && buf[0])
|
||||
adduserdir(buf, d, ND_USERNAME, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else
|
||||
skipping = 0;
|
||||
} else
|
||||
skipping = 0;
|
||||
} else
|
||||
skipping = 1;
|
||||
skipping = 1;
|
||||
}
|
||||
fclose(pwf);
|
||||
}
|
||||
fclose(pwf);
|
||||
}
|
||||
#else /* no NIS or NIS_PLUS */
|
||||
#ifdef HAVE_GETPWENT
|
||||
|
|
Loading…
Reference in a new issue