From f937c5b889d91a4c703f84eb69987912fa0a67fd Mon Sep 17 00:00:00 2001 From: afwerar <1296468573@qq.com> Date: Tue, 12 Apr 2022 19:05:43 +0800 Subject: [PATCH] fix: make mul dir error. --- source/os/src/osDir.c | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/source/os/src/osDir.c b/source/os/src/osDir.c index b4058b3c0e..383e1617cf 100644 --- a/source/os/src/osDir.c +++ b/source/os/src/osDir.c @@ -68,7 +68,39 @@ void taosRemoveDir(const char *dirname) { bool taosDirExist(char *dirname) { return taosCheckExistFile(dirname); } int32_t taosMkDir(const char *dirname) { - int32_t code = mkdir(dirname, 0755); + if (dirname == NULL) return -1; + char *temp = strdup(dirname); + char *pos = temp; + int32_t code = 0; + + if (strncmp(temp, "/", 1) == 0) { + pos += 1; + } else if (strncmp(temp, "./", 2) == 0) { + pos += 2; + } + + for ( ; *pos != '\0'; pos++) { + if (*pos == '/') { + *pos = '\0'; + code = mkdir(temp, 0755); + if (code < 0 && errno != EEXIST) { + free(temp); + return code; + } + *pos = '/'; + } + } + + if (*(pos - 1) != '/') { + code = mkdir(temp, 0755); + if (code < 0 && errno != EEXIST) { + free(temp); + return code; + } + } + free(temp); + + // int32_t code = mkdir(dirname, 0755); if (code < 0 && errno == EEXIST) { return 0; }