diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/network/recvmsg.c | 12 | ||||
| -rw-r--r-- | src/network/sendmsg.c | 9 | 
2 files changed, 21 insertions, 0 deletions
| diff --git a/src/network/recvmsg.c b/src/network/recvmsg.c index edc5f241..65094fc8 100644 --- a/src/network/recvmsg.c +++ b/src/network/recvmsg.c @@ -1,12 +1,24 @@  #include <sys/socket.h> +#include <limits.h>  #include "syscall.h"  #include "libc.h"  ssize_t recvmsg(int fd, struct msghdr *msg, int flags)  {  	ssize_t r; +#if LONG_MAX > INT_MAX +	struct msghdr h, *orig = msg; +	if (msg) { +		h = *msg; +		h.__pad1 = h.__pad2 = 0; +		msg = &h; +	} +#endif  	CANCELPT_BEGIN;  	r = socketcall(recvmsg, fd, msg, flags, 0, 0, 0);  	CANCELPT_END; +#if LONG_MAX > INT_MAX +	if (orig) *orig = h; +#endif  	return r;  } diff --git a/src/network/sendmsg.c b/src/network/sendmsg.c index 5d1123f0..047c0eff 100644 --- a/src/network/sendmsg.c +++ b/src/network/sendmsg.c @@ -1,10 +1,19 @@  #include <sys/socket.h> +#include <limits.h>  #include "syscall.h"  #include "libc.h"  ssize_t sendmsg(int fd, const struct msghdr *msg, int flags)  {  	ssize_t r; +#if LONG_MAX > INT_MAX +	struct msghdr h; +	if (msg) { +		h = *msg; +		h.__pad1 = h.__pad2 = 0; +		msg = &h; +	} +#endif  	CANCELPT_BEGIN;  	r = socketcall(sendmsg, fd, msg, flags, 0, 0, 0);  	CANCELPT_END; | 
