diff options
| author | zhuzhuzhu <[email protected]> | 2024-08-25 22:56:47 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-08-25 10:56:47 -0400 |
| commit | d9fac09f714e89d74403f14078141af941fb7660 (patch) | |
| tree | dcab4c563314ac41c27534715a18a16ba7eee07a | |
| parent | c4c227e36762edd16d58439816e21c2eabd84da7 (diff) | |
【修复】 修复dup系统调用对用户态的返回值问题
| -rw-r--r-- | components/dfs/dfs_v2/src/dfs.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/components/dfs/dfs_v2/src/dfs.c b/components/dfs/dfs_v2/src/dfs.c index a00367913f..527ba89627 100644 --- a/components/dfs/dfs_v2/src/dfs.c +++ b/components/dfs/dfs_v2/src/dfs.c @@ -537,6 +537,7 @@ int dfs_dup(int oldfd, int startfd) fdt = dfs_fdtable_get(); if ((oldfd < 0) || (oldfd >= fdt->maxfd)) { + rt_set_errno(-EBADF); goto exit; } if (!fdt->fds[oldfd]) @@ -668,12 +669,17 @@ sysret_t sys_dup(int oldfd) int sys_dup(int oldfd) #endif { + int err = 0; int newfd = dfs_dup(oldfd, (dfs_fdtable_get() == &_fdtab) ? DFS_STDIO_OFFSET : 0); + if(newfd < 0) + { + err = rt_get_errno(); + } #ifdef RT_USING_SMART - return (sysret_t)newfd; + return err < 0 ? err : newfd; #else -return newfd; + return err < 0 ? err : newfd; #endif } |
