#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...) \
names[size++]
= talloc_asprintf(names, "%s/%s", dir, ent->d_name);
}
- names[size++] = NULL;
+ /* FIXME: if the loop doesn't run at least once, we'll segfault here */
+ names[size] = NULL;
closedir(d);
return names;
}
*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;
for (p = contents; *p; p++) {
if (*p == '\n')
state = LINESTART;
- else if (!isspace(*p)) {
+ else if (!cisspace(*p)) {
if (state == LINESTART && *p == '#')
state = HASH;
else if (state==HASH && !strncmp(p, "define", 6)) {
return answer;
}
/* Compress whitespace into a single ' ' */
- if (isspace(c)) {
+ if (cisspace(c)) {
c = ' ';
- while (isspace((*p)[1]))
+ while (cisspace((*p)[1]))
(*p)++;
} else if (c == '{' || c == '(' || c == '[') {
if (c == '(')
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);
while ((p = strstr(p, str)) != NULL) {
/* Check it's not in the middle of a word. */
- if (p > f && (isalnum(p[-1]) || p[-1] == '_')) {
+ if (p > f && (cisalnum(p[-1]) || p[-1] == '_')) {
p++;
continue;
}
- if (isalnum(p[strlen(str)]) || p[strlen(str)] == '_') {
+ if (cisalnum(p[strlen(str)]) || p[strlen(str)] == '_') {
p++;
continue;
}
off = p - file;
memcpy(new, file, off);
- if (isupper(repl->string[0]))
+ if (cisupper(repl->string[0]))
memcpy(new + off, "CCAN_", 5);
else
memcpy(new + off, "ccan_", 5);
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)