]> granicus.if.org Git - sudo/commitdiff
Extend LIST_APPEND to deal with appending lists too
authorTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 27 Oct 2004 16:06:52 +0000 (16:06 +0000)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 27 Oct 2004 16:06:52 +0000 (16:06 +0000)
gram.c
gram.y
parse.h

diff --git a/gram.c b/gram.c
index 74b2980b27799f204de23dac40e274e924b9865b..1a0072a39125418713982353f8cd677a382357b4 100644 (file)
--- a/gram.c
+++ b/gram.c
@@ -570,13 +570,8 @@ add_alias(a)
 {
     if (aliases == NULL)
        aliases = a;
-    else {
-       if (aliases->last != NULL)
-           aliases->last->next = a;
-       else /* if (aliases->next == NULL) */
-           aliases->next = a;
-       aliases->last = a->last ? a->last : a;
-    }
+    else
+       LIST_APPEND(aliases, a);
 }
 
 /*
@@ -601,13 +596,8 @@ add_defaults(type, binding, defs)
     }
     if (defaults == NULL)
        defaults = defs;
-    else {
-       if (defaults->last != NULL)
-           defaults->last->next = defs;
-       else /* if (defaults->next == NULL) */
-           defaults->next = defs;
-       defaults->last = defs->last ? defs->last : defs;
-    }
+    else
+       LIST_APPEND(defaults, defs);
 }
 
 /*
@@ -628,13 +618,8 @@ add_userspec(members, privs)
     u->next = NULL;
     if (userspecs == NULL)
        userspecs = u;
-    else {
-       if (userspecs->last != NULL)
-           userspecs->last->next = u;
-       else /* if (userspecs->next == NULL) */
-           userspecs->next = u;
-       userspecs->last = u;
-    }
+    else
+       LIST_APPEND(userspecs, u);
 }
 
 /*
@@ -727,7 +712,7 @@ init_parser(path, quiet)
     sudolineno = 1;
     verbose = !quiet;
 }
-#line 679 "gram.c"
+#line 664 "gram.c"
 /* allocate initial stack or double stack size, up to YYMAXDEPTH */
 #if defined(__cplusplus) || defined(__STDC__)
 static int yygrowstack(void)
@@ -1381,7 +1366,7 @@ case 83:
                            NEW_MEMBER(yyval.member, yyvsp[0].string, WORD);
                        }
 break;
-#line 1333 "gram.c"
+#line 1318 "gram.c"
     }
     yyssp -= yym;
     yystate = *yyssp;
diff --git a/gram.y b/gram.y
index 71005f3a16c91813a8516ea94c6b0eca07b7404e..5484243e86ca5272750ee2e947927d9b7dc8951f 100644 (file)
--- a/gram.y
+++ b/gram.y
@@ -515,13 +515,8 @@ add_alias(a)
 {
     if (aliases == NULL)
        aliases = a;
-    else {
-       if (aliases->last != NULL)
-           aliases->last->next = a;
-       else /* if (aliases->next == NULL) */
-           aliases->next = a;
-       aliases->last = a->last ? a->last : a;
-    }
+    else
+       LIST_APPEND(aliases, a);
 }
 
 /*
@@ -546,13 +541,8 @@ add_defaults(type, binding, defs)
     }
     if (defaults == NULL)
        defaults = defs;
-    else {
-       if (defaults->last != NULL)
-           defaults->last->next = defs;
-       else /* if (defaults->next == NULL) */
-           defaults->next = defs;
-       defaults->last = defs->last ? defs->last : defs;
-    }
+    else
+       LIST_APPEND(defaults, defs);
 }
 
 /*
@@ -573,13 +563,8 @@ add_userspec(members, privs)
     u->next = NULL;
     if (userspecs == NULL)
        userspecs = u;
-    else {
-       if (userspecs->last != NULL)
-           userspecs->last->next = u;
-       else /* if (userspecs->next == NULL) */
-           userspecs->next = u;
-       userspecs->last = u;
-    }
+    else
+       LIST_APPEND(userspecs, u);
 }
 
 /*
diff --git a/parse.h b/parse.h
index 6a5df80f6328972ff1a077e51c5ba709774bf3c8..4497c460a22898576aa6689c31ebdabc17fb3933 100644 (file)
--- a/parse.h
+++ b/parse.h
@@ -152,7 +152,7 @@ struct defaults {
 } while (0)
 
 /*
- * Append an entry to the tail of a list.
+ * Append a list (or single entry) to the tail of a list.
  */
 #define LIST_APPEND(h, e) do {                         \
     if ((h)->last != NULL)                             \
@@ -160,6 +160,7 @@ struct defaults {
     else /* if ((h)->next == NULL) */                  \
        (h)->next = (e);                                \
     (h)->last = (e);                                   \
+    (h)->last = (e)->last ? (e)->last : (e);           \
 } while (0)
 
 /*