1
0
Fork 0
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:
Tanaka Akira 1999-10-31 06:44:41 +00:00
parent beaf69f428
commit 8f35520cb3
2 changed files with 59 additions and 29 deletions

View file

@ -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);
}

View file

@ -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