]> git.ozlabs.org Git - ccan/blobdiff - tools/ccanlint/tests/idempotent.c
ccanlint: fix idempotent handler
[ccan] / tools / ccanlint / tests / idempotent.c
index 7ab4a57b7e31080e5630be981de524f4967524c9..e39cc2ac2e7ba696f16077c8b2d0724ce1f3e9fd 100644 (file)
@@ -24,13 +24,14 @@ static const char explain[]
 
 static void fix_name(char *name)
 {
-       unsigned int i, j;
+       unsigned int i;
 
-       for (i = j = 0; name[i]; i++) {
-               if (isalnum(name[i]) || name[i] == '_')
-                       name[j++] = toupper(name[i]);
+       for (i = 0; name[i]; i++) {
+               if (isalnum(name[i]))
+                       name[i] = toupper(name[i]);
+               else
+                       name[i] = '_';
        }
-       name[j] = '\0';
 }
 
 static void handle_idem(struct manifest *m, struct score *score)
@@ -44,10 +45,10 @@ static void handle_idem(struct manifest *m, struct score *score)
 
                /* Main header gets CCAN_FOO_H, others CCAN_FOO_XXX_H */
                if (strstarts(e->file->name, m->basename)
-                   || strlen(e->file->name) != strlen(m->basename) + 2)
+                   || strlen(e->file->name) == strlen(m->basename) + 2)
                        name = talloc_asprintf(score, "CCAN_%s_H", m->basename);
                else
-                       name = talloc_asprintf(score, "CCAN_%s_%s_H",
+                       name = talloc_asprintf(score, "CCAN_%s_%s",
                                               m->basename, e->file->name);
                fix_name(name);
 
@@ -90,7 +91,6 @@ static bool check_idem(struct ccan_file *f, struct score *score)
                /* FIXME: We assume small headers probably uninteresting. */
                return true;
 
-       score->error = "Headers are not idempotent";
        for (i = 0; i < f->num_lines; i++) {
                if (line_info[i].type == DOC_LINE
                    || line_info[i].type == COMMENT_LINE)
@@ -185,10 +185,12 @@ static void check_idempotent(struct manifest *m,
 
        list_for_each(&m->h_files, f, list) {
                if (!check_idem(f, score))
-                       return;
+                       score->error = "Headers are not idempotent";
+       }
+       if (!score->error) {
+               score->pass = true;
+               score->score = score->total;
        }
-       score->pass = true;
-       score->score = score->total;
 }
 
 struct ccanlint idempotent = {