3 #include <ccan/talloc/talloc.h>
4 #include <ccan/str/str.h>
6 const struct license_info licenses[] = {
8 { "gnu lesser general public license",
10 "or at your option any later version"
14 { "gnu lesser general public license",
20 { "gnu lesser general public license",
26 { "gnu lesser general public license",
32 { "gnu general public license",
34 "or at your option any later version"
38 { "gnu general public license",
44 { "gnu general public license",
50 { "gnu general public license",
55 { "BSD-3CLAUSE", "BSD",
56 { "redistributions of source code must retain",
57 "redistributions in binary form must reproduce",
62 { "without restriction",
63 "above copyright notice",
67 { "Public domain", "Public domain",
70 { "Unknown license", "Unknown license",
75 const char *get_ccan_simplified(struct ccan_file *f)
80 /* Simplify for easy matching: only alnum and single spaces. */
81 f->simplified = talloc_strdup(f, get_ccan_file_contents(f));
82 for (i = 0, j = 0; f->simplified[i]; i++) {
83 if (cisupper(f->simplified[i]))
84 f->simplified[j++] = tolower(f->simplified[i]);
85 else if (cislower(f->simplified[i]))
86 f->simplified[j++] = f->simplified[i];
87 else if (cisdigit(f->simplified[i]))
88 f->simplified[j++] = f->simplified[i];
89 else if (cisspace(f->simplified[i])) {
90 if (j != 0 && f->simplified[j-1] != ' ')
91 f->simplified[j++] = ' ';
94 f->simplified[j] = '\0';
99 bool find_boilerplate(struct ccan_file *f, enum license license)
103 for (i = 0; i < NUM_CLAUSES; i++) {
104 if (!licenses[license].clause[i])
107 if (!strstr(get_ccan_simplified(f),
108 licenses[license].clause[i])) {