Sfoglia il codice sorgente

【修复】修复symlink系统调用返回值不是预期问题

zhuzhuzhu 8 mesi fa
parent
commit
c4c227e367
2 ha cambiato i file con 14 aggiunte e 7 eliminazioni
  1. 4 0
      components/dfs/dfs_v2/src/dfs_file.c
  2. 10 7
      components/lwp/lwp_syscall.c

+ 4 - 0
components/dfs/dfs_v2/src/dfs_file.c

@@ -1567,6 +1567,10 @@ int dfs_file_symlink(const char *target, const char *linkpath)
                 rt_free(parent);
             }
         }
+        else
+        {
+            rt_set_errno(-EPERM);
+        }
 
         if (fullpath != linkpath)
             rt_free(fullpath);

+ 10 - 7
components/lwp/lwp_syscall.c

@@ -5909,28 +5909,31 @@ sysret_t sys_link(const char *existing, const char *new)
 sysret_t sys_symlink(const char *existing, const char *new)
 {
     int ret = -1;
-
+    int err = 0 ;
 #ifdef ARCH_MM_MMU
-    int err;
 
-    err = lwp_user_strlen(existing);
-    if (err <= 0)
+    ret = lwp_user_strlen(existing);
+    if (ret <= 0)
     {
         return -EFAULT;
     }
 
-    err = lwp_user_strlen(new);
-    if (err <= 0)
+    ret = lwp_user_strlen(new);
+    if (ret <= 0)
     {
         return -EFAULT;
     }
 #endif
 #ifdef RT_USING_DFS_V2
     ret = dfs_file_symlink(existing, new);
+    if(ret < 0)
+    {
+        err = GET_ERRNO();
+    }
 #else
     SET_ERRNO(EFAULT);
 #endif
-    return (ret < 0 ? GET_ERRNO() : ret);
+    return (err < 0 ? err : ret);
 }
 
 sysret_t sys_eventfd2(unsigned int count, int flags)