diff --git a/components/lwp/lwp_syscall.c b/components/lwp/lwp_syscall.c index d9a7696b3ff38209ae5d39c7b09c93885e9848cd..23d741292a98215fd0caa21dba77c104b64ec13b 100644 --- a/components/lwp/lwp_syscall.c +++ b/components/lwp/lwp_syscall.c @@ -2514,6 +2514,11 @@ int sys_pmutex(void *umutex, int op, void *arg); int sys_dup(int oldfd); int sys_dup2(int oldfd, int new); +int sys_rename(const char *oldpath,const char *newpath) +{ + return rename(oldpath,newpath); +} + const static void* func_table[] = { (void*)sys_exit, /* 01 */ @@ -2666,6 +2671,7 @@ const static void* func_table[] = (void *)sys_pmutex, (void *)sys_dup, (void *)sys_dup2, + (void *)sys_rename, /* 135 */ }; const void *lwp_get_sys_api(rt_uint32_t number) diff --git a/components/net/sal_socket/socket/net_sockets.c b/components/net/sal_socket/socket/net_sockets.c index 7f9f57c4b5ed2602e064495378d77b64b9d7f257..8b2e3fe2fd8f6ee323fabf6f107ce4d90c544c5f 100644 --- a/components/net/sal_socket/socket/net_sockets.c +++ b/components/net/sal_socket/socket/net_sockets.c @@ -205,15 +205,26 @@ int socket(int domain, int type, int protocol) return -1; } d = fd_get(fd); + d->fnode = (struct dfs_fnode *)rt_malloc(sizeof(struct dfs_fnode)); + if (!d->fnode) + { + /* release fd */ + fd_release(fd); + rt_set_errno(-ENOMEM); + return -1; + } /* create socket and then put it to the dfs_fd */ socket = sal_socket(domain, type, protocol); if (socket >= 0) { + rt_memset(d->fnode, 0, sizeof(struct dfs_fnode)); + rt_list_init(&d->fnode->list); /* this is a socket fd */ d->fnode->type = FT_SOCKET; d->fnode->path = NULL; - + d->fnode->fullpath = NULL; + d->fnode->ref_count = 1; d->fnode->fops = dfs_net_get_fops(); d->fnode->flags = O_RDWR; /* set flags as read and write */ @@ -227,9 +238,8 @@ int socket(int domain, int type, int protocol) { /* release fd */ fd_release(fd); - rt_set_errno(-ENOMEM); - + rt_free(d->fnode); return -1; } @@ -257,6 +267,12 @@ int closesocket(int s) return -1; } + if (!d->fnode) + { + rt_set_errno(-EBADF); + return -1; + } + if (sal_closesocket(socket) == 0) { error = 0; @@ -269,6 +285,7 @@ int closesocket(int s) /* socket has been closed, delete it from file system fd */ fd_release(s); + rt_free(d->fnode); return error; }