commit 48cd1a87e21fb42be14bcb521725c6776432096f
parent bab1fb545a84939cdaf49a4d2c31f12a7873a993
Author: hhvn <dev@hhvn.uk>
Date: Sun, 27 Nov 2022 23:43:13 +0000
Fix bug where mkdirp would fail if directories already existed
Diffstat:
2 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/src/file.c b/src/file.c
@@ -19,7 +19,7 @@ mkdirp(char *path) {
max = strsplit(dup, "/", p, ELEMS(p));
for (i = 0, create = 0; i < max; i++) {
- if (create || access(path, F_OK) == -1) {
+ if (create || access(dup, F_OK) == -1) {
if (mkdir(dup, 0777 & ~umask(0)) == -1) {
ret = -1;
goto end;
diff --git a/tests/file.test b/tests/file.test
@@ -7,18 +7,24 @@
FILE *f;
int ret;
- mkdirp("a/b/c");
+ ret = mkdirp("a/b/c");
ck_assert(access("a", F_OK) == 0);
ck_assert(access("a/b", F_OK) == 0);
ck_assert(access("a/b/c", F_OK) == 0);
+ ck_assert(ret == 0);
+
+ ret = mkdirp("a/e");
+ ck_assert(access("a/e", F_OK) == 0);
+ ck_assert(ret == 0);
- f = fopen("a/b/d", "w");
+ f = fopen("a/b/e", "w");
fclose(f);
ret = rmdirp("a");
- ck_assert(access("a", F_OK) != 0);
- ck_assert(access("a/b", F_OK) != 0);
+ ck_assert(access("a/b/e", F_OK) != 0);
ck_assert(access("a/b/c", F_OK) != 0);
- ck_assert(access("a/b/d", F_OK) != 0);
+ ck_assert(access("a/b", F_OK) != 0);
+ ck_assert(access("a/d", F_OK) != 0);
+ ck_assert(access("a", F_OK) != 0);
ck_assert(ret == 0);
}