diff --git a/components/dfs/dfs_v2/src/dfs.c b/components/dfs/dfs_v2/src/dfs.c index c181930fcc..9b25985409 100644 --- a/components/dfs/dfs_v2/src/dfs.c +++ b/components/dfs/dfs_v2/src/dfs.c @@ -197,7 +197,7 @@ int fdt_fd_new(struct dfs_fdtable *fdt) dfs_file_lock(); /* find an empty fd entry */ - idx = fd_alloc(fdt, DFS_STDIO_OFFSET); + idx = fd_alloc(fdt, 0); /* can't find an empty fd entry */ if (idx < 0) { diff --git a/components/libc/posix/io/stdio/libc.c b/components/libc/posix/io/stdio/libc.c index a5bee3f448..9c7d28fefd 100644 --- a/components/libc/posix/io/stdio/libc.c +++ b/components/libc/posix/io/stdio/libc.c @@ -30,15 +30,34 @@ int libc_system_init(void) dev_console = rt_console_get_device(); if (dev_console) { - int fd = libc_stdio_set_console(dev_console->parent.name, O_RDWR); - if (fd < 0) + int fd, ret; + char name[STDIO_DEVICE_NAME_MAX]; + + rt_snprintf(name, sizeof(name) - 1, "/dev/%s", dev_console->parent.name); + name[STDIO_DEVICE_NAME_MAX - 1] = '\0'; + + fd = open(name, O_RDWR); + if (fd >= 0) + { + /* set fd (0, 1, 2) */ + ret = sys_dup2(fd, 0); + if (ret != fd) + { + close(fd); + } + sys_dup2(ret, 1); + sys_dup2(ret, 2); + + ret = libc_stdio_set_console(dev_console->parent.name, O_RDWR); + if (ret < 0) + { + return -1; + } + } + else { return -1; } - /* set fd (0, 1, 2) */ - sys_dup2(fd, 0); - sys_dup2(fd, 1); - sys_dup2(fd, 2); } #endif /* RT_USING_POSIX_STDIO */ return 0; diff --git a/components/lwp/lwp_futex.c b/components/lwp/lwp_futex.c index 49fe13861c..3d0fda0af6 100644 --- a/components/lwp/lwp_futex.c +++ b/components/lwp/lwp_futex.c @@ -124,7 +124,12 @@ int futex_wait(struct rt_futex *futex, int value, const struct timespec *timeout /* with timeout */ if (timeout) { - rt_int32_t time = rt_timespec_to_tick(timeout); + rt_int32_t time = timeout->tv_sec * RT_TICK_PER_SECOND + timeout->tv_nsec * RT_TICK_PER_SECOND / NANOSECOND_PER_SECOND; + + if (time < 0) + { + time = 0; + } /* start the timer of thread */ rt_timer_control(&(thread->thread_timer),