#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
-#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...) \
*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 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); *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); *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)