X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;f=tools%2Fccanlint%2Ftests%2Freduce_features.c;h=b46c85fcfef081c685c74f673436f12d39e9ab28;hb=682b594ddb13c44fac31c07caeb287dd6bbf707b;hp=aaeba75170f78a7b33b60355f97292c7b7c61908;hpb=6c1d3e2739e97674069862ec7369677d25e80312;p=ccan diff --git a/tools/ccanlint/tests/reduce_features.c b/tools/ccanlint/tests/reduce_features.c index aaeba751..b46c85fc 100644 --- a/tools/ccanlint/tests/reduce_features.c +++ b/tools/ccanlint/tests/reduce_features.c @@ -2,10 +2,7 @@ #include #include #include -#include -#include #include -#include #include #include #include @@ -21,7 +18,7 @@ bool features_were_reduced; static const char *can_run(struct manifest *m) { if (!config_header) - return talloc_strdup(m, "Could not read config.h"); + return tal_strdup(m, "Could not read config.h"); return NULL; } @@ -40,7 +37,20 @@ static bool option_cmp(const char *name1, const char *name2) return streq(name1, name2); } -HTABLE_DEFINE_TYPE(char, option_name, option_hash, option_cmp, option); +HTABLE_DEFINE_TYPE(char, option_name, option_hash, option_cmp, htable_option); + +static struct htable_option *htable_option_new(void) +{ + struct htable_option *opts = malloc(sizeof(*opts)); + htable_option_init(opts); + return opts; +} + +static void htable_option_free(struct htable_option *opts) +{ + htable_option_clear(opts); + free(opts); +} static unsigned int add_options(struct htable_option *opts, struct pp_conditions *cond) @@ -73,7 +83,7 @@ static struct htable_option *get_used_options(struct manifest *m) info = get_ccan_line_info(f); struct pp_conditions *prev = NULL; - for (i = 0; i < f->num_lines; i++) { + for (i = 0; f->lines[i]; i++) { if (info[i].cond && info[i].cond != prev) { num += add_options(opts, info[i].cond); prev = info[i].cond; @@ -91,11 +101,12 @@ static struct htable_option *get_used_options(struct manifest *m) static struct htable_option *get_config_options(struct manifest *m) { - const char **lines = (const char **)strsplit(m, config_header, "\n"); + const char **lines = (const char **)tal_strsplit(m, config_header, "\n", + STR_EMPTY_OK); unsigned int i; struct htable_option *opts = htable_option_new(); - for (i = 0; i < talloc_array_length(lines) - 1; i++) { + for (i = 0; i < tal_count(lines) - 1; i++) { char *sym; if (!get_token(&lines[i], "#")) @@ -108,6 +119,9 @@ static struct htable_option *get_config_options(struct manifest *m) /* Don't override endian... */ if (strends(sym, "_ENDIAN")) continue; + /* Don't override HAVE_STRUCT_TIMESPEC. */ + if (streq(sym, "HAVE_STRUCT_TIMESPEC")) + continue; if (!get_token(&lines[i], "1")) continue; htable_option_add(opts, sym); @@ -116,7 +130,6 @@ static struct htable_option *get_config_options(struct manifest *m) } static void do_reduce_features(struct manifest *m, - bool keep, unsigned int *timeleft, struct score *score) { struct htable_option *options_used, *options_avail, *options; @@ -152,19 +165,21 @@ static void do_reduce_features(struct manifest *m, return; /* Now make our own config.h variant, with our own options. */ - hdr = talloc_strdup(m, "/* Modified by reduce_features */\n"); - hdr = talloc_append_string(hdr, config_header); + hdr = tal_strcat(m, "/* Modified by reduce_features */\n", + config_header); for (sym = htable_option_first(options, &i); sym; sym = htable_option_next(options, &i)) { - hdr = talloc_asprintf_append - (hdr, "#undef %s\n#define %s 0\n", sym, sym); + tal_append_fmt(&hdr, "#undef %s\n#define %s 0\n", sym, sym); } - fd = open("config.h", O_EXCL|O_CREAT|O_RDWR, 0600); + if (mkdir("reduced-features", 0700) != 0 && errno != EEXIST) + err(1, "Creating reduced-features directory"); + + fd = open("reduced-features/config.h", O_TRUNC|O_CREAT|O_RDWR, 0600); if (fd < 0) - err(1, "Creating config.h"); + err(1, "Creating reduced-features/config.h"); if (!write_all(fd, hdr, strlen(hdr))) - err(1, "Writing config.h"); + err(1, "Writing reduced-features/config.h"); close(fd); features_were_reduced = true; }