Browse Source

tools: use tal/path instead of opencoding most paths.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Rusty Russell 13 years ago
parent
commit
49a1a4366f

+ 4 - 8
tools/ccanlint/ccanlint.c

@@ -647,7 +647,7 @@ int main(int argc, char *argv[])
 		strmap_iterate(&tests, add_to_all, &all);
 		strmap_iterate(&tests, add_to_all, &all);
 
 
 	/* This links back to the module's test dir. */
 	/* This links back to the module's test dir. */
-	testlink = tal_fmt(NULL, "%s/test", temp_dir());
+	testlink = path_join(NULL, temp_dir(), "test");
 
 
 	/* Defaults to pwd. */
 	/* Defaults to pwd. */
 	if (argc == 1) {
 	if (argc == 1) {
@@ -656,12 +656,8 @@ int main(int argc, char *argv[])
 	}
 	}
 
 
 	for (i = 1; i < argc; i++) {
 	for (i = 1; i < argc; i++) {
-		dir = argv[i];
-
-		if (dir[0] != '/')
-			dir = tal_fmt(NULL, "%s/%s", base_dir, dir);
-		while (strends(dir, "/"))
-			dir[strlen(dir)-1] = '\0';
+		dir = path_simplify(NULL,
+				    take(path_join(NULL, base_dir, argv[i])));
 
 
 	got_dir:
 	got_dir:
 		/* We assume there's a ccan/ in there somewhere... */
 		/* We assume there's a ccan/ in there somewhere... */
@@ -685,7 +681,7 @@ int main(int argc, char *argv[])
 		/* Create a symlink from temp dir back to src dir's
 		/* Create a symlink from temp dir back to src dir's
 		 * test directory. */
 		 * test directory. */
 		unlink(testlink);
 		unlink(testlink);
-		if (symlink(tal_fmt(m, "%s/test", dir), testlink) != 0)
+		if (symlink(path_join(m, dir, "test"), testlink) != 0)
 			err(1, "Creating test symlink in %s", temp_dir());
 			err(1, "Creating test symlink in %s", temp_dir());
 
 
 		if (!run_tests(&all, summary, m, prefix))
 		if (!run_tests(&all, summary, m, prefix))

+ 2 - 1
tools/ccanlint/tests/depends_exist.c

@@ -1,6 +1,7 @@
 #include <tools/ccanlint/ccanlint.h>
 #include <tools/ccanlint/ccanlint.h>
 #include <tools/tools.h>
 #include <tools/tools.h>
 #include <ccan/str/str.h>
 #include <ccan/str/str.h>
+#include <ccan/tal/path/path.h>
 #include <sys/types.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <fcntl.h>
@@ -30,7 +31,7 @@ static bool add_dep(struct manifest *m,
 {
 {
 	struct stat st;
 	struct stat st;
 	struct manifest *subm;
 	struct manifest *subm;
-	char *dir = tal_fmt(m, "%s/%s", ccan_dir, dep);
+	char *dir = path_join(m, ccan_dir, dep);
 
 
 	/* FIXME: get_manifest has a tendency to exit. */
 	/* FIXME: get_manifest has a tendency to exit. */
 	if (stat(dir, &st) != 0) {
 	if (stat(dir, &st) != 0) {

+ 3 - 2
tools/ccanlint/tests/license_exists.c

@@ -1,6 +1,7 @@
 #include <tools/ccanlint/ccanlint.h>
 #include <tools/ccanlint/ccanlint.h>
 #include <ccan/tal/tal.h>
 #include <ccan/tal/tal.h>
 #include <ccan/tal/str/str.h>
 #include <ccan/tal/str/str.h>
+#include <ccan/tal/path/path.h>
 #include <sys/types.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <fcntl.h>
@@ -73,7 +74,7 @@ static void handle_license_link(struct manifest *m, struct score *score)
 {
 {
 	struct doc_section *d = find_license_tag(m);
 	struct doc_section *d = find_license_tag(m);
 	const char *prefix = link_prefix(m);
 	const char *prefix = link_prefix(m);
-	const char *link = tal_fmt(m, "%s/LICENSE", m->dir);
+	const char *link = path_join(m, m->dir, "LICENSE");
 	const char *ldest = expected_link(score, prefix, m->license);
 	const char *ldest = expected_link(score, prefix, m->license);
 	char *q;
 	char *q;
 
 
@@ -97,7 +98,7 @@ static void check_has_license(struct manifest *m,
 {
 {
 	char buf[PATH_MAX];
 	char buf[PATH_MAX];
 	ssize_t len;
 	ssize_t len;
-	char *license = tal_fmt(m, "%s/LICENSE", m->dir);
+	char *license = path_join(m, m->dir, "LICENSE");
 	const char *expected;
 	const char *expected;
 	struct doc_section *d;
 	struct doc_section *d;
 	const char *prefix = link_prefix(m);
 	const char *prefix = link_prefix(m);

+ 2 - 1
tools/ccanlint/tests/objects_build.c

@@ -1,6 +1,7 @@
 #include <tools/ccanlint/ccanlint.h>
 #include <tools/ccanlint/ccanlint.h>
 #include <tools/tools.h>
 #include <tools/tools.h>
 #include <ccan/str/str.h>
 #include <ccan/str/str.h>
+#include <ccan/tal/path/path.h>
 #include <sys/types.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <fcntl.h>
@@ -35,7 +36,7 @@ void build_objects(struct manifest *m,
 
 
 	list_for_each(&m->c_files, i, list) {
 	list_for_each(&m->c_files, i, list) {
 		char *output;
 		char *output;
-		char *fullfile = tal_fmt(m, "%s/%s", m->dir, i->name);
+		char *fullfile = path_join(m, m->dir, i->name);
 
 
 		i->compiled[ctype] = temp_file(m, "", fullfile);
 		i->compiled[ctype] = temp_file(m, "", fullfile);
 		if (!compile_object(score, fullfile, ccan_dir, compiler, flags,
 		if (!compile_object(score, fullfile, ccan_dir, compiler, flags,

+ 2 - 1
tools/ccanlint/tests/tests_exist.c

@@ -1,5 +1,6 @@
 #include <tools/ccanlint/ccanlint.h>
 #include <tools/ccanlint/ccanlint.h>
 #include <ccan/tal/str/str.h>
 #include <ccan/tal/str/str.h>
+#include <ccan/tal/path/path.h>
 #include <sys/types.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <fcntl.h>
@@ -106,7 +107,7 @@ static void check_tests_exist(struct manifest *m,
 			    unsigned int *timeleft, struct score *score)
 			    unsigned int *timeleft, struct score *score)
 {
 {
 	struct stat st;
 	struct stat st;
-	char *test_dir = tal_fmt(m, "%s/test", m->dir);
+	char *test_dir = path_join(m, m->dir, "test");
 
 
 	if (lstat(test_dir, &st) != 0) {
 	if (lstat(test_dir, &st) != 0) {
 		score->error = tal_strdup(score, "No test directory");
 		score->error = tal_strdup(score, "No test directory");

+ 4 - 4
tools/depends.c

@@ -1,6 +1,7 @@
 #include <ccan/str/str.h>
 #include <ccan/str/str.h>
 #include <ccan/read_write_all/read_write_all.h>
 #include <ccan/read_write_all/read_write_all.h>
 #include <ccan/rbuf/rbuf.h>
 #include <ccan/rbuf/rbuf.h>
+#include <ccan/tal/path/path.h>
 #include <ccan/compiler/compiler.h>
 #include <ccan/compiler/compiler.h>
 #include <ccan/err/err.h>
 #include <ccan/err/err.h>
 #include "tools.h"
 #include "tools.h"
@@ -125,7 +126,7 @@ static char **get_one_safe_deps(const void *ctx,
 	unsigned int i, n;
 	unsigned int i, n;
 	bool correct_style = false;
 	bool correct_style = false;
 
 
-	fname = tal_fmt(ctx, "%s/_info", dir);
+	fname = path_join(ctx, dir, "_info");
 	raw = tal_grab_file(fname, fname, NULL);
 	raw = tal_grab_file(fname, fname, NULL);
 	if (!raw)
 	if (!raw)
 		errx(1, "Could not open %s", fname);
 		errx(1, "Could not open %s", fname);
@@ -206,7 +207,7 @@ get_all_deps(const void *ctx, const char *dir, const char *style,
 		if (!strstarts(deps[i], "ccan/"))
 		if (!strstarts(deps[i], "ccan/"))
 			continue;
 			continue;
 
 
-		subdir = tal_fmt(ctx, "%s/%s", find_ccan_dir(dir), deps[i]);
+		subdir = path_join(ctx, find_ccan_dir(dir), deps[i]);
 		newdeps = get_one(ctx, subdir, "depends", get_info);
 		newdeps = get_one(ctx, subdir, "depends", get_info);
 
 
 		/* Should be short, so brute-force out dups. */
 		/* Should be short, so brute-force out dups. */
@@ -279,8 +280,7 @@ char **get_libs(const void *ctx, const char *dir, const char *style,
 			if (!strstarts(deps[i], "ccan/"))
 			if (!strstarts(deps[i], "ccan/"))
 				continue;
 				continue;
 
 
-			subdir = tal_fmt(ctx, "%s/%s",
-					 find_ccan_dir(dir), deps[i]);
+			subdir = path_join(ctx, find_ccan_dir(dir), deps[i]);
 
 
 			newlibs = get_one_libs(ctx, subdir, get_info);
 			newlibs = get_one_libs(ctx, subdir, get_info);
 			newlen = tal_count(newlibs);
 			newlen = tal_count(newlibs);

+ 1 - 1
tools/manifest.c

@@ -76,7 +76,7 @@ struct ccan_file *new_ccan_file(const void *ctx, const char *dir, char *name)
 	for (i = 0; i < ARRAY_SIZE(f->compiled); i++)
 	for (i = 0; i < ARRAY_SIZE(f->compiled); i++)
 		f->compiled[i] = NULL;
 		f->compiled[i] = NULL;
 	f->name = tal_steal(f, name);
 	f->name = tal_steal(f, name);
-	f->fullname = tal_fmt(f, "%s/%s", dir, f->name);
+	f->fullname = path_join(f, dir, f->name);
 	f->contents = NULL;
 	f->contents = NULL;
 	f->simplified = NULL;
 	f->simplified = NULL;
 	return f;
 	return f;

+ 7 - 9
tools/namespacize.c

@@ -256,7 +256,8 @@ static void analyze_headers(const char *dir, struct replace **repl)
 	char *hdr, *contents;
 	char *hdr, *contents;
 
 
 	/* Get hold of header, assume that's it. */
 	/* Get hold of header, assume that's it. */
-	hdr = tal_fmt(dir, "%s/%s.h", dir, path_basename(dir, dir));
+	hdr = tal_fmt(dir, "%s.h",
+		      path_join(NULL, dir, take(path_basename(NULL, dir))));
 
 
 	contents = tal_grab_file(dir, hdr, NULL);
 	contents = tal_grab_file(dir, hdr, NULL);
 	if (!contents)
 	if (!contents)
@@ -275,7 +276,7 @@ static void analyze_headers(const char *dir, struct replace **repl)
 
 
 static void write_replacement_file(const char *dir, struct replace **repl)
 static void write_replacement_file(const char *dir, struct replace **repl)
 {
 {
-	char *replname = tal_fmt(dir, "%s/.namespacize", dir);
+	char *replname = path_join(dir, dir, ".namespacize");
 	int fd;
 	int fd;
 	struct replace *r;
 	struct replace *r;
 
 
@@ -415,10 +416,7 @@ static void convert_dir(const char *dir)
 	struct adjusted *adj = NULL;
 	struct adjusted *adj = NULL;
 
 
 	/* Remove any ugly trailing slashes. */
 	/* Remove any ugly trailing slashes. */
-	name = tal_strdup(NULL, dir);
-	while (strends(name, "/"))
-		name[strlen(name)-1] = '\0';
-
+	name = path_canon(NULL, dir);
 	analyze_headers(name, &replace);
 	analyze_headers(name, &replace);
 	write_replacement_file(name, &replace);
 	write_replacement_file(name, &replace);
 	setup_adjust_files(name, replace, &adj);
 	setup_adjust_files(name, replace, &adj);
@@ -430,7 +428,7 @@ static void convert_dir(const char *dir)
 static struct replace *read_replacement_file(const char *depdir)
 static struct replace *read_replacement_file(const char *depdir)
 {
 {
 	struct replace *repl = NULL;
 	struct replace *repl = NULL;
-	char *replname = tal_fmt(depdir, "%s/.namespacize", depdir);
+	char *replname = path_join(depdir, depdir, ".namespacize");
 	char *file, **line;
 	char *file, **line;
 
 
 	file = tal_grab_file(replname, replname, NULL);
 	file = tal_grab_file(replname, replname, NULL);
@@ -459,7 +457,7 @@ static void adjust_dir(const char *dir)
 		struct adjusted *adj = NULL;
 		struct adjusted *adj = NULL;
 		struct replace *repl;
 		struct replace *repl;
 
 
-		depdir = tal_fmt(parent, "%s/%s", parent, *deps);
+		depdir = path_join(parent, parent, *deps);
 		repl = read_replacement_file(depdir);
 		repl = read_replacement_file(depdir);
 		if (repl) {
 		if (repl) {
 			verbose("%s has been namespacized\n", depdir);
 			verbose("%s has been namespacized\n", depdir);
@@ -488,7 +486,7 @@ static void adjust_dependents(const char *dir)
 		if (path_basename(*file, *file)[0] == '.')
 		if (path_basename(*file, *file)[0] == '.')
 			continue;
 			continue;
 
 
-		info = tal_fmt(*file, "%s/_info", *file);
+		info = path_join(*file, *file, "_info");
 		if (access(info, R_OK) != 0)
 		if (access(info, R_OK) != 0)
 			continue;
 			continue;
 
 

+ 2 - 1
tools/read_config_header.c

@@ -1,5 +1,6 @@
 #include <ccan/err/err.h>
 #include <ccan/err/err.h>
 #include <ccan/str/str.h>
 #include <ccan/str/str.h>
+#include <ccan/tal/path/path.h>
 #include "read_config_header.h"
 #include "read_config_header.h"
 #include "tools.h"
 #include "tools.h"
 #include <string.h>
 #include <string.h>
@@ -90,7 +91,7 @@ char *read_config_header(const char *ccan_dir,
 			 const char **compiler, const char **cflags,
 			 const char **compiler, const char **cflags,
 			 bool verbose)
 			 bool verbose)
 {
 {
-	char *fname = tal_fmt(NULL, "%s/config.h", ccan_dir);
+	char *fname = path_join(NULL, ccan_dir, "config.h");
 	char **lines;
 	char **lines;
 	unsigned int i;
 	unsigned int i;
 	char *config_header;
 	char *config_header;