X-Git-Url: https://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=tools%2Fnamespacize.c;h=3b7113c4302a7a6fc50eaf8524d388c20fb65ba2;hp=e4a3973f209cf2e1e9c8d29ad6b9311a562a6d68;hb=8aeb80ab049612adefeafea65aaa038591200944;hpb=650c775ff00cccd03fc84e7789a03c51d9839004 diff --git a/tools/namespacize.c b/tools/namespacize.c index e4a3973f..3b7113c4 100644 --- a/tools/namespacize.c +++ b/tools/namespacize.c @@ -1,18 +1,18 @@ /* Code to move a ccan module into the ccan_ namespace. */ #include #include -#include #include -#include -#include -#include #include #include #include #include -#include "talloc/talloc.h" - -#define CFLAGS "-O3 -Wall -Wundef -Wstrict-prototypes -Wold-style-definition -Wmissing-prototypes -Wmissing-declarations -Werror -I. -Iccan_tools/libtap/src/" +#include +#include +#include +#include +#include "ccan/string/string.h" +#include "ccan/talloc/talloc.h" +#include "tools.h" #define IDENT_CHARS "ABCDEFGHIJKLMNOPQRSTUVWXYZ" \ "abcdefghijklmnopqrstuvwxyz" \ @@ -30,27 +30,6 @@ static int indent = 0; #define verbose_indent() (indent += 2) #define verbose_unindent() (indent -= 2) -#define streq(a,b) (strcmp((a),(b)) == 0) - -#define strstarts(str,prefix) (strncmp((str),(prefix),strlen(prefix)) == 0) - -static inline bool strends(const char *str, const char *postfix) -{ - if (strlen(str) < strlen(postfix)) - return false; - - return streq(str + strlen(str) - strlen(postfix), postfix); -} - -static int close_no_errno(int fd) -{ - int ret = 0, serrno = errno; - if (close(fd) < 0) - ret = errno; - errno = serrno; - return ret; -} - static int unlink_no_errno(const char *filename) { int ret = 0, serrno = errno; @@ -60,71 +39,6 @@ static int unlink_no_errno(const char *filename) return ret; } -static void *grab_fd(const void *ctx, int fd) -{ - int ret; - unsigned int max = 16384, size = 0; - char *buffer; - - buffer = talloc_array(ctx, char, max+1); - while ((ret = read(fd, buffer + size, max - size)) > 0) { - size += ret; - if (size == max) - buffer = talloc_realloc(ctx, buffer, char, max*=2 + 1); - } - if (ret < 0) { - talloc_free(buffer); - buffer = NULL; - } else - buffer[size] = '\0'; - - return buffer; -} - -/* This version adds one byte (for nul term) */ -static void *grab_file(const void *ctx, const char *filename) -{ - int fd; - char *buffer; - - if (streq(filename, "-")) - fd = dup(STDIN_FILENO); - else - fd = open(filename, O_RDONLY, 0); - - if (fd < 0) - return NULL; - - buffer = grab_fd(ctx, fd); - close_no_errno(fd); - return buffer; -} - -/* This is a dumb one which copies. We could mangle instead. */ -static char **split(const void *ctx, const char *text, const char *delims, - unsigned int *nump) -{ - char **lines = NULL; - unsigned int max = 64, num = 0; - - lines = talloc_array(ctx, char *, max+1); - - while (*text != '\0') { - unsigned int len = strcspn(text, delims); - lines[num] = talloc_array(lines, char, len + 1); - memcpy(lines[num], text, len); - lines[num][len] = '\0'; - text += len; - text += strspn(text, delims); - if (++num == max) - lines = talloc_realloc(ctx, lines, char *, max*=2 + 1); - } - lines[num] = NULL; - if (nump) - *nump = num; - return lines; -} - static char **get_dir(const char *dir) { DIR *d; @@ -146,29 +60,6 @@ static char **get_dir(const char *dir) return names; } -static char ** __attribute__((format(printf, 2, 3))) -lines_from_cmd(const void *ctx, char *format, ...) -{ - va_list ap; - char *cmd, *buffer; - FILE *p; - - va_start(ap, format); - cmd = talloc_vasprintf(ctx, format, ap); - va_end(ap); - - p = popen(cmd, "r"); - if (!p) - err(1, "Executing '%s'", cmd); - - buffer = grab_fd(ctx, fileno(p)); - if (!buffer) - err(1, "Reading from '%s'", cmd); - pclose(p); - - return split(ctx, buffer, "\n", NULL); -} - struct replace { struct replace *next; @@ -565,35 +456,11 @@ static struct replace *read_replacement_file(const char *depdir) return NULL; } - for (line = split(file, file, "\n", NULL); *line; line++) + for (line = strsplit(file, file, "\n", NULL); *line; line++) add_replace(&repl, *line); return repl; } -static char *build_info(const void *ctx, const char *dir) -{ - char *file, *cfile, *cmd; - - cfile = talloc_asprintf(ctx, "%s/%s", dir, "_info.c"); - file = talloc_asprintf(cfile, "%s/%s", dir, "_info"); - cmd = talloc_asprintf(file, "gcc " CFLAGS " -o %s %s", file, cfile); - if (system(cmd) != 0) - errx(1, "Failed to compile %s", file); - - return file; -} - -static char **get_deps(const void *ctx, const char *dir) -{ - char **deps, *cmd; - - cmd = talloc_asprintf(ctx, "%s depends", build_info(ctx, dir)); - deps = lines_from_cmd(cmd, cmd); - if (!deps) - err(1, "Could not run '%s'", cmd); - return deps; -} - static char *parent_dir(const void *ctx, const char *dir) { char *parent, *slash; @@ -609,7 +476,7 @@ static char *parent_dir(const void *ctx, const char *dir) static void adjust_dir(const char *dir) { - char *parent = parent_dir(NULL, dir); + char *parent = parent_dir(talloc_autofree_context(), dir); char **deps; verbose("Adjusting %s\n", dir); @@ -630,6 +497,7 @@ static void adjust_dir(const char *dir) talloc_free(depdir); } verbose_unindent(); + talloc_free(parent); } static void adjust_dependents(const char *dir)