]> git.draconx.ca Git - cdecl99.git/commitdiff
Add support for explaining multiple declarators.
authorNick Bowler <nbowler@draconx.ca>
Mon, 4 Jul 2011 22:10:49 +0000 (18:10 -0400)
committerNick Bowler <nbowler@draconx.ca>
Mon, 4 Jul 2011 22:10:49 +0000 (18:10 -0400)
src/cdecl99.c

index 28bd23bc20935f98c6b78159fa17b97a3b1ecc5c..d966805d323b79bd7cb7c710c188b14d2428c985 100644 (file)
@@ -40,29 +40,37 @@ static int cmd_explain(char *cmd, char *arg)
        static char *buf;
 
        struct cdecl *decl;
+       struct cdecl_declarator *d;
        size_t rc;
 
        decl = cdecl_parse_decl(arg);
        if (!decl)
                goto out;
 
+       for (d = decl->declarators; d; d = d->next) {
+               struct cdecl decl_tmp = {
+                       .specifiers  = decl->specifiers,
+                       .declarators = d,
+               };
+
 retry:
-       rc = cdecl_explain(buf, bufsz, decl);
-       if (rc >= bufsz) {
-               char *tmp;
-
-               tmp = realloc(buf, rc + 1);
-               if (!tmp) {
-                       fprintf(stderr, "failed to allocate memory\n");
-                       goto out;
+               rc = cdecl_explain(buf, bufsz, &decl_tmp);
+               if (rc >= bufsz) {
+                       char *tmp;
+
+                       tmp = realloc(buf, rc + 1);
+                       if (!tmp) {
+                               fprintf(stderr, "failed to allocate memory\n");
+                               goto out;
+                       }
+
+                       buf = tmp;
+                       bufsz = rc + 1;
+                       goto retry;
                }
 
-               buf = tmp;
-               bufsz = rc + 1;
-               goto retry;
+               printf("%s\n", buf);
        }
-
-       printf("%s\n", buf);
 out:
        cdecl_free(decl);
        return 1;