#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
-#include "string/string.h"
-#include "talloc/talloc.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...) \
#define verbose_indent() (indent += 2)
#define verbose_unindent() (indent -= 2)
-#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 unlink_no_errno(const char *filename)
{
int ret = 0, serrno = errno;
*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));
- 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);
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);
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;
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);
return NULL;
}
- for (line = split(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(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;
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)