/* 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>
#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;
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);
/* 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++) {
goto fail;
}
- ret[len] = '\0';
+ if (ret)
+ ret[len] = '\0';
+
out:
if (taken(linkname))
tal_free(linkname);
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;
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]) {