summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzhuzhuzhu <[email protected]>2024-08-25 22:56:47 +0800
committerGitHub <[email protected]>2024-08-25 10:56:47 -0400
commitd9fac09f714e89d74403f14078141af941fb7660 (patch)
treedcab4c563314ac41c27534715a18a16ba7eee07a
parentc4c227e36762edd16d58439816e21c2eabd84da7 (diff)
【修复】 修复dup系统调用对用户态的返回值问题
-rw-r--r--components/dfs/dfs_v2/src/dfs.c10
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
}