X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Ftal%2Fpath%2Fpath.c;h=b50120667c0759649d35292578f627ef644988c3;hb=7d1f0c73e4d321561abb74f82c8be97f10d69836;hp=e6e94dbe080dca24fcdb5ec02a4701381029647b;hpb=15ed4f453713f1a7bdeec22b53704819fa3d447f;p=ccan diff --git a/ccan/tal/path/path.c b/ccan/tal/path/path.c index e6e94dbe..b5012066 100644 --- a/ccan/tal/path/path.c +++ b/ccan/tal/path/path.c @@ -1,7 +1,6 @@ /* Licensed under BSD-MIT - see LICENSE file for details */ #include #include -#include #include #include #include @@ -12,9 +11,6 @@ #include #include -#define PATH_SEP_STR "/" -#define PATH_SEP (PATH_SEP_STR[0]) - char *path_cwd(const tal_t *ctx) { size_t len = 64; @@ -50,10 +46,10 @@ char *path_join(const tal_t *ctx, const char *base, const char *a) goto out; len = strlen(base); - ret = tal_dup(ctx, char, base, len, 1 + strlen(a) + 1); + ret = tal_dup_arr(ctx, char, base, len, 1 + strlen(a) + 1); if (!ret) goto out; - if (ret[len-1] != PATH_SEP) + if (len != 0 && ret[len-1] != PATH_SEP) ret[len++] = PATH_SEP; strcpy(ret + len, a); @@ -244,8 +240,10 @@ char *path_rel(const tal_t *ctx, const char *from, const char *to) /* This frees to if we're supposed to take it. */ cto = path_canon(tmpctx, to); - if (!cto) + if (!cto) { + ret = NULL; goto out; + } /* How much is in common? */ for (common = i = 0; cfrom[i] && cto[i]; i++) { @@ -323,7 +321,9 @@ fail_take_to: goto fail; } - ret[len] = '\0'; + if (ret) + ret[len] = '\0'; + out: if (taken(linkname)) tal_free(linkname); @@ -461,7 +461,7 @@ char *path_basename(const tal_t *ctx, const char *path) static char *fixed_string(const tal_t *ctx, const char *str, const char *path) { - char *ret = tal_dup(ctx, char, path, 0, strlen(str)+1); + char *ret = tal_dup_arr(ctx, char, path, 0, strlen(str)+1); if (ret) strcpy(ret, str); return ret;