summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
Diffstat (limited to 'components')
-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
}