From: Ulrich Drepper Date: Fri, 3 Apr 1998 12:19:27 +0000 (+0000) Subject: Update. X-Git-Tag: upstream/2.30~28621 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6f0ee4628f3075ed37481d2bdb573b6d52d9e25e;p=external%2Fglibc.git Update. 1998-04-03 Thorsten Kukuk * nis/nis_table.c (nis_list): Fix FOLLOW_PATH and ALL_RESULTS flags. --- diff --git a/ChangeLog b/ChangeLog index 3351a17..fd2197e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +1998-04-03 Thorsten Kukuk + + * nis/nis_table.c (nis_list): Fix FOLLOW_PATH and ALL_RESULTS flags. + 1998-04-03 16:29 Philip Blundell Based on patch from Pat Beirne: diff --git a/nis/nis_table.c b/nis/nis_table.c index d2a1df7..084ce68 100644 --- a/nis/nis_table.c +++ b/nis/nis_table.c @@ -1,4 +1,4 @@ -/* Copyright (c) 1997 Free Software Foundation, Inc. +/* Copyright (c) 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Thorsten Kukuk , 1997. @@ -202,10 +202,10 @@ nis_list (const_nis_name name, u_long flags, cb = NULL; - if (flags & FOLLOW_PATH) + if (flags & FOLLOW_PATH || flags & ALL_RESULTS) { nis_result *lres; - u_long newflags = flags & ~FOLLOW_PATH; + u_long newflags = flags & ~FOLLOW_PATH & ~ALL_RESULTS; char table_path[NIS_MAXPATH + 1]; char *ntable, *p; u_long done = 0, failures = 0; @@ -237,13 +237,30 @@ nis_list (const_nis_name name, u_long flags, NIS_RES_OBJECT (lres)->TA_data.ta_path); nis_freeresult (lres); free (res); + res = NULL; p = table_path; while (((ntable = strsep (&p, ":")) != NULL) && !done) { + char *c; + + if (res != NULL) + nis_freeresult (res); + /* Do the job recursive here! */ - res = nis_list (name, newflags, callback, userdata); + if ((c = strchr(name, ']')) != NULL) + { + /* Have indexed name ! */ + int index_len = c - name + 2; + char buf[index_len + strlen (ntable) + 1]; + + c = __stpncpy (buf, name, index_len); + strcpy (c, ntable); + res = nis_list (buf, newflags, callback,userdata); + } + else + res = nis_list (ntable, newflags, callback, userdata); if (res == NULL) return NULL; switch (res->status) @@ -253,13 +270,16 @@ nis_list (const_nis_name name, u_long flags, if (!(flags & ALL_RESULTS)) done = 1; break; + case NIS_PARTIAL: /* The table is correct, we doesn't found + the entry */ + break; default: if (flags & ALL_RESULTS) - failures++; + ++failures; else done = 1; break; - } + } } if (res->status == NIS_SUCCESS && failures) res->status = NIS_S_SUCCESS;