aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2006-04-28 19:07:15 +0000
committerUlrich Drepper <drepper@redhat.com>2006-04-28 19:07:15 +0000
commitee821689eb2a2db7d303d4e3efa7ef54f502c854 (patch)
treea45cdbba22edb575dd855ff46532eec61f6d7b81
parent4718026de2ecab773d21b25efc989e18b9c4dc99 (diff)
downloadglibc-ee821689eb2a2db7d303d4e3efa7ef54f502c854.zip
glibc-ee821689eb2a2db7d303d4e3efa7ef54f502c854.tar.gz
glibc-ee821689eb2a2db7d303d4e3efa7ef54f502c854.tar.bz2
* nis/nss-default.c (init): Rewrite parse to get the variables
from a table.
-rw-r--r--ChangeLog3
-rw-r--r--nis/nss-default.c40
2 files changed, 26 insertions, 17 deletions
diff --git a/ChangeLog b/ChangeLog
index a3ffca4..f4d7139 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 3287e68..e3a228d 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);