cepheid

An Aurora 4X clone
Log | Files | Refs | README

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:
Msrc/file.c | 2+-
Mtests/file.test | 16+++++++++++-----
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); }