From 2cf2b7f1e9dc4571eb23bbbc6857d4960a9aa0a6 Mon Sep 17 00:00:00 2001 From: mtheall Date: Tue, 27 Jan 2015 17:06:30 -0600 Subject: [PATCH] Fix soc_read/soc_write. --- libctru/source/services/soc/soc_common.h | 5 +++++ libctru/source/services/soc/soc_init.c | 4 ++-- libctru/source/services/soc/soc_recvfrom.c | 10 +++++++--- libctru/source/services/soc/soc_sendto.c | 11 ++++++++--- 4 files changed, 22 insertions(+), 8 deletions(-) diff --git a/libctru/source/services/soc/soc_common.h b/libctru/source/services/soc/soc_common.h index 87c592a..a9fd779 100644 --- a/libctru/source/services/soc/soc_common.h +++ b/libctru/source/services/soc/soc_common.h @@ -3,6 +3,7 @@ #include #include #include +#include #include <3ds/types.h> #include <3ds/svc.h> #include <3ds/srv.h> @@ -29,3 +30,7 @@ soc_get_fd(int fd) } s32 _net_convert_error(s32 sock_retval); + +ssize_t soc_recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen); + +ssize_t soc_sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen); diff --git a/libctru/source/services/soc/soc_init.c b/libctru/source/services/soc/soc_init.c index c28e1de..9f5a88f 100644 --- a/libctru/source/services/soc/soc_init.c +++ b/libctru/source/services/soc/soc_init.c @@ -166,7 +166,7 @@ soc_write(struct _reent *r, size_t len) { Handle sockfd = *(Handle*)fd; - return send(sockfd, ptr, len, 0); + return soc_sendto(sockfd, ptr, len, 0, NULL, 0); } static ssize_t @@ -176,5 +176,5 @@ soc_read(struct _reent *r, size_t len) { Handle sockfd = *(Handle*)fd; - return recv(sockfd, ptr, len, 0); + return soc_recvfrom(sockfd, ptr, len, 0, NULL, 0); } diff --git a/libctru/source/services/soc/soc_recvfrom.c b/libctru/source/services/soc/soc_recvfrom.c index 8480c5f..f9b206a 100644 --- a/libctru/source/services/soc/soc_recvfrom.c +++ b/libctru/source/services/soc/soc_recvfrom.c @@ -118,6 +118,12 @@ ssize_t socuipc_cmd8(int sockfd, void *buf, size_t len, int flags, struct sockad return ret; } +ssize_t soc_recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen) +{ + if(len < 0x2000) + return socuipc_cmd8(sockfd, buf, len, flags, src_addr, addrlen); + return socuipc_cmd7(sockfd, buf, len, flags, src_addr, addrlen); +} ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen) { @@ -127,7 +133,5 @@ ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr * return -1; } - if(len < 0x2000) - return socuipc_cmd8(sockfd, buf, len, flags, src_addr, addrlen); - return socuipc_cmd7(sockfd, buf, len, flags, src_addr, addrlen); + return soc_recvfrom(sockfd, buf, len, flags, src_addr, addrlen); } diff --git a/libctru/source/services/soc/soc_sendto.c b/libctru/source/services/soc/soc_sendto.c index 7183c11..4b84749 100644 --- a/libctru/source/services/soc/soc_sendto.c +++ b/libctru/source/services/soc/soc_sendto.c @@ -110,6 +110,13 @@ ssize_t socuipc_cmda(int sockfd, const void *buf, size_t len, int flags, const s return ret; } +ssize_t soc_sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen) +{ + if(len < 0x2000) + return socuipc_cmda(sockfd, buf, len, flags, dest_addr, addrlen); + return socuipc_cmd9(sockfd, buf, len, flags, dest_addr, addrlen); +} + 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); @@ -118,7 +125,5 @@ ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct return -1; } - if(len < 0x2000) - return socuipc_cmda(sockfd, buf, len, flags, dest_addr, addrlen); - return socuipc_cmd9(sockfd, buf, len, flags, dest_addr, addrlen); + return soc_sendto(sockfd, buf, len, flags, dest_addr, addrlen); }