X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=tools%2Fccanlint%2Ftests%2Fexamples_exist.c;h=61359596e1f693ed56a127c613724462e1f1f2d7;hp=02ddb486268f15e62b686e2b86c675166b728554;hb=HEAD;hpb=09d5cd70d7e8105a003ed9583eadb077de014f3b diff --git a/tools/ccanlint/tests/examples_exist.c b/tools/ccanlint/tests/examples_exist.c index 02ddb486..61359596 100644 --- a/tools/ccanlint/tests/examples_exist.c +++ b/tools/ccanlint/tests/examples_exist.c @@ -32,7 +32,8 @@ static char *add_example(struct manifest *m, struct ccan_file *source, *strchr(name, ' ') = '_'; name = temp_file(m, ".c", take(name)); - f = new_ccan_file(m, path_dirname(m, name), path_basename(m, name)); + f = new_ccan_file(m, take(path_dirname(m, name)), + take(path_basename(m, name))); tal_steal(f, name); list_add_tail(&m->examples, &f->list); @@ -44,7 +45,10 @@ static char *add_example(struct manifest *m, struct ccan_file *source, /* Add #line to demark where we are from, so errors are correct! */ linemarker = tal_fmt(f, "#line %i \"%s\"\n", example->srcline+2, source->fullname); - write(fd, linemarker, strlen(linemarker)); + if (write(fd, linemarker, strlen(linemarker)) != (int)strlen(linemarker)) { + close(fd); + return cast_const(char *, "Failure writing to temporary file"); + } for (i = 0; i < example->num_lines; i++) { if (write(fd, example->lines[i], strlen(example->lines[i])) @@ -61,7 +65,7 @@ static char *add_example(struct manifest *m, struct ccan_file *source, /* FIXME: We should have one example per function in header. */ static void extract_examples(struct manifest *m, - unsigned int *timeleft, + unsigned int *timeleft UNNEEDED, struct score *score) { struct ccan_file *f, *mainh = NULL; /* gcc complains uninitialized */ @@ -78,13 +82,12 @@ static void extract_examples(struct manifest *m, } } - /* Check main header. */ + /* Check all headers for examples. */ list_for_each(&m->h_files, f, list) { - if (!strstarts(f->name, m->basename) - || strlen(f->name) != strlen(m->basename) + 2) - continue; + if (strstarts(f->name, m->basename) + && strlen(f->name) == strlen(m->basename) + 2) + mainh = f; - mainh = f; list_for_each(get_ccan_file_docs(f), d, list) { if (streq(d->type, "example")) { score->error = add_example(m, f, d); @@ -114,7 +117,7 @@ struct ccanlint examples_exist = { .key = "examples_exist", .name = "_info and main header file have Example: sections", .check = extract_examples, - .needs = "info_exists" + .needs = "info_exists main_header_exists" }; REGISTER_TEST(examples_exist);