summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Schneider <asn@cryptomilk.org>2013-02-11 11:28:19 +0100
committerAndreas Schneider <asn@cryptomilk.org>2013-02-11 11:28:19 +0100
commitd74dfab6f9ac3cfc46504e6f94861c95e4bea398 (patch)
tree6a4969ba9e2fb40227773d97e06d63107352ef7a
parent5ca570623166e4da7ef207acc73dc12035972267 (diff)
downloadsocket_wrapper-d74dfab6f9ac3cfc46504e6f94861c95e4bea398.tar.gz
socket_wrapper-d74dfab6f9ac3cfc46504e6f94861c95e4bea398.tar.xz
socket_wrapper-d74dfab6f9ac3cfc46504e6f94861c95e4bea398.zip
Add sendto() wrapper.
-rw-r--r--src/socket_wrapper.c32
1 files changed, 28 insertions, 4 deletions
diff --git a/src/socket_wrapper.c b/src/socket_wrapper.c
index bea8668..b0d9b67 100644
--- a/src/socket_wrapper.c
+++ b/src/socket_wrapper.c
@@ -71,6 +71,18 @@
#define MIN(a,b) ((a)<(b)?(a):(b))
#endif
+#ifndef ZERO_STRUCT
+#define ZERO_STRUCT(x) memset((char *)&(x), 0, sizeof(x))
+#endif
+
+#ifndef discard_const
+#define discard_const(ptr) ((void *)((uintptr_t)(ptr)))
+#endif
+
+#ifndef discard_const_p
+#define discard_const_p(type, ptr) ((type *)discard_const(ptr))
+#endif
+
#define SWRAP_DLIST_ADD(list,item) do { \
if (!(list)) { \
(item)->prev = NULL; \
@@ -301,6 +313,19 @@ static int real_recvfrom(int sockfd, void *buf, size_t len, int flags,
return libc_recvfrom(sockfd, buf, len, flags, src_addr, addrlen);
}
+static int (*libc_sendto)(int sockfd, const void *buf, size_t len, int flags,
+ const struct sockaddr *dst_addr, socklen_t addrlen);
+
+static int real_sendto(int sockfd, const void *buf, size_t len, int flags,
+ const struct sockaddr *dst_addr, socklen_t addrlen)
+{
+ if (libc_sendto == NULL) {
+ *(void **)(&libc_sendto) = libc_dlsym("sendto");
+ }
+
+ return libc_sendto(sockfd, buf, len, flags, dst_addr, addrlen);
+}
+
static int (*libc_setsockopt)(int sockfd,
int level,
int optname,
@@ -2140,7 +2165,6 @@ int ioctl(int s, unsigned long int r, ...)
return rc;
}
-#if 0
static ssize_t swrap_sendmsg_before(int fd,
struct socket_info *si,
struct msghdr *msg,
@@ -2332,7 +2356,6 @@ static void swrap_sendmsg_after(struct socket_info *si,
free(buf);
errno = saved_errno;
}
-#endif
ssize_t recvfrom(int s, void *buf, size_t len, int flags,
struct sockaddr *from, socklen_t *fromlen)
@@ -2377,8 +2400,8 @@ ssize_t recvfrom(int s, void *buf, size_t len, int flags,
return ret;
}
-#if 0
-_PUBLIC_ ssize_t swrap_sendto(int s, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen)
+ssize_t sendto(int s, const void *buf, size_t len, int flags,
+ const struct sockaddr *to, socklen_t tolen)
{
struct msghdr msg;
struct iovec tmp;
@@ -2444,6 +2467,7 @@ _PUBLIC_ ssize_t swrap_sendto(int s, const void *buf, size_t len, int flags, con
return ret;
}
+#if 0
_PUBLIC_ ssize_t swrap_recv(int s, void *buf, size_t len, int flags)
{
int ret;