]> git.kaiwu.me - njs.git/commitdiff
FS: fixed fs.mkdir() and friends.
authorDmitry Volyntsev <xeioex@nginx.com>
Wed, 26 Nov 2025 03:08:10 +0000 (19:08 -0800)
committerDmitry Volyntsev <xeioexception@gmail.com>
Mon, 1 Dec 2025 17:46:23 +0000 (09:46 -0800)
external/njs_fs_module.c
external/qjs_fs_module.c
test/fs/mkdir_recursive.t.mjs [moved from test/fs/mkdir2.t.mjs with 100% similarity]

index c56a685aa2d991a8dee7b84196e69066385602fe..33fb6111b6c7e8adbdc0bff2afeeeaa67791e99f 100644 (file)
@@ -2950,28 +2950,27 @@ njs_fs_make_path(njs_vm_t *vm, char *path, mode_t md, njs_bool_t recursive,
         ret = mkdir(path, md);
         err = errno;
 
-        switch (ret) {
-        case 0:
-            break;
-
-        case EACCES:
-        case ENOTDIR:
-        case EPERM:
-            goto failed;
-
-        case EEXIST:
-        default:
-            ret = stat(path, &sb);
-            if (ret == 0) {
-                if (!S_ISDIR(sb.st_mode)) {
-                    err = ENOTDIR;
-                    goto failed;
+        if (ret != 0) {
+            switch (err) {
+            case EACCES:
+            case ENOTDIR:
+            case EPERM:
+                goto failed;
+
+            case EEXIST:
+            default:
+                ret = stat(path, &sb);
+                if (ret == 0) {
+                    if (!S_ISDIR(sb.st_mode)) {
+                        err = ENOTDIR;
+                        goto failed;
+                    }
+
+                    break;
                 }
 
-                break;
+                goto failed;
             }
-
-            goto failed;
         }
 
         if (p == end) {
index 4fcce40f85f8ca700c163ec8cf02863051062dc5..9117072bc943d481e181053ea3077e1de165ccb1 100644 (file)
@@ -513,28 +513,27 @@ qjs_fs_make_path(JSContext *cx, char *path, mode_t md, int recursive)
         ret = mkdir(path, md);
         err = errno;
 
-        switch (ret) {
-        case 0:
-            break;
-
-        case EACCES:
-        case ENOTDIR:
-        case EPERM:
-            goto failed;
-
-        case EEXIST:
-        default:
-            ret = stat(path, &sb);
-            if (ret == 0) {
-                if (!S_ISDIR(sb.st_mode)) {
-                    err = ENOTDIR;
-                    goto failed;
+        if (ret != 0) {
+            switch (err) {
+            case EACCES:
+            case ENOTDIR:
+            case EPERM:
+                goto failed;
+
+            case EEXIST:
+            default:
+                ret = stat(path, &sb);
+                if (ret == 0) {
+                    if (!S_ISDIR(sb.st_mode)) {
+                        err = ENOTDIR;
+                        goto failed;
+                    }
+
+                    break;
                 }
 
-                break;
+                goto failed;
             }
-
-            goto failed;
         }
 
         if (p == end) {