]> git.draconx.ca Git - cdecl99.git/blobdiff - src/cdecl99.c
Split out qualifier explanations from explain_post_specs.
[cdecl99.git] / src / cdecl99.c
index 6e15712780106619ebf226d9ed73d24e2e916eec..a0771912fe24acb404fe0df5790763be0d0b4a6c 100644 (file)
@@ -36,11 +36,35 @@ static void print_help(void)
 
 static int cmd_explain(char *cmd, char *arg)
 {
+       static size_t bufsz;
+       static char *buf;
+
        struct cdecl *decl;
+       size_t rc;
 
        decl = cdecl_parse_decl(arg);
-       cdecl_free(decl);
+       if (!decl)
+               goto out;
+
+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");
+                       return 1;
+               }
 
+               buf = tmp;
+               bufsz = rc + 1;
+               goto retry;
+       }
+
+       printf("%s\n", buf);
+out:
+       cdecl_free(decl);
        return 1;
 }