]> git.ozlabs.org Git - ccan/blobdiff - ccan/tal/path/path.c
crypto/shachain/tools: update to new rbuf API.
[ccan] / ccan / tal / path / path.c
index 0ad168c872d219d3b485e23d53d39ab430d40eb7..b50120667c0759649d35292578f627ef644988c3 100644 (file)
@@ -1,7 +1,6 @@
 /* Licensed under BSD-MIT - see LICENSE file for details */
 #include <ccan/tal/path/path.h>
 #include <ccan/str/str.h>
-#include <ccan/take/take.h>
 #include <ccan/tal/str/str.h>
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -12,9 +11,6 @@
 #include <errno.h>
 #include <assert.h>
 
-#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;
@@ -525,7 +525,7 @@ bool path_is_dir(const char *path)
 char **path_split(const tal_t *ctx, const char *path)
 {
        bool empty = path && !path[0];
-       char **ret = strsplit(ctx, path, PATH_SEP_STR, STR_NO_EMPTY);
+       char **ret = tal_strsplit(ctx, path, PATH_SEP_STR, STR_NO_EMPTY);
 
        /* Handle the "/" case */
        if (ret && !empty && !ret[0]) {