aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2024-09-05 15:47:00 -0400
committerBruce Hill <bruce@bruce-hill.com>2024-09-05 15:47:00 -0400
commitdf61a0805fa5a54896c93200832165508e5badfa (patch)
treecea44cbc98b60b308e74e612bbadc8fbe938e52e
parent3444d1652d495def1195ab1d9c1fba4543f2af86 (diff)
Correctly resolve '../' paths
-rw-r--r--builtins/files.c2
-rw-r--r--tomo.c2
2 files changed, 2 insertions, 2 deletions
diff --git a/builtins/files.c b/builtins/files.c
index f506d596..dc91d0b0 100644
--- a/builtins/files.c
+++ b/builtins/files.c
@@ -29,7 +29,7 @@ public char *resolve_path(const char *path, const char *relative_to, const char
if (streq(path, "~") || starts_with(path, "~/")) {
char *resolved = realpath(heap_strf("%s%s", getenv("HOME"), path+1), buf);
if (resolved) return GC_strdup(resolved);
- } else if (streq(path, ".") || starts_with(path, "./")) {
+ } else if (streq(path, ".") || starts_with(path, "./") || starts_with(path, "../")) {
char *relative_dir = dirname(GC_strdup(relative_to));
char *resolved = realpath(heap_strf("%s/%s", relative_dir, path), buf);
if (resolved) return GC_strdup(resolved);
diff --git a/tomo.c b/tomo.c
index 92815075..b95fa9a4 100644
--- a/tomo.c
+++ b/tomo.c
@@ -326,7 +326,7 @@ void build_file_dependency_graph(const char *filename, Table_t *to_compile, Tabl
case USE_LOCAL: {
const char *path = use->path;
path = resolve_path(path, filename, "");
- if (!path) errx(1, "Couldn't resolve import: %s", use->path);
+ if (!path) errx(1, "Couldn't resolve import: %s relative to: %s", use->path, filename);
if (Table$str_get(*to_compile, path))
continue;
build_file_dependency_graph(path, to_compile, to_link);