*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;
char *hdr, *contents;
/* Get hold of header, assume that's it. */
- hdr = talloc_asprintf(dir, "%s/%s.h", dir, basename(dir, dir));
+ 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);
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;
return NULL;
}
- for (line = strsplit(file, file, "\n", NULL); *line; line++)
+ for (line = strsplit(file, file, "\n"); *line; line++)
add_replace(&repl, *line);
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(talloc_autofree_context(), dir);
+ char *parent = talloc_dirname(talloc_autofree_context(), dir);
char **deps;
verbose("Adjusting %s\n", dir);
verbose_indent();
- for (deps = get_deps(parent, dir, false); *deps; deps++) {
+ for (deps = get_deps(parent, dir, false, NULL); *deps; deps++) {
char *depdir;
struct adjusted *adj = NULL;
struct replace *repl;
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, false); *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)