X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=tools%2Fccanlint%2Ftests%2Freduce_features.c;h=34a897061bb4fbe16c69800bf699f930d753502b;hp=39a2bde067a96dbc0072514f5633eebff39974aa;hb=HEAD;hpb=939fab341caaa06d032b29f06362335de0db82cc diff --git a/tools/ccanlint/tests/reduce_features.c b/tools/ccanlint/tests/reduce_features.c index 39a2bde0..34a89706 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,8 +130,8 @@ 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) + unsigned int *timeleft UNNEEDED, + struct score *score) { struct htable_option *options_used, *options_avail, *options; struct htable_option_iter i; @@ -152,22 +166,22 @@ 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); } - if (mkdir("reduced-features", 0700) != 0) + if (mkdir("reduced-features", 0700) != 0 && errno != EEXIST) err(1, "Creating reduced-features directory"); - fd = open("reduced-features/config.h", O_EXCL|O_CREAT|O_RDWR, 0600); + fd = open("reduced-features/config.h", O_TRUNC|O_CREAT|O_RDWR, 0600); if (fd < 0) err(1, "Creating reduced-features/config.h"); if (!write_all(fd, hdr, strlen(hdr))) err(1, "Writing reduced-features/config.h"); + htable_option_free(options); close(fd); features_were_reduced = true; }