diff options
author | Ulrich Drepper <drepper@redhat.com> | 2006-04-28 19:07:15 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2006-04-28 19:07:15 +0000 |
commit | ee821689eb2a2db7d303d4e3efa7ef54f502c854 (patch) | |
tree | a45cdbba22edb575dd855ff46532eec61f6d7b81 | |
parent | 4718026de2ecab773d21b25efc989e18b9c4dc99 (diff) | |
download | glibc-ee821689eb2a2db7d303d4e3efa7ef54f502c854.tar.gz glibc-ee821689eb2a2db7d303d4e3efa7ef54f502c854.tar.xz glibc-ee821689eb2a2db7d303d4e3efa7ef54f502c854.zip |
* nis/nss-default.c (init): Rewrite parse to get the variables
from a table.
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | nis/nss-default.c | 40 |
2 files changed, 26 insertions, 17 deletions
diff --git a/ChangeLog b/ChangeLog index a3ffca49c5..f4d7139292 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2006-04-28 Ulrich Drepper <drepper@redhat.com> + * nis/nss-default.c (init): Rewrite parse to get the variables + from a table. + * nis/nss_nis/nis-service.c: Avoid passing pointer to static variable around. Reduce number of memory allocations by creating list of memory pools. diff --git a/nis/nss-default.c b/nis/nss-default.c index 3287e68b86..e3a228da71 100644 --- a/nis/nss-default.c +++ b/nis/nss-default.c @@ -35,6 +35,20 @@ static int default_nss_flags; /* Code to make sure we call 'init' once. */ __libc_once_define (static, once); +/* Table of the recognized variables. */ +static const struct +{ + char name[23]; + unsigned int len; + int flag; +} vars[] = + { +#define STRNLEN(s) s, sizeof (s) - 1 + { STRNLEN ("NETID_AUTHORITATIVE"), NSS_FLAG_NETID_AUTHORITATIVE }, + { STRNLEN ("SERVICES_AUTHORITATIVE"), NSS_FLAG_SERVICES_AUTHORITATIVE } + }; +#define nvars (sizeof (vars) / sizeof (vars[0])) + static void init (void) @@ -53,11 +67,9 @@ init (void) if (n <= 0) break; - /* There currently are only two variables we expect, so - simplify the parsing. Recognize only + /* Recognize only - NETID_AUTHORITATIVE = TRUE - SERVICES_AUTHORITATIVE = TRUE + <THE-VARIABLE> = TRUE with arbitrary white spaces. */ char *cp = line; @@ -68,18 +80,14 @@ init (void) if (*cp == '#') continue; - static const char netid_authoritative[] = "NETID_AUTHORITATIVE"; - static const char services_authoritative[] - = "SERVICES_AUTHORITATIVE"; - size_t flag_len; - if (strncmp (cp, netid_authoritative, - flag_len = sizeof (netid_authoritative) - 1) != 0 - && strncmp (cp, services_authoritative, - flag_len = sizeof (services_authoritative) - 1) - != 0) + int idx; + for (idx = 0; idx < nvars; ++idx) + if (strncmp (cp, vars[idx].name, vars[idx].len) == 0) + break; + if (idx == nvars) continue; - cp += flag_len; + cp += vars[idx].len; while (isspace (*cp)) ++cp; if (*cp++ != '=') @@ -95,9 +103,7 @@ init (void) ++cp; if (*cp == '\0') - default_nss_flags |= (flag_len == sizeof (netid_authoritative) - 1 - ? NSS_FLAG_NETID_AUTHORITATIVE - : NSS_FLAG_SERVICES_AUTHORITATIVE); + default_nss_flags |= vars[idx].flag; } free (line); |