X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=tools%2Fnamespacize.c;h=545b28bb1a4f7d2dcd138b9a4fe9325907b81502;hp=759ef938482f98a3b3aabd267f7e79c2fe56962d;hb=bbd7380019f3ea4629d170af24b902bf734c83ea;hpb=779d83085d6c6d37f6c4030130efe649a005696a diff --git a/tools/namespacize.c b/tools/namespacize.c index 759ef938..545b28bb 100644 --- a/tools/namespacize.c +++ b/tools/namespacize.c @@ -10,14 +10,12 @@ #include #include #include -#include "ccan/string/string.h" +#include "ccan/str/str.h" +#include "ccan/str_talloc/str_talloc.h" +#include "ccan/grab_file/grab_file.h" #include "ccan/talloc/talloc.h" #include "tools.h" -#define IDENT_CHARS "ABCDEFGHIJKLMNOPQRSTUVWXYZ" \ - "abcdefghijklmnopqrstuvwxyz" \ - "01234567889_" - static bool verbose = false; static int indent = 0; #define verbose(args...) \ @@ -104,15 +102,6 @@ static void add_replace_tok(struct replace **repl, const char *s) *repl = new; } -static char *basename(const void *ctx, const char *dir) -{ - char *p = strrchr(dir, '/'); - - if (!p) - return (char *)dir; - return talloc_strdup(ctx, p+1); -} - static void look_for_macros(char *contents, struct replace **repl) { char *p; @@ -271,8 +260,8 @@ static void analyze_headers(const char *dir, struct replace **repl) char *hdr, *contents; /* Get hold of header, assume that's it. */ - hdr = talloc_asprintf(dir, "%s/%s.h", dir, basename(dir, dir)); - contents = grab_file(dir, hdr); + hdr = talloc_asprintf(dir, "%s/%s.h", dir, talloc_basename(dir, dir)); + contents = grab_file(dir, hdr, NULL); if (!contents) err(1, "Reading %s", hdr); @@ -348,7 +337,7 @@ static const char *rewrite_file(const char *filename, int fd; verbose("Rewriting %s\n", filename); - file = grab_file(filename, filename); + file = grab_file(filename, filename, NULL); if (!file) err(1, "Reading file %s", filename); @@ -417,7 +406,7 @@ static void setup_adjust_files(const char *dir, static void rename_files(const struct adjusted *adj) { while (adj) { - if (rename(adj->tmpfile, adj->file) != 0) + if (!move_file(adj->tmpfile, adj->file)) warn("Could not rename over '%s', we're in trouble", adj->file); adj = adj->next; @@ -449,7 +438,7 @@ static struct replace *read_replacement_file(const char *depdir) char *replname = talloc_asprintf(depdir, "%s/.namespacize", depdir); char *file, **line; - file = grab_file(replname, replname); + file = grab_file(replname, replname, NULL); if (!file) { if (errno != ENOENT) err(1, "Opening %s", replname); @@ -461,27 +450,14 @@ static struct replace *read_replacement_file(const char *depdir) return repl; } -static char *parent_dir(const void *ctx, const char *dir) -{ - char *parent, *slash; - - parent = talloc_strdup(ctx, dir); - slash = strrchr(parent, '/'); - if (slash) - *slash = '\0'; - else - parent = talloc_strdup(ctx, "."); - return parent; -} - static void adjust_dir(const char *dir) { - char *parent = parent_dir(NULL, dir); + char *parent = talloc_dirname(talloc_autofree_context(), dir); char **deps; verbose("Adjusting %s\n", dir); verbose_indent(); - for (deps = get_deps(parent, dir); *deps; deps++) { + for (deps = get_deps(parent, dir, false, NULL); *deps; deps++) { char *depdir; struct adjusted *adj = NULL; struct replace *repl; @@ -497,29 +473,33 @@ static void adjust_dir(const char *dir) talloc_free(depdir); } verbose_unindent(); + talloc_free(parent); } static void adjust_dependents(const char *dir) { - char *parent = parent_dir(NULL, dir); - char *base = basename(parent, dir); + char *parent = talloc_dirname(NULL, dir); + char *base = talloc_basename(parent, dir); char **file; verbose("Looking for dependents in %s\n", parent); verbose_indent(); for (file = get_dir(parent); *file; file++) { - char *infoc, **deps; + char *info, **deps; bool isdep = false; - if (basename(*file, *file)[0] == '.') + if (talloc_basename(*file, *file)[0] == '.') continue; - infoc = talloc_asprintf(*file, "%s/_info.c", *file); - if (access(infoc, R_OK) != 0) + info = talloc_asprintf(*file, "%s/_info", *file); + if (access(info, R_OK) != 0) continue; - for (deps = get_deps(*file, *file); *deps; deps++) { - if (streq(*deps, base)) + for (deps = get_deps(*file, *file, false, NULL); + *deps; deps++) { + if (!strstarts(*deps, "ccan/")) + continue; + if (streq(*deps + strlen("ccan/"), base)) isdep = true; } if (isdep)