]> Chaos Git - corbenik/ctrulib.git/commitdiff
Refactor soc to use errno.
authormtheall <pigman46@gmail.com>
Sat, 24 Jan 2015 20:14:06 +0000 (14:14 -0600)
committermtheall <pigman46@gmail.com>
Sat, 24 Jan 2015 20:14:06 +0000 (14:14 -0600)
27 files changed:
libctru/include/3ds/services/soc.h
libctru/include/netdb.h
libctru/source/services/soc/soc_accept.c
libctru/source/services/soc/soc_bind.c
libctru/source/services/soc/soc_closesocket.c
libctru/source/services/soc/soc_common.c
libctru/source/services/soc/soc_common.h
libctru/source/services/soc/soc_connect.c
libctru/source/services/soc/soc_fcntl.c
libctru/source/services/soc/soc_gethostbyname.c
libctru/source/services/soc/soc_gethostid.c
libctru/source/services/soc/soc_getpeername.c
libctru/source/services/soc/soc_getsockname.c
libctru/source/services/soc/soc_getsockopt.c
libctru/source/services/soc/soc_herror.c [new file with mode: 0644]
libctru/source/services/soc/soc_hstrerror.c [new file with mode: 0644]
libctru/source/services/soc/soc_init.c
libctru/source/services/soc/soc_ioctl.c
libctru/source/services/soc/soc_listen.c
libctru/source/services/soc/soc_poll.c
libctru/source/services/soc/soc_recvfrom.c
libctru/source/services/soc/soc_select.c
libctru/source/services/soc/soc_sendto.c
libctru/source/services/soc/soc_setsockopt.c
libctru/source/services/soc/soc_shutdown.c
libctru/source/services/soc/soc_sockatmark.c
libctru/source/services/soc/soc_socket.c

index 55ff21e99baa8e8b3050b2767c2f103e84e6054e..3ec99b72ea4e8de7e20aaca8da6d441939fa312b 100644 (file)
@@ -1,11 +1,8 @@
 #pragma once
 
 Result SOC_Initialize(u32 *context_addr, u32 context_size);//Example context_size: 0x48000. The specified context buffer can no longer be accessed by the process which called this function, since the userland permissions for this block are set to no-access.
-Result SOC_Shutdown();
-int SOC_GetErrno();
 
 Result SOC_Shutdown(void);
-int SOC_GetErrno(void);
 
 /* this is supposed to be in unistd.h but newlib only puts it for cygwin */
 long gethostid(void);
index 7f769a49d8cbc40ef784e850341ec65262fe0875..b3fac8183787c55dafe7d54858f07f54dd8452e1 100644 (file)
@@ -22,6 +22,8 @@ extern "C" {
 
        extern int      h_errno;
        struct hostent* gethostbyname(const char *name);
+       void            herror(const char *s);
+       const char*     hstrerror(int err);
 
 #ifdef __cplusplus
 }
index cf6486374ed0056c9d24b8f247d72192d26e24a7..71ce7908e6d2b0ebb3c6090e3403101f0a3bce6f 100644 (file)
@@ -1,4 +1,5 @@
 #include "soc_common.h"
+#include <errno.h>
 #include <sys/socket.h>
 
 int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
@@ -12,23 +13,20 @@ int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
        u32 saved_threadstorage[2];
 
        sockfd = soc_get_fd(sockfd);
-       if(sockfd < 0)
-       {
-               SOCU_errno = sockfd;
+       if(sockfd < 0) {
+               errno = -sockfd;
                return -1;
        }
 
        dev = FindDevice("soc:");
-       if(dev < 0)
-       {
-               SOCU_errno = -ENODEV;
+       if(dev < 0) {
+               errno = ENODEV;
                return -1;
        }
 
        fd = __alloc_handle(sizeof(__handle) + sizeof(Handle));
-       if(fd < 0)
-       {
-               SOCU_errno = -ENOMEM;
+       if(fd < 0) {
+               errno = ENOMEM;
                return -1;
        }
 
@@ -49,9 +47,10 @@ int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
        cmdbuf[0x100>>2] = (tmp_addrlen<<14) | 2;
        cmdbuf[0x104>>2] = (u32)tmpaddr;
 
-       if((ret = svcSendSyncRequest(SOCU_handle)) != 0)
-       {
+       ret = svcSendSyncRequest(SOCU_handle);
+       if(ret != 0) {
                __release_handle(fd);
+               errno = SYNC_ERROR;
                return ret;
        }
 
@@ -63,18 +62,16 @@ int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
                ret = _net_convert_error(cmdbuf[2]);
 
        if(ret < 0)
-               SOCU_errno = ret;
+               errno = -ret;
 
-       if(ret >= 0 && addr != NULL)
-       {
+       if(ret >= 0 && addr != NULL) {
                addr->sa_family = tmpaddr[1];
                if(*addrlen > tmpaddr[0])
                        *addrlen = tmpaddr[0];
                memcpy(addr->sa_data, &tmpaddr[2], *addrlen - 2);
        }
 
-       if(ret < 0)
-       {
+       if(ret < 0) {
                __release_handle(fd);
                return -1;
        }
index dd37f7ed2307021924fc1a7c3668178636d84769..610cdf607e7f7216d61f907fbea6faa162f73ec3 100644 (file)
@@ -4,32 +4,26 @@
 
 int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
 {
-       int ret=0;
-       int tmp_addrlen=0;
+       int ret = 0;
+       int tmp_addrlen = 0;
        u32 *cmdbuf = getThreadCommandBuffer();
        u8 tmpaddr[0x1c];
 
        sockfd = soc_get_fd(sockfd);
-       if(sockfd < 0)
-       {
-               SOCU_errno = sockfd;
+       if(sockfd < 0) {
+               errno = -sockfd;
                return -1;
        }
 
        memset(tmpaddr, 0, 0x1c);
 
        if(addr->sa_family == AF_INET)
-       {
                tmp_addrlen = 8;
-       }
        else
-       {
                tmp_addrlen = 0x1c;
-       }
 
-       if(addrlen < tmp_addrlen)
-       {
-               SOCU_errno = EINVAL;
+       if(addrlen < tmp_addrlen) {
+               errno = EINVAL;
                return -1;
        }
 
@@ -44,12 +38,20 @@ int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
        cmdbuf[5] = (((u32)tmp_addrlen)<<14) | 2;
        cmdbuf[6] = (u32)tmpaddr;
 
-       if((ret = svcSendSyncRequest(SOCU_handle))!=0)return ret;
+       ret = svcSendSyncRequest(SOCU_handle);
+       if(ret != 0) {
+               errno = SYNC_ERROR;
+               return ret;
+       }
 
        ret = (int)cmdbuf[1];
-       if(ret==0)ret = _net_convert_error(cmdbuf[2]);
-       SOCU_errno = ret;
+       if(ret == 0)
+               ret = _net_convert_error(cmdbuf[2]);
+
+       if(ret < 0) {
+               errno = -ret;
+               return -1;
+       }
 
-       if(ret<0)return -1;
        return 0;
 }
index 37e19230f6c171c44c1b44d630fe80c4b29d8081..9a3c93b17523cccb093d05d21f2ad27f64ecdfcb 100644 (file)
@@ -1,12 +1,13 @@
 #include "soc_common.h"
+#include <errno.h>
 #include <sys/socket.h>
+#include <unistd.h>
 
 int closesocket(int sockfd)
 {
        int fd = soc_get_fd(sockfd);
-       if(fd < 0)
-       {
-               SOCU_errno = fd;
+       if(fd < 0) {
+               errno = -fd;
                return -1;
        }
 
index c41491c782e162262ebd081346607ee165b1a5c6..a610919ea3da2a9a9ce88b3e84d38a03a3767c78 100644 (file)
@@ -3,7 +3,6 @@
 #include <sys/iosupport.h>
 
 Handle SOCU_handle = 0;
-int    SOCU_errno = 0;
 Handle socMemhandle = 0;
 
 //This is based on the array from libogc network_wii.c.
@@ -92,14 +91,11 @@ static u8 _net_error_code_map[] = {
 //This is based on the function from libogc network_wii.c.
 s32 _net_convert_error(s32 sock_retval)
 {
-       if (sock_retval >= 0) return sock_retval;
-       if (sock_retval < -sizeof(_net_error_code_map)
-               || !_net_error_code_map[-sock_retval])
-                       return NET_UNKNOWN_ERROR_OFFSET + sock_retval;
-       return -_net_error_code_map[-sock_retval];
-}
+       if(sock_retval >= 0)
+               return sock_retval;
 
-int SOC_GetErrno(void)
-{
-       return SOCU_errno;
+       if(sock_retval < -sizeof(_net_error_code_map)
+       || !_net_error_code_map[-sock_retval])
+               return NET_UNKNOWN_ERROR_OFFSET + sock_retval;
+       return -_net_error_code_map[-sock_retval];
 }
index f325bf784ba85a7829a66aac38a93b1996d285c6..f35c5fe8d7068590d04b5244c76b39ddad527859 100644 (file)
@@ -8,12 +8,13 @@
 #include <3ds/srv.h>
 #include <3ds/services/soc.h>
 
+#define SYNC_ERROR ENODEV
+
 int __alloc_handle(int size);
 __handle *__get_handle(int fd);
 void __release_handle(int fd);
 
 extern Handle  SOCU_handle;
-extern int     SOCU_errno;
 extern Handle  socMemhandle;
 
 static inline int
index cf01759d7e856ac85d28ccc7ea7e52fa0c2e8bc4..4cab7cc6a222822b12cf2efe8c7d3dcf72641cbf 100644 (file)
@@ -4,32 +4,26 @@
 
 int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
 {
-       int ret=0;
-       int tmp_addrlen=0;
+       int ret = 0;
+       int tmp_addrlen = 0;
        u32 *cmdbuf = getThreadCommandBuffer();
        u8 tmpaddr[0x1c];
 
        sockfd = soc_get_fd(sockfd);
-       if(sockfd < 0)
-       {
-               SOCU_errno = sockfd;
+       if(sockfd < 0) {
+               errno = -sockfd;
                return -1;
        }
 
        memset(tmpaddr, 0, 0x1c);
 
        if(addr->sa_family == AF_INET)
-       {
                tmp_addrlen = 8;
-       }
        else
-       {
                tmp_addrlen = 0x1c;
-       }
 
-       if(addrlen < tmp_addrlen)
-       {
-               SOCU_errno = -EINVAL;
+       if(addrlen < tmp_addrlen) {
+               errno = EINVAL;
                return -1;
        }
 
@@ -44,12 +38,20 @@ int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
        cmdbuf[5] = (((u32)tmp_addrlen)<<14) | 2;
        cmdbuf[6] = (u32)tmpaddr;
 
-       if((ret = svcSendSyncRequest(SOCU_handle))!=0)return ret;
+       ret = svcSendSyncRequest(SOCU_handle);
+       if(ret != 0) {
+               errno = SYNC_ERROR;
+               return ret;
+       }
 
        ret = (int)cmdbuf[1];
-       if(ret==0)ret = _net_convert_error(cmdbuf[2]);
-       SOCU_errno = ret;
+       if(ret == 0)
+               ret = _net_convert_error(cmdbuf[2]);
+
+       if(ret < 0) {
+               errno = -ret;
+               return -1;
+       }
 
-       if(ret<0)return -1;
        return 0;
 }
index 23b5f8a4ef7b422fe3524960a9656a17cb00b1b1..f14a0e083d8c227b2c8d2734ef4372ab51181c26 100644 (file)
@@ -12,7 +12,8 @@ static int from_3ds(int flags)
 {
        int newflags = 0;
 
-       if(flags & O_NONBLOCK_3DS) newflags |= O_NONBLOCK;
+       if(flags & O_NONBLOCK_3DS)
+               newflags |= O_NONBLOCK;
        /* add other flag translations here, but I have only seen O_NONBLOCK */
 
        return newflags;
@@ -22,7 +23,8 @@ static int to_3ds(int flags)
 {
        int newflags = 0;
 
-       if(flags & O_NONBLOCK) newflags |= O_NONBLOCK_3DS;
+       if(flags & O_NONBLOCK)
+               newflags |= O_NONBLOCK_3DS;
        /* add other flag translations here, but I have only seen O_NONBLOCK */
 
        return newflags;
@@ -37,34 +39,29 @@ int fcntl(int sockfd, int cmd, ...)
        va_list args;
 
        sockfd = soc_get_fd(sockfd);
-       if(sockfd < 0)
-       {
-               SOCU_errno = sockfd;
+       if(sockfd < 0) {
+               errno = -sockfd;
                return -1;
        }
 
-       if(cmd != F_GETFL && cmd != F_SETFL)
-       {
-               SOCU_errno = -EINVAL;
+       if(cmd != F_GETFL && cmd != F_SETFL) {
+               errno = EINVAL;
                return -1;
        }
 
-       va_start(args, cmd);
-       if(cmd == F_SETFL)
-       {
+       if(cmd == F_SETFL) {
+               va_start(args, cmd);
                arg = va_arg(args, int);
+               va_end(args);
 
                /* make sure they only used known flags */
-               if(arg & ~ALL_FLAGS)
-               {
-                       SOCU_errno = -EINVAL;
-                       va_end(args);
+               if(arg & ~ALL_FLAGS) {
+                       errno = EINVAL;
                        return -1;
                }
 
                arg = to_3ds(arg);
        }
-       va_end(args);
 
        cmdbuf[0] = 0x001300C2;
        cmdbuf[1] = (u32)sockfd;
@@ -72,20 +69,22 @@ int fcntl(int sockfd, int cmd, ...)
        cmdbuf[3] = (u32)arg;
        cmdbuf[4] = 0x20;
 
-       if((ret = svcSendSyncRequest(SOCU_handle)) != 0)
+       ret = svcSendSyncRequest(SOCU_handle);
+       if(ret != 0) {
+               errno = SYNC_ERROR;
                return ret;
+       }
 
        ret = (int)cmdbuf[1];
        if(ret == 0)
                ret = _net_convert_error(cmdbuf[2]);
-       if(ret < 0)
-               SOCU_errno = ret;
 
-       if(ret < 0)
+       if(ret < 0) {
+               errno = ret;
                return -1;
+       }
 
-       if(ret & ~ALL_3DS)
-       {
+       if(ret & ~ALL_3DS) {
                /* somehow report unknown flags */
        }
 
index 49323786804e4f1909986c43c005a215f4fda07e..ed712db521940e1cf451bb6ec2a282175ead567e 100644 (file)
@@ -10,11 +10,13 @@ int h_errno = 0;
 
 struct hostent* gethostbyname(const char *name)
 {
-       int ret=0;
+       int ret = 0;
        u32 *cmdbuf = getThreadCommandBuffer();
        u32 saved_threadstorage[2];
        static u8 outbuf[0x1A88];
 
+       h_errno = 0;
+
        cmdbuf[0] = 0x000D0082;
        cmdbuf[1] = strlen(name)+1;
        cmdbuf[2] = sizeof(outbuf);
@@ -27,17 +29,25 @@ struct hostent* gethostbyname(const char *name)
        cmdbuf[0x100>>2] = (sizeof(outbuf) << 14) | 2;
        cmdbuf[0x104>>2] = (u32)outbuf;
 
-       if(( ret = svcSendSyncRequest(SOCU_handle))!=0)return NULL;
+       ret = svcSendSyncRequest(SOCU_handle);
+       if(ret != 0) {
+               h_errno = NO_RECOVERY;
+               return NULL;
+       }
+
 
        cmdbuf[0x100>>2] = saved_threadstorage[0];
         cmdbuf[0x104>>2] = saved_threadstorage[1];
 
        ret = (int)cmdbuf[1];
-       if(ret==0)ret = _net_convert_error(cmdbuf[2]);
-        if(ret<0)SOCU_errno = ret;
-       /* TODO: set h_errno based on SOCU_errno */
+       if(ret == 0)
+               ret = _net_convert_error(cmdbuf[2]);
 
-       if(ret<0)return NULL;
+        if(ret < 0) {
+               /* TODO: set h_errno based on ret */
+               h_errno = HOST_NOT_FOUND;
+               return NULL;
+       }
 
        u32 num_results, i;
        memcpy(&num_results, (char*)outbuf+4, sizeof(num_results));
index fb747c3fca8eb4101dc93ad19a0e587f81fb4ad2..7a254aacea908cf26ec88a36860ddc8288d418e9 100644 (file)
@@ -1,16 +1,22 @@
 #include "soc_common.h"
+#include <errno.h>
 
 long gethostid(void)
 {
-       int ret=0;
+       int ret = 0;
        u32 *cmdbuf = getThreadCommandBuffer();
 
        cmdbuf[0] = 0x00160000;
 
-       if((ret = svcSendSyncRequest(SOCU_handle))!=0)return ret;
+       ret = svcSendSyncRequest(SOCU_handle);
+       if(ret != 0) {
+               errno = SYNC_ERROR;
+               return -1;
+       }
 
        ret = (int)cmdbuf[1];
-       if(ret==0)ret = cmdbuf[2];
+       if(ret == 0)
+               ret = cmdbuf[2];
 
        return ret;
 }
index 80af375f61c3533a6a01805960367f6ef0247a22..977b14b6953296f84ce7ae11ec0f0456cf148a89 100644 (file)
@@ -1,17 +1,17 @@
 #include "soc_common.h"
+#include <errno.h>
 #include <sys/socket.h>
 
 int getpeername(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
 {
-       int ret=0;
+       int ret = 0;
        u32 *cmdbuf = getThreadCommandBuffer();
        u32 saved_threadstorage[2];
        u8 tmpaddr[0x1c];
 
        sockfd = soc_get_fd(sockfd);
-       if(sockfd < 0)
-       {
-               SOCU_errno = sockfd;
+       if(sockfd < 0) {
+               errno = -sockfd;
                return -1;
        }
 
@@ -26,23 +26,29 @@ int getpeername(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
        cmdbuf[0x100>>2] = (0x1c<<14) | 2;
        cmdbuf[0x104>>2] = (u32)tmpaddr;
 
-       if((ret = svcSendSyncRequest(SOCU_handle))!=0)return ret;
+       ret = svcSendSyncRequest(SOCU_handle);
+       if(ret != 0) {
+               errno = SYNC_ERROR;
+               return ret;
+       }
 
        cmdbuf[0x100>>2] = saved_threadstorage[0];
        cmdbuf[0x104>>2] = saved_threadstorage[1];
 
        ret = (int)cmdbuf[1];
-       if(ret==0)ret = _net_convert_error(cmdbuf[2]);
-       if(ret<0)SOCU_errno = ret;
-
-       if(ret==0)
-       {
-               if(*addrlen > tmpaddr[0])*addrlen = tmpaddr[0];
-               memset(addr, 0, sizeof(struct sockaddr));
-               addr->sa_family = tmpaddr[1];
-               memcpy(addr->sa_data, &tmpaddr[2], *addrlen - 2);
+       if(ret == 0)
+               ret = _net_convert_error(cmdbuf[2]);
+
+       if(ret < 0) {
+               errno = -ret;
+               return -1;
        }
 
-       if(ret<0)return -1;
+       if(*addrlen > tmpaddr[0])
+               *addrlen = tmpaddr[0];
+       memset(addr, 0, sizeof(struct sockaddr));
+       addr->sa_family = tmpaddr[1];
+       memcpy(addr->sa_data, &tmpaddr[2], *addrlen - 2);
+
        return ret;
 }
index dceda3adca05bbf24c091050f80d21ff9fe54bc2..2fd16b36ba554c6a1de071f3e5537fc89a4a4cdb 100644 (file)
@@ -1,17 +1,17 @@
 #include "soc_common.h"
+#include <errno.h>
 #include <sys/socket.h>
 
 int getsockname(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
 {
-       int ret=0;
+       int ret = 0;
        u32 *cmdbuf = getThreadCommandBuffer();
        u32 saved_threadstorage[2];
        u8 tmpaddr[0x1c];
 
        sockfd = soc_get_fd(sockfd);
-       if(sockfd < 0)
-       {
-               SOCU_errno = sockfd;
+       if(sockfd < 0)  {
+               errno = -sockfd;
                return -1;
        }
 
@@ -26,23 +26,29 @@ int getsockname(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
        cmdbuf[0x100>>2] = (0x1c<<14) | 2;
        cmdbuf[0x104>>2] = (u32)tmpaddr;
 
-       if((ret = svcSendSyncRequest(SOCU_handle))!=0)return ret;
+       ret = svcSendSyncRequest(SOCU_handle);
+       if(ret != 0) {
+               errno = SYNC_ERROR;
+               return ret;
+       }
 
        cmdbuf[0x100>>2] = saved_threadstorage[0];
        cmdbuf[0x104>>2] = saved_threadstorage[1];
 
        ret = (int)cmdbuf[1];
-       if(ret==0)ret = _net_convert_error(cmdbuf[2]);
-       if(ret<0)SOCU_errno = ret;
-
-       if(ret==0)
-       {
-               if(*addrlen > tmpaddr[0])*addrlen = tmpaddr[0];
-               memset(addr, 0, sizeof(struct sockaddr));
-               addr->sa_family = tmpaddr[1];
-               memcpy(addr->sa_data, &tmpaddr[2], *addrlen - 2);
+       if(ret == 0)
+               ret = _net_convert_error(cmdbuf[2]);
+
+       if(ret < 0) {
+               errno = -ret;
+               return -1;
        }
 
-       if(ret<0)return -1;
+       if(*addrlen > tmpaddr[0])
+               *addrlen = tmpaddr[0];
+       memset(addr, 0, sizeof(struct sockaddr));
+       addr->sa_family = tmpaddr[1];
+       memcpy(addr->sa_data, &tmpaddr[2], *addrlen - 2);
+
        return ret;
 }
index 85d0d4a3247694c58f22c751af37f94f06f791f1..8b48994859b85eee06c6defd805dcde18687e003 100644 (file)
@@ -1,16 +1,16 @@
 #include "soc_common.h"
+#include <errno.h>
 #include <sys/socket.h>
 
 int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen)
 {
-       int ret=0;
+       int ret = 0;
        u32 *cmdbuf = getThreadCommandBuffer();
        u32 saved_threadstorage[2];
 
        sockfd = soc_get_fd(sockfd);
-       if(sockfd < 0)
-       {
-               SOCU_errno = sockfd;
+       if(sockfd < 0) {
+               errno = -sockfd;
                return -1;
        }
 
@@ -27,17 +27,25 @@ int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optl
        cmdbuf[0x100>>2] = ((*optlen)<<14) | 2;
        cmdbuf[0x104>>2] = (u32)optval;
 
-       if((ret = svcSendSyncRequest(SOCU_handle))!=0)return ret;
+       ret = svcSendSyncRequest(SOCU_handle);
+       if(ret != 0) {
+               errno = SYNC_ERROR;
+               return ret;
+       }
 
        cmdbuf[0x100>>2] = saved_threadstorage[0];
        cmdbuf[0x104>>2] = saved_threadstorage[1];
 
        ret = (int)cmdbuf[1];
-       if(ret==0)ret = _net_convert_error(cmdbuf[2]);
-       if(ret<0)SOCU_errno = ret;
+       if(ret == 0)
+               ret = _net_convert_error(cmdbuf[2]);
+
+       if(ret < 0) {
+               errno = -ret;
+               return -1;
+       }
 
-       if(ret==0)*optlen = cmdbuf[3];
+       *optlen = cmdbuf[3];
 
-       if(ret<0)return -1;
        return ret;
 }
diff --git a/libctru/source/services/soc/soc_herror.c b/libctru/source/services/soc/soc_herror.c
new file mode 100644 (file)
index 0000000..04a7e24
--- /dev/null
@@ -0,0 +1,10 @@
+#include "soc_common.h"
+#include <netdb.h>
+#include <stdio.h>
+
+void herror(const char *s) {
+       if(s)
+               fiprintf(stderr, "%s\n", hstrerror(h_errno));
+       else
+               fiprintf(stderr, "%s: %s\n", s, hstrerror(h_errno));
+}
diff --git a/libctru/source/services/soc/soc_hstrerror.c b/libctru/source/services/soc/soc_hstrerror.c
new file mode 100644 (file)
index 0000000..cb1660c
--- /dev/null
@@ -0,0 +1,26 @@
+#include "soc_common.h"
+#include <netdb.h>
+
+static const struct
+{
+       int        err;
+       const char *str;
+} error_strings[] =
+{
+       { 0,              "Resolver Error 0 (no error)",     },
+       { HOST_NOT_FOUND, "Unknown host",                    },
+       { NO_DATA,        "No address associated with name", },
+       { NO_RECOVERY,    "Unknown server error",            },
+       { TRY_AGAIN,      "Host name lookup failure",        },
+};
+static const size_t num_error_strings = sizeof(error_strings)/sizeof(error_strings[0]);
+
+const char* hstrerror(int err) {
+       size_t i;
+       for(i = 0; i < num_error_strings; ++i) {
+               if(error_strings[i].err == err)
+                       return error_strings[i].str;
+       }
+
+       return "Unknown resolver error";
+}
index 1837da2cf2e7f5fb8294f724bde48b5982691aa0..c28e1de88782f343d5088434c438b9ae06274593 100644 (file)
@@ -1,4 +1,5 @@
 #include "soc_common.h"
+#include <errno.h>
 #include <sys/socket.h>
 
 static int     soc_open(struct _reent *r, void *fileStruct, const char *path, int flags, int mode);
@@ -39,7 +40,7 @@ soc_devoptab =
 
 static Result socu_cmd1(Handle memhandle, u32 memsize)
 {
-       Result ret=0;
+       Result ret = 0;
        u32 *cmdbuf = getThreadCommandBuffer();
 
        cmdbuf[0] = 0x00010044;
@@ -48,14 +49,18 @@ static Result socu_cmd1(Handle memhandle, u32 memsize)
        cmdbuf[4] = 0;
        cmdbuf[5] = memhandle;
 
-       if((ret = svcSendSyncRequest(SOCU_handle))!=0)return ret;
+       ret = svcSendSyncRequest(SOCU_handle);
+       if(ret != 0) {
+               errno = SYNC_ERROR;
+               return ret;
+       }
 
        return cmdbuf[1];
 }
 
 Result SOC_Initialize(u32 *context_addr, u32 context_size)
 {
-       Result ret=0;
+       Result ret = 0;
 
        /* check that the "soc" device doesn't already exist */
        int dev = FindDevice("soc:");
@@ -68,20 +73,19 @@ Result SOC_Initialize(u32 *context_addr, u32 context_size)
                return dev;
 
        ret = svcCreateMemoryBlock(&socMemhandle, (u32)context_addr, context_size, 0, 3);
-       if(ret != 0)
-       {
+       if(ret != 0) {
                RemoveDevice("soc");
                return ret;
        }
 
-       if((ret = srvGetServiceHandle(&SOCU_handle, "soc:U")) != 0)
-       {
+       ret = srvGetServiceHandle(&SOCU_handle, "soc:U");
+       if(ret != 0) {
                RemoveDevice("soc");
                return ret;
        }
 
-       if((ret = socu_cmd1(socMemhandle, context_size)) != 0)
-       {
+       ret = socu_cmd1(socMemhandle, context_size);
+       if(ret != 0) {
                RemoveDevice("soc");
                return ret;
        }
@@ -91,13 +95,17 @@ Result SOC_Initialize(u32 *context_addr, u32 context_size)
 
 Result SOC_Shutdown(void)
 {
-       Result ret=0;
+       Result ret = 0;
        u32 *cmdbuf = getThreadCommandBuffer();
        int dev;
 
        cmdbuf[0] = 0x00190000;
 
-       if((ret = svcSendSyncRequest(SOCU_handle))!=0)return ret;
+       ret = svcSendSyncRequest(SOCU_handle);
+       if(ret != 0) {
+               errno = SYNC_ERROR;
+               return ret;
+       }
 
        svcCloseHandle(SOCU_handle);
        svcCloseHandle(socMemhandle);
@@ -116,6 +124,7 @@ soc_open(struct _reent *r,
          int           flags,
          int           mode)
 {
+       r->_errno = ENOSYS;
        return -1;
 }
 
@@ -125,20 +134,28 @@ soc_close(struct _reent *r,
 {
        Handle sockfd = *(Handle*)fd;
        
-       int ret=0;
+       int ret = 0;
        u32 *cmdbuf = getThreadCommandBuffer();
 
        cmdbuf[0] = 0x000B0042;
        cmdbuf[1] = (u32)sockfd;
        cmdbuf[2] = 0x20;
 
-       if((ret = svcSendSyncRequest(SOCU_handle))!=0)return ret;
+       ret = svcSendSyncRequest(SOCU_handle);
+       if(ret != 0) {
+               errno = SYNC_ERROR;
+               return ret;
+       }
 
        ret = (int)cmdbuf[1];
-       if(ret==0)ret =_net_convert_error(cmdbuf[2]);
-       SOCU_errno = ret;
+       if(ret == 0)
+               ret =_net_convert_error(cmdbuf[2]);
+
+       if(ret < 0) {
+               errno = -ret;
+               return -1;
+       }
 
-       if(ret!=0)return -1;
        return 0;
 }
 
index 6f01baa25435022e30620f078be5658c8f93626e..b6f71179b2949f279fd8df7ed182278d2b3c8df5 100644 (file)
@@ -12,34 +12,30 @@ int ioctl(int sockfd, int request, ...)
        va_list ap;
 
        sockfd = soc_get_fd(sockfd);
-       if(sockfd < 0)
-       {
-               SOCU_errno = sockfd;
+       if(sockfd < 0) {
+               errno = -sockfd;
                return -1;
        }
 
-       va_start(ap, request);
-
        switch(request) {
        case FIONBIO:
+               va_start(ap, request);
                value = va_arg(ap, int*);
+               va_end(ap);
+
                if(value == NULL) {
                        errno = EFAULT;
                        ret = -1;
                }
 
                flags = fcntl(sockfd, F_GETFL, 0);
-               if(flags == -1) {
-                       errno = SOC_GetErrno();
-                       va_end(ap);
+               if(flags == -1) 
                        return -1;
-               }
 
-               if(*value) ret = fcntl(sockfd, F_SETFL, flags | O_NONBLOCK);
-               else       ret = fcntl(sockfd, F_SETFL, flags & ~O_NONBLOCK);
-
-               if(ret != 0)
-                       errno = SOC_GetErrno();
+               if(*value)
+                       ret = fcntl(sockfd, F_SETFL, flags | O_NONBLOCK);
+               else
+                       ret = fcntl(sockfd, F_SETFL, flags & ~O_NONBLOCK);
 
                break;
 
@@ -49,7 +45,5 @@ int ioctl(int sockfd, int request, ...)
                break;
        }
 
-       va_end(ap);
-
        return ret;
 }
index 41b73e44e79a7b96b40ca9149757f188fe59b0e0..53257d2b9d777f52127edb95c2a7209d83b51844 100644 (file)
@@ -1,15 +1,15 @@
 #include "soc_common.h"
+#include <errno.h>
 #include <sys/socket.h>
 
 int listen(int sockfd, int max_connections)
 {
-       int ret=0;
+       int ret = 0;
        u32 *cmdbuf = getThreadCommandBuffer();
 
        sockfd = soc_get_fd(sockfd);
-       if(sockfd < 0)
-       {
-               SOCU_errno = sockfd;
+       if(sockfd < 0) {
+               errno = -sockfd;
                return -1;
        }
 
@@ -18,12 +18,20 @@ int listen(int sockfd, int max_connections)
        cmdbuf[2] = (u32)max_connections;
        cmdbuf[3] = 0x20;
 
-       if((ret = svcSendSyncRequest(SOCU_handle))!=0)return ret;
+       ret = svcSendSyncRequest(SOCU_handle);
+       if(ret != 0) {
+               errno = SYNC_ERROR;
+               return ret;
+       }
 
        ret = (int)cmdbuf[1];
-       if(ret==0)ret = _net_convert_error(cmdbuf[2]);
-       SOCU_errno = ret;
+       if(ret == 0)
+               ret = _net_convert_error(cmdbuf[2]);
+
+       if(ret < 0) {
+               errno = -ret;
+               return -1;
+       }
 
-       if(ret!=0)return -1;
        return 0;
 }
index 80b6514e8d0f97eba8bb197e70e3a6e81bb2a21c..324612c4fbad88d06c4396e35e221c0904b2cc12 100644 (file)
@@ -1,4 +1,5 @@
 #include "soc_common.h"
+#include <errno.h>
 #include <poll.h>
 #include <stdlib.h>
 #include <stdio.h>
@@ -11,30 +12,27 @@ int poll(struct pollfd *fds, nfds_t nfds, int timeout)
        u32 *cmdbuf = getThreadCommandBuffer();
        u32 saved_threadstorage[2];
 
-       if(nfds == 0)
-       {
-               SOCU_errno = -EINVAL;
+       if(nfds == 0) {
+               errno = EINVAL;
                return -1;
        }
 
        struct pollfd *tmp_fds = (struct pollfd*)malloc(sizeof(struct pollfd) * nfds);
-       if(tmp_fds == NULL)
-       {
-               SOCU_errno = -ENOMEM;
+       if(tmp_fds == NULL) {
+               errno = ENOMEM;
                return -1;
        }
 
        memcpy(tmp_fds, fds, sizeof(struct pollfd) * nfds);
 
-       for(i = 0; i < nfds; ++i)
-       {
+       for(i = 0; i < nfds; ++i) {
                tmp_fds[i].fd = soc_get_fd(fds[i].fd);
-               if(tmp_fds[i].fd < 0)
-               {
-                       SOCU_errno = tmp_fds[i].fd;
+               if(tmp_fds[i].fd < 0) {
+                       errno = -tmp_fds[i].fd;
                        free(tmp_fds);
                        return -1;
                }
+               tmp_fds[i].revents = 0;
        }
 
        cmdbuf[0] = 0x00140084;
@@ -50,26 +48,30 @@ int poll(struct pollfd *fds, nfds_t nfds, int timeout)
        cmdbuf[0x100>>2] = (size<<14) | 2;
        cmdbuf[0x104>>2] = (u32)tmp_fds;
 
-       if((ret = svcSendSyncRequest(SOCU_handle)) != 0)
-       {
+       ret = svcSendSyncRequest(SOCU_handle);
+       if(ret != 0) {
                free(tmp_fds);
+               errno = SYNC_ERROR;
                return ret;
        }
 
-       for(i = 0; i < nfds; ++i)
-       {
-               fds[i].revents = tmp_fds[i].revents;
-       }
-
-       free(tmp_fds);
-
        cmdbuf[0x100>>2] = saved_threadstorage[0];
         cmdbuf[0x104>>2] = saved_threadstorage[1];
 
        ret = (int)cmdbuf[1];
-       if(ret==0)ret = _net_convert_error(cmdbuf[2]);
-       if(ret<0)SOCU_errno = ret;
+       if(ret == 0)
+               ret = _net_convert_error(cmdbuf[2]);
+
+       if(ret < 0) {
+               free(tmp_fds);
+               errno = -ret;
+               return -1;
+       }
+
+       for(i = 0; i < nfds; ++i)
+               fds[i].revents = tmp_fds[i].revents;
+
+       free(tmp_fds);
 
-       if(ret<0)return -1;
        return ret;
 }
index 3af3c1a1f77d0e71dc89588649778da0c149245e..8480c5f062aa95c5ea2a9ea81bfb0b54aa749a4e 100644 (file)
@@ -1,17 +1,19 @@
 #include "soc_common.h"
+#include <errno.h>
 #include <sys/socket.h>
 
 ssize_t socuipc_cmd7(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen)
 {
-       int ret=0;
+       int ret = 0;
        u32 *cmdbuf = getThreadCommandBuffer();
-       u32 tmp_addrlen=0;
+       u32 tmp_addrlen = 0;
        u8 tmpaddr[0x1c];
        u32 saved_threadstorage[2];
 
        memset(tmpaddr, 0, 0x1c);
 
-       if(src_addr)tmp_addrlen = 0x1c;
+       if(src_addr)
+               tmp_addrlen = 0x1c;
 
        cmdbuf[0] = 0x00070104;
        cmdbuf[1] = (u32)sockfd;
@@ -28,35 +30,44 @@ ssize_t socuipc_cmd7(int sockfd, void *buf, size_t len, int flags, struct sockad
        cmdbuf[0x100>>2] = (tmp_addrlen<<14) | 2;
        cmdbuf[0x104>>2] = (u32)tmpaddr;
 
-       if((ret = svcSendSyncRequest(SOCU_handle))!=0)return ret;
+       ret = svcSendSyncRequest(SOCU_handle);
+       if(ret != 0) {
+               errno = SYNC_ERROR;
+               return -1;
+       }
 
        cmdbuf[0x100>>2] = saved_threadstorage[0];
        cmdbuf[0x104>>2] = saved_threadstorage[1];
 
        ret = (int)cmdbuf[1];
-       if(ret==0)ret = _net_convert_error(cmdbuf[2]);
-       if(ret<0)SOCU_errno = ret;
+       if(ret == 0)
+               ret = _net_convert_error(cmdbuf[2]);
+
+       if(ret < 0) {
+               errno = -ret;
+               return -1;
+       }
 
-       if(ret>0 && src_addr!=NULL)
-       {
+       if(src_addr != NULL) {
                src_addr->sa_family = tmpaddr[1];
-               if(*addrlen > tmpaddr[0])*addrlen = tmpaddr[0];
+               if(*addrlen > tmpaddr[0])
+                       *addrlen = tmpaddr[0];
                memcpy(src_addr->sa_data, &tmpaddr[2], *addrlen - 2);
        }
 
-       if(ret<0)return -1;
        return ret;
 }
 
 ssize_t socuipc_cmd8(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen)
 {
-       int ret=0;
+       int ret = 0;
        u32 *cmdbuf = getThreadCommandBuffer(); 
-       u32 tmp_addrlen=0;
+       u32 tmp_addrlen = 0;
        u8 tmpaddr[0x1c];
        u32 saved_threadstorage[4];
 
-       if(src_addr)tmp_addrlen = 0x1c;
+       if(src_addr)
+               tmp_addrlen = 0x1c;
 
        memset(tmpaddr, 0, 0x1c);
 
@@ -77,7 +88,11 @@ ssize_t socuipc_cmd8(int sockfd, void *buf, size_t len, int flags, struct sockad
        cmdbuf[0x108>>2] = (tmp_addrlen<<14) | 2;
        cmdbuf[0x10c>>2] = (u32)tmpaddr;
 
-       if((ret = svcSendSyncRequest(SOCU_handle))!=0)return ret;
+       ret = svcSendSyncRequest(SOCU_handle);
+       if(ret != 0) {
+               errno = SYNC_ERROR;
+               return ret;
+       }
 
        cmdbuf[0x100>>2] = saved_threadstorage[0];
        cmdbuf[0x104>>2] = saved_threadstorage[1];
@@ -85,17 +100,21 @@ ssize_t socuipc_cmd8(int sockfd, void *buf, size_t len, int flags, struct sockad
        cmdbuf[0x10c>>2] = saved_threadstorage[3];
 
        ret = (int)cmdbuf[1];
-       if(ret==0)ret = _net_convert_error(cmdbuf[2]);
-       if(ret<0)SOCU_errno = ret;
+       if(ret == 0)
+               ret = _net_convert_error(cmdbuf[2]);
+
+       if(ret < 0) {
+               errno = -ret;
+               return -1;
+       }
 
-       if(ret>0 && src_addr!=NULL)
-       {
+       if(src_addr != NULL) {
                src_addr->sa_family = tmpaddr[1];
-               if(*addrlen > tmpaddr[0])*addrlen = tmpaddr[0];
+               if(*addrlen > tmpaddr[0])
+                       *addrlen = tmpaddr[0];
                memcpy(src_addr->sa_data, &tmpaddr[2], *addrlen - 2);
        }
 
-       if(ret<0)return -1;
        return ret;
 }
 
@@ -103,12 +122,12 @@ ssize_t socuipc_cmd8(int sockfd, void *buf, size_t len, int flags, struct sockad
 ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen)
 {
        sockfd = soc_get_fd(sockfd);
-       if(sockfd < 0)
-       {
-               SOCU_errno = sockfd;
+       if(sockfd < 0) {
+               errno = -sockfd;
                return -1;
        }
 
-       if(len<0x2000)return socuipc_cmd8(sockfd, buf, len, flags, src_addr, addrlen);
+       if(len < 0x2000)
+               return socuipc_cmd8(sockfd, buf, len, flags, src_addr, addrlen);
        return socuipc_cmd7(sockfd, buf, len, flags, src_addr, addrlen);
 }
index d2cd911bee787f011e8b7f7ceaf03b4ad252dbce..7e47827cf4e7fef7af78c2da0445aa5967d14dd1 100644 (file)
@@ -20,7 +20,7 @@ int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struc
 
        pollinfo = (struct pollfd*)calloc(numfds, sizeof(struct pollfd));
        if(pollinfo == NULL) {
-               SOCU_errno = ENOMEM;
+               errno = ENOMEM;
                return -1;
        }
 
@@ -79,7 +79,8 @@ int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struc
                                        FD_CLR(i, exceptfds);
                        }
 
-                       if(found) ++rc;
+                       if(found)
+                               ++rc;
                        ++j;
                }
        }
index 64eeb9ef32e49794907a59b3cd2879ceb191d09d..7183c11d0fc06685c1ff6caa465aaf164464c160 100644 (file)
@@ -4,27 +4,21 @@
 
 ssize_t socuipc_cmd9(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen)
 {
-       int ret=0;
+       int ret = 0;
        u32 *cmdbuf = getThreadCommandBuffer();
-       u32 tmp_addrlen=0;
+       u32 tmp_addrlen = 0;
        u8 tmpaddr[0x1c];
 
        memset(tmpaddr, 0, 0x1c);
 
-       if(dest_addr)
-       {
+       if(dest_addr) {
                if(dest_addr->sa_family == AF_INET)
-               {
                        tmp_addrlen = 8;
-               }
                else
-               {
                        tmp_addrlen = 0x1c;
-               }
 
-               if(addrlen < tmp_addrlen)
-               {
-                       SOCU_errno = -EINVAL;
+               if(addrlen < tmp_addrlen) {
+                       errno = EINVAL;
                        return -1;
                }
 
@@ -44,39 +38,41 @@ ssize_t socuipc_cmd9(int sockfd, const void *buf, size_t len, int flags, const s
        cmdbuf[9] = (((u32)len)<<4) | 10;
        cmdbuf[10] = (u32)buf;
 
-       if((ret = svcSendSyncRequest(SOCU_handle))!=0)return ret;
+       ret = svcSendSyncRequest(SOCU_handle);
+       if(ret != 0) {
+               errno = SYNC_ERROR;
+               return ret;
+       }
 
        ret = (int)cmdbuf[1];
-       if(ret==0)ret = _net_convert_error(cmdbuf[2]);
-       if(ret<0)SOCU_errno = ret;
+       if(ret == 0)
+               ret = _net_convert_error(cmdbuf[2]);
+
+       if(ret < 0) {
+               errno = -ret;
+               return -1;
+       }
 
-       if(ret<0)return -1;
        return ret;
 }
 
 ssize_t socuipc_cmda(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen)
 {
-       int ret=0;
+       int ret = 0;
        u32 *cmdbuf = getThreadCommandBuffer();
-       u32 tmp_addrlen=0;
+       u32 tmp_addrlen = 0;
        u8 tmpaddr[0x1c];
 
        memset(tmpaddr, 0, 0x1c);
 
-       if(dest_addr)
-       {
+       if(dest_addr) {
                if(dest_addr->sa_family == AF_INET)
-               {
                        tmp_addrlen = 8;
-               }
                else
-               {
                        tmp_addrlen = 0x1c;
-               }
 
-               if(addrlen < tmp_addrlen)
-               {
-                       SOCU_errno = -EINVAL;
+               if(addrlen < tmp_addrlen) {
+                       errno = EINVAL;
                        return -1;
                }
 
@@ -96,25 +92,33 @@ ssize_t socuipc_cmda(int sockfd, const void *buf, size_t len, int flags, const s
        cmdbuf[9] = (tmp_addrlen<<14) | 0x402;
        cmdbuf[10] = (u32)tmpaddr;
 
-       if((ret = svcSendSyncRequest(SOCU_handle))!=0)return ret;
+       ret = svcSendSyncRequest(SOCU_handle);
+       if(ret != 0) {
+               errno = SYNC_ERROR;
+               return ret;
+       }
 
        ret = (int)cmdbuf[1];
-       if(ret==0)ret = _net_convert_error(cmdbuf[2]);
-       if(ret<0)SOCU_errno = ret;
+       if(ret == 0)
+               ret = _net_convert_error(cmdbuf[2]);
+
+       if(ret < 0) {
+               errno = -ret;
+               return -1;
+       }
 
-       if(ret<0)return -1;
        return ret;
 }
 
 ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen)
 {
        sockfd = soc_get_fd(sockfd);
-       if(sockfd < 0)
-       {
-               SOCU_errno = sockfd;
+       if(sockfd < 0) {
+               errno = -sockfd;
                return -1;
        }
 
-       if(len<0x2000)return socuipc_cmda(sockfd, buf, len, flags, dest_addr, addrlen);
-       return socuipc_cmd9(sockfd, buf, len, flags, (struct sockaddr*)dest_addr, addrlen);
+       if(len < 0x2000)
+               return socuipc_cmda(sockfd, buf, len, flags, dest_addr, addrlen);
+       return socuipc_cmd9(sockfd, buf, len, flags, dest_addr, addrlen);
 }
index ff142b2c48cdd47983e8e44be3d1866896ef147a..600d8cfa1970e4a11f365b38dc370bac70171a5f 100644 (file)
@@ -1,11 +1,18 @@
 #include "soc_common.h"
+#include <errno.h>
 #include <sys/socket.h>
 
 int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen)
 {
-       int ret=0;
+       int ret = 0;
        u32 *cmdbuf = getThreadCommandBuffer();
 
+       sockfd = soc_get_fd(sockfd);
+       if(sockfd < 0) {
+               errno = -sockfd;
+               return -1;
+       }
+
        cmdbuf[0] = 0x00120104;
        cmdbuf[1] = (u32)sockfd;
        cmdbuf[2] = (u32)level;
@@ -15,12 +22,20 @@ int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t
        cmdbuf[7] = (optlen<<14) | 0x2402;
        cmdbuf[8] = (u32)optval;
 
-       if((ret = svcSendSyncRequest(SOCU_handle))!=0)return ret;
+       ret = svcSendSyncRequest(SOCU_handle);
+       if(ret != 0) {
+               errno = SYNC_ERROR;
+               return ret;
+       }
 
        ret = (int)cmdbuf[1];
-       if(ret==0)ret = _net_convert_error(cmdbuf[2]);
-       if(ret<0)SOCU_errno = ret;
+       if(ret == 0)
+               ret = _net_convert_error(cmdbuf[2]);
+
+       if(ret < 0) {
+               errno = -ret;
+               return -1;
+       }
 
-       if(ret<0)return -1;
        return ret;
 }
index 4dca8c40d034df1adbf5cc55cdf14981e326b20d..89b2db6178ef72d38855c93e3c802d80dbef3a20 100644 (file)
@@ -1,15 +1,15 @@
 #include "soc_common.h"
+#include <errno.h>
 #include <sys/socket.h>
 
 int shutdown(int sockfd, int shutdown_type)
 {
-       int ret=0;
+       int ret = 0;
        u32 *cmdbuf = getThreadCommandBuffer();
 
        sockfd = soc_get_fd(sockfd);
-       if(sockfd < 0)
-       {
-               SOCU_errno = sockfd;
+       if(sockfd < 0) {
+               errno = -sockfd;
                return -1;
        }
 
@@ -18,12 +18,20 @@ int shutdown(int sockfd, int shutdown_type)
        cmdbuf[2] = (u32)shutdown_type;
        cmdbuf[3] = 0x20;
 
-       if((ret = svcSendSyncRequest(SOCU_handle))!=0)return ret;
+       ret = svcSendSyncRequest(SOCU_handle);
+       if(ret != 0) {
+               errno = SYNC_ERROR;
+               return ret;
+       }
 
        ret = (int)cmdbuf[1];
-       if(ret==0)ret = _net_convert_error(cmdbuf[2]);
-       SOCU_errno = ret;
+       if(ret == 0)
+               ret = _net_convert_error(cmdbuf[2]);
+
+       if(ret < 0) {
+               errno = -ret;
+               return -1;
+       }
 
-       if(ret!=0)return -1;
        return 0;
 }
index 4fbec75e86c5e04b888ab318dcf65423ce5dbcf8..f7743898525d7f4cc15b633046cd7301d2c05e95 100644 (file)
@@ -1,15 +1,15 @@
 #include "soc_common.h"
+#include <errno.h>
 #include <sys/socket.h>
 
 int sockatmark(int sockfd)
 {
-       int ret=0;
+       int ret = 0;
        u32 *cmdbuf = getThreadCommandBuffer();
 
        sockfd = soc_get_fd(sockfd);
-       if(sockfd < 0)
-       {
-               SOCU_errno = sockfd;
+       if(sockfd < 0) {
+               errno = -sockfd;
                return -1;
        }
 
@@ -17,12 +17,20 @@ int sockatmark(int sockfd)
        cmdbuf[1] = (u32)sockfd;
        cmdbuf[2] = 0x20;
 
-       if((ret = svcSendSyncRequest(SOCU_handle))!=0)return ret;
+       ret = svcSendSyncRequest(SOCU_handle);
+       if(ret != 0) {
+               errno = SYNC_ERROR;
+               return -1;
+       }
 
        ret = (int)cmdbuf[1];
-       if(ret==0)ret = _net_convert_error(cmdbuf[2]);
-       if(ret<0)SOCU_errno = ret;
+       if(ret == 0)
+               ret = _net_convert_error(cmdbuf[2]);
+
+       if(ret < 0) {
+               errno = -ret;
+               return -1;
+       }
 
-       if(ret<0)return -1;
        return ret;
 }
index 94f2ad148eefa8eb3f7091cecd66c59946bfdfc5..5072275c013ace9e7b13b52667bb3aeceb1f27fd 100644 (file)
@@ -5,7 +5,7 @@
 
 int socket(int domain, int type, int protocol)
 {
-       int ret=0;
+       int ret = 0;
        int fd, dev;
        __handle *handle;
        u32 *cmdbuf = getThreadCommandBuffer();
@@ -17,16 +17,14 @@ int socket(int domain, int type, int protocol)
        cmdbuf[4] = 0x20;
 
        dev = FindDevice("soc:");
-       if(dev < 0)
-       {
-               SOCU_errno = -ENODEV;
+       if(dev < 0) {
+               errno = ENODEV;
                return -1;
        }
 
        fd = __alloc_handle(sizeof(__handle) + sizeof(Handle));
-       if(fd < 0)
-       {
-               SOCU_errno = -ENOMEM;
+       if(fd < 0) {
+               errno = ENOMEM;
                return -1;
        }
 
@@ -34,17 +32,18 @@ int socket(int domain, int type, int protocol)
        handle->device = dev;
        handle->fileStruct = ((void *)handle) + sizeof(__handle);
 
-       if((ret = svcSendSyncRequest(SOCU_handle)) != 0)
+       ret = svcSendSyncRequest(SOCU_handle);
+       if(ret != 0)
        {
                __release_handle(fd);
+               errno = SYNC_ERROR;
                return ret;
        }
 
        ret = (int)cmdbuf[1];
-       if(ret != 0)
-       {
-               SOCU_errno = _net_convert_error(cmdbuf[2]);
+       if(ret != 0) {
                __release_handle(fd);
+               errno = _net_convert_error(cmdbuf[2]);
                return -1;
        }