X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=tools%2Fccanlint%2Ftests%2Fheaders_idempotent.c;h=79e5c367d3a35d0dc4c433605a83512e17dee9c8;hp=d7c890916b1f541037bc50ace35ee10cdf0aa533;hb=615189ae6de685ae6eb5a19b877340d731bba747;hpb=dc8042b42500f79f613b1197df6cdf739615a89f diff --git a/tools/ccanlint/tests/headers_idempotent.c b/tools/ccanlint/tests/headers_idempotent.c index d7c89091..79e5c367 100644 --- a/tools/ccanlint/tests/headers_idempotent.c +++ b/tools/ccanlint/tests/headers_idempotent.c @@ -13,14 +13,6 @@ #include #include -static const char explain[] -= "Headers usually start with the C preprocessor lines to prevent multiple\n" - "inclusions. These look like the following:\n" - "#ifndef CCAN__H\n" - "#define CCAN__H\n" - "...\n" - "#endif /* CCAN__H */\n"; - static void fix_name(char *name) { unsigned int i; @@ -64,7 +56,7 @@ static void handle_idem(struct manifest *m, struct score *score) if (fprintf(out, "#ifndef %s\n#define %s\n", name, name) < 0) err(1, "Writing %s", tmpname); - for (i = 0; i < e->file->num_lines; i++) + for (i = 0; e->file->lines[i]; i++) if (fprintf(out, "%s\n", e->file->lines[i]) < 0) err(1, "Writing %s", tmpname); @@ -86,11 +78,11 @@ static void check_idem(struct ccan_file *f, struct score *score) const char *line, *sym; line_info = get_ccan_line_info(f); - if (f->num_lines < 3) + if (tal_count(f->lines) < 4) /* FIXME: We assume small headers probably uninteresting. */ return; - for (i = 0; i < f->num_lines; i++) { + for (i = 0; f->lines[i]; i++) { if (line_info[i].type == DOC_LINE || line_info[i].type == COMMENT_LINE) continue; @@ -104,11 +96,11 @@ static void check_idem(struct ccan_file *f, struct score *score) } /* No code at all? Don't complain. */ - if (i == f->num_lines) + if (!f->lines[i]) return; first_preproc_line = i; - for (i = first_preproc_line+1; i < f->num_lines; i++) { + for (i = first_preproc_line+1; f->lines[i]; i++) { if (line_info[i].type == DOC_LINE || line_info[i].type == COMMENT_LINE) continue; @@ -122,12 +114,13 @@ static void check_idem(struct ccan_file *f, struct score *score) } /* No code at all? Weird. */ - if (i == f->num_lines) + if (!f->lines[i]) return; - /* We expect a condition on this line. */ + /* We expect a condition around this line. */ if (!line_info[i].cond) { - score_file_error(score, f, i+1, "Expected #ifndef"); + score_file_error(score, f, first_preproc_line+1, + "Expected #ifndef"); return; } @@ -136,7 +129,8 @@ static void check_idem(struct ccan_file *f, struct score *score) /* We expect the condition to be ! IFDEF . */ if (line_info[i].cond->type != PP_COND_IFDEF || !line_info[i].cond->inverse) { - score_file_error(score, f, i+1, "Expected #ifndef"); + score_file_error(score, f, first_preproc_line+1, + "Expected #ifndef"); return; } @@ -157,8 +151,11 @@ static void check_idem(struct ccan_file *f, struct score *score) return; } + /* Record this for use in depends_accurate */ + f->idempotent_cond = line_info[i].cond; + /* Rest of code should all be covered by that conditional. */ - for (i++; i < f->num_lines; i++) { + for (i++; f->lines[i]; i++) { unsigned int val = 0; if (line_info[i].type == DOC_LINE || line_info[i].type == COMMENT_LINE) @@ -173,7 +170,8 @@ static void check_idem(struct ccan_file *f, struct score *score) } static void check_idempotent(struct manifest *m, - unsigned int *timeleft, struct score *score) + unsigned int *timeleft UNNEEDED, + struct score *score) { struct ccan_file *f;