}
}
+static void add_license_comment(struct manifest *m, struct score *score)
+{
+ struct file_error *e;
+ const char *license_desc = get_license_oneliner(score, m->license);
+ char *files = tal_strdup(score, ""), *q;
+
+ list_for_each(&score->per_file_errors, e, list)
+ tal_append_fmt(&files, " %s\n", e->file->name);
+
+ q = tal_fmt(score, "The following files don't have a comment:\n%s\n"
+ "Should I prepend '%s'?", files, license_desc);
+ if (!ask(q))
+ return;
+
+ list_for_each(&score->per_file_errors, e, list) {
+ char *tmpname;
+ FILE *out;
+ unsigned int i;
+
+ tmpname = temp_file(score, ".licensed", e->file->name);
+ out = fopen(tmpname, "w");
+ if (!out)
+ err(1, "Opening %s", tmpname);
+ if (fprintf(out, "%s\n", license_desc) < 0)
+ err(1, "Writing %s", tmpname);
+
+ for (i = 0; e->file->lines[i]; i++)
+ if (fprintf(out, "%s\n", e->file->lines[i]) < 0)
+ err(1, "Writing %s", tmpname);
+
+ if (fclose(out) != 0)
+ err(1, "Closing %s", tmpname);
+
+ if (!move_file(tmpname, e->file->fullname))
+ err(1, "Moving %s to %s", tmpname, e->file->fullname);
+ }
+}
+
struct ccanlint license_comment = {
.key = "license_comment",
.name = "Source and header files refer to LICENSE",
.check = check_license_comment,
+ .handle = add_license_comment,
.needs = "license_exists"
};
REGISTER_TEST(license_comment);