commit 356f59b1bd66dc1db44e438846aaf431381743db Author: Nick Mathewson nickm@torproject.org Date: Wed Jun 27 10:50:24 2018 -0400
Move read/write_all_to_socket into lib/net. --- src/common/util.c | 43 ------------------------------------------- src/common/util.h | 2 -- src/lib/net/.may_include | 1 + src/lib/net/socket.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ src/lib/net/socket.h | 3 +++ 5 files changed, 48 insertions(+), 45 deletions(-)
diff --git a/src/common/util.c b/src/common/util.c index 2d426bb13..940f25e27 100644 --- a/src/common/util.c +++ b/src/common/util.c @@ -1094,24 +1094,6 @@ write_all_to_fd(int fd, const char *buf, size_t count) return (ssize_t)count; }
-/** Write <b>count</b> bytes from <b>buf</b> to <b>sock</b>. Return the number - * of bytes written, or -1 on error. Only use if fd is a blocking fd. */ -ssize_t -write_all_to_socket(tor_socket_t fd, const char *buf, size_t count) -{ - size_t written = 0; - ssize_t result; - raw_assert(count < SSIZE_MAX); - - while (written != count) { - result = tor_socket_send(fd, buf+written, count-written, 0); - if (result<0) - return -1; - written += result; - } - return (ssize_t)count; -} - /** Read from <b>fd</b> to <b>buf</b>, until we get <b>count</b> bytes or * reach the end of the file. Return the number of bytes read, or -1 on * error. Only use if fd is a blocking fd. */ @@ -1137,31 +1119,6 @@ read_all_from_fd(int fd, char *buf, size_t count) return (ssize_t)numread; }
-/** Read from <b>sock</b> to <b>buf</b>, until we get <b>count</b> bytes or - * reach the end of the file. Return the number of bytes read, or -1 on - * error. Only use if fd is a blocking fd. */ -ssize_t -read_all_from_socket(tor_socket_t sock, char *buf, size_t count) -{ - size_t numread = 0; - ssize_t result; - - if (count > SIZE_T_CEILING || count > SSIZE_MAX) { - errno = EINVAL; - return -1; - } - - while (numread < count) { - result = tor_socket_recv(sock, buf+numread, count-numread, 0); - if (result<0) - return -1; - else if (result == 0) - break; - numread += result; - } - return (ssize_t)numread; -} - /* * Filesystem operations. */ diff --git a/src/common/util.h b/src/common/util.h index 1cb3e73b3..b7ac2a176 100644 --- a/src/common/util.h +++ b/src/common/util.h @@ -118,9 +118,7 @@ int format_time_interval(char *out, size_t out_len, long interval);
/* File helpers */ ssize_t write_all_to_fd(int fd, const char *buf, size_t count); -ssize_t write_all_to_socket(tor_socket_t fd, const char *buf, size_t count); ssize_t read_all_from_fd(int fd, char *buf, size_t count); -ssize_t read_all_from_socket(tor_socket_t fd, char *buf, size_t count);
#define write_all(fd, buf, count, isSock) \ ((isSock) ? write_all_to_socket((fd), (buf), (count)) \ diff --git a/src/lib/net/.may_include b/src/lib/net/.may_include index 479f85293..1458dad99 100644 --- a/src/lib/net/.may_include +++ b/src/lib/net/.may_include @@ -5,6 +5,7 @@ ht.h lib/cc/*.h lib/container/*.h lib/ctime/*.h +lib/err/*.h lib/lock/*.h lib/log/*.h lib/net/*.h diff --git a/src/lib/net/socket.c b/src/lib/net/socket.c index 4c14a4289..cd18d7083 100644 --- a/src/lib/net/socket.c +++ b/src/lib/net/socket.c @@ -7,6 +7,7 @@ #include "lib/net/socket.h" #include "lib/net/address.h" #include "lib/cc/compat_compiler.h" +#include "lib/err/torerr.h" #include "lib/lock/compat_mutex.h" #include "lib/log/torlog.h" #include "lib/log/util_bug.h" @@ -647,3 +648,46 @@ set_socket_nonblocking(tor_socket_t sock)
return 0; } + +/** Read from <b>sock</b> to <b>buf</b>, until we get <b>count</b> bytes or + * reach the end of the file. Return the number of bytes read, or -1 on + * error. Only use if fd is a blocking fd. */ +ssize_t +read_all_from_socket(tor_socket_t sock, char *buf, size_t count) +{ + size_t numread = 0; + ssize_t result; + + if (count > SIZE_T_CEILING || count > SSIZE_MAX) { + errno = EINVAL; + return -1; + } + + while (numread < count) { + result = tor_socket_recv(sock, buf+numread, count-numread, 0); + if (result<0) + return -1; + else if (result == 0) + break; + numread += result; + } + return (ssize_t)numread; +} + +/** Write <b>count</b> bytes from <b>buf</b> to <b>sock</b>. Return the number + * of bytes written, or -1 on error. Only use if fd is a blocking fd. */ +ssize_t +write_all_to_socket(tor_socket_t fd, const char *buf, size_t count) +{ + size_t written = 0; + ssize_t result; + raw_assert(count < SSIZE_MAX); + + while (written != count) { + result = tor_socket_send(fd, buf+written, count-written, 0); + if (result<0) + return -1; + written += result; + } + return (ssize_t)count; +} diff --git a/src/lib/net/socket.h b/src/lib/net/socket.h index 93af92983..99b0de4ff 100644 --- a/src/lib/net/socket.h +++ b/src/lib/net/socket.h @@ -52,6 +52,9 @@ int network_init(void); int get_max_sockets(void); void set_max_sockets(int);
+ssize_t write_all_to_socket(tor_socket_t fd, const char *buf, size_t count); +ssize_t read_all_from_socket(tor_socket_t fd, char *buf, size_t count); + /* For stupid historical reasons, windows sockets have an independent * set of errnos, and an independent way to get them. Also, you can't * always believe WSAEWOULDBLOCK. Use the macros below to compare
tor-commits@lists.torproject.org