tools: don't abort on malformed documentation lines.
authorRusty Russell <rusty@rustcorp.com.au>
Mon, 3 Dec 2012 07:55:41 +0000 (18:25 +1030)
committerRusty Russell <rusty@rustcorp.com.au>
Mon, 3 Dec 2012 07:55:41 +0000 (18:25 +1030)
ccanlint would abort with 'Malformed line 53' if there was a bad header.
That's very poor, and deeply unhelpful.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
tools/ccanlint/file_analysis.c
tools/doc_extract-core.c
tools/doc_extract.c
tools/doc_extract.h

index 575425df79e0c10ef993ae7f92747e70f3d8bdaf..852ecbfce851c31d85078d4a21d3e7657dcc6e8d 100644 (file)
@@ -27,7 +27,7 @@ struct list_head *get_ccan_file_docs(struct ccan_file *f)
 {
        if (!f->doc_sections) {
                get_ccan_file_lines(f);
-               f->doc_sections = extract_doc_sections(f->lines);
+               f->doc_sections = extract_doc_sections(f->lines, f->name);
        }
        return f->doc_sections;
 }
index 7788fd0766fe871df70651006c3b2a2d24019dc6..7b9bb84ab3f93e50c06be26a1663e18be8054074 100644 (file)
@@ -15,7 +15,8 @@
 #include "doc_extract.h"
 #include "tools.h"
 
-static char **grab_doc(char **lines, unsigned int **linemap)
+static char **grab_doc(char **lines, unsigned int **linemap,
+                      const char *file)
 {
        char **ret;
        unsigned int i, num;
@@ -39,8 +40,19 @@ static char **grab_doc(char **lines, unsigned int **linemap)
                                ret[num++] = talloc_strdup(ret, lines[i]+3);
                        else if (strstarts(lines[i], " *"))
                                ret[num++] = talloc_strdup(ret, lines[i]+2);
-                       else
-                               errx(1, "Malformed line %u", i);
+                       else {
+                               /* Weird, malformed? */
+                               static bool warned;
+                               if (!warned) {
+                                       warnx("%s:%u:"
+                                             " Expected ' *' in comment.",
+                                             file, i+1);
+                                       warned++;
+                               }
+                               ret[num++] = talloc_strdup(ret, lines[i]);
+                               if (strstr(lines[i], "*/"))
+                                       printing = false;
+                       }
                        (*linemap)[num-1] = i;
                }
        }
@@ -195,10 +207,10 @@ static void trim_lines(struct doc_section *curr)
        curr->num_lines = last_non_empty + 1;
 }
 
-struct list_head *extract_doc_sections(char **rawlines)
+struct list_head *extract_doc_sections(char **rawlines, const char *file)
 {
        unsigned int *linemap;
-       char **lines = grab_doc(rawlines, &linemap);
+       char **lines = grab_doc(rawlines, &linemap, file);
        const char *function = NULL;
        struct doc_section *curr = NULL;
        unsigned int i;
index f792b57b461212aff185fa4aa84e31f6b2ef82a6..aa0c5a045c40d74ebd56feeac3b6e16a4df1261e 100644 (file)
@@ -52,7 +52,7 @@ int main(int argc, char *argv[])
                        err(1, "Reading file %s", argv[i]);
                lines = strsplit(file, file, "\n");
 
-               list = extract_doc_sections(lines);
+               list = extract_doc_sections(lines, argv[i]);
                if (list_empty(list))
                        errx(1, "No documentation in file %s", argv[i]);
                talloc_free(file);
index 1f4650a12bfcbc14a5efda0c7ecbf01d2a0df8a9..d5bc693a5800b694b2f71bedb4e01cd8e542e127 100644 (file)
@@ -13,5 +13,5 @@ struct doc_section {
        char **lines;
 };
 
-struct list_head *extract_doc_sections(char **rawlines);
+struct list_head *extract_doc_sections(char **rawlines, const char *file);
 #endif /* _DOC_EXTRACT_CORE_H */