宋超 4 лет назад
Родитель
Сommit
0ea8d32da2
2 измененных файлов с 20 добавлено и 7 удалено
  1. 1 2
      components/lwp/lwp_syscall.c
  2. 19 5
      components/net/sal_socket/dfs_net/dfs_net.c

+ 1 - 2
components/lwp/lwp_syscall.c

@@ -60,8 +60,7 @@
 #define ALLOC_KERNEL_STACK_SIZE 5120
 #define ALLOC_KERNEL_STACK_SIZE 5120
 
 
 #define SET_ERRNO(no) rt_set_errno(-(no))
 #define SET_ERRNO(no) rt_set_errno(-(no))
-#define GET_ERRNO() rt_get_errno()
-
+#define GET_ERRNO() ((rt_get_errno() > 0) ? (-rt_get_errno()) : rt_get_errno())
 struct musl_sockaddr
 struct musl_sockaddr
 {
 {
     uint16_t sa_family;
     uint16_t sa_family;

+ 19 - 5
components/net/sal_socket/dfs_net/dfs_net.c

@@ -36,11 +36,16 @@ static int dfs_net_ioctl(struct dfs_fd* file, int cmd, void* args)
 {
 {
     int ret;
     int ret;
     int socket = (int)(size_t)file->fnode->data;
     int socket = (int)(size_t)file->fnode->data;
+    int errno_temp;
 
 
     ret = sal_ioctlsocket(socket, cmd, args);
     ret = sal_ioctlsocket(socket, cmd, args);
     if (ret < 0)
     if (ret < 0)
     {
     {
-        ret = rt_get_errno();
+        errno_temp = rt_get_errno();
+        if(errno_temp > 0)
+        {
+            ret = -errno_temp;
+        }
     }
     }
     return ret;
     return ret;
 }
 }
@@ -49,11 +54,16 @@ static int dfs_net_read(struct dfs_fd* file, void *buf, size_t count)
 {
 {
     int ret;
     int ret;
     int socket = (int)(size_t)file->fnode->data;
     int socket = (int)(size_t)file->fnode->data;
+    int errno_temp;
 
 
     ret = sal_recvfrom(socket, buf, count, 0, NULL, NULL);
     ret = sal_recvfrom(socket, buf, count, 0, NULL, NULL);
     if (ret < 0)
     if (ret < 0)
     {
     {
-        ret = rt_get_errno();
+        errno_temp = rt_get_errno();
+        if(errno_temp > 0)
+        {
+            ret = -errno_temp;
+        }
     }
     }
     return ret;
     return ret;
 }
 }
@@ -62,15 +72,19 @@ static int dfs_net_write(struct dfs_fd *file, const void *buf, size_t count)
 {
 {
     int ret;
     int ret;
     int socket = (int)(size_t)file->fnode->data;
     int socket = (int)(size_t)file->fnode->data;
-
+    int errno_temp;
+    
     ret = sal_sendto(socket, buf, count, 0, NULL, 0);
     ret = sal_sendto(socket, buf, count, 0, NULL, 0);
     if (ret < 0)
     if (ret < 0)
     {
     {
-        ret = rt_get_errno();
+        errno_temp = rt_get_errno();
+        if(errno_temp > 0)
+        {
+            ret = -errno_temp;
+        }
     }
     }
     return ret;
     return ret;
 }
 }
-
 static int dfs_net_close(struct dfs_fd* file)
 static int dfs_net_close(struct dfs_fd* file)
 {
 {
     int socket;
     int socket;