From b40d807317e1641489eb77f0203e987d517dada4 Mon Sep 17 00:00:00 2001 From: Manuel Novoa III Date: Mon, 2 May 2005 13:49:28 +0000 Subject: Replace IXDR_GET_LONG/IXDR_PUT_LONG so that they build with newer gcc. Note the comment in the code. --- include/rpc/xdr.h | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'include') diff --git a/include/rpc/xdr.h b/include/rpc/xdr.h index 6eaf958bb..4b2bb0e97 100644 --- a/include/rpc/xdr.h +++ b/include/rpc/xdr.h @@ -273,10 +273,20 @@ struct xdr_discrim * and shouldn't be used any longer. Code which use this defines or longs * in the RPC code will not work on 64bit Solaris platforms ! */ +/* #define IXDR_GET_LONG(buf) \ */ +/* ((long)ntohl((u_long)*(*(u_int32_t**)&(buf))++)) */ +/* #define IXDR_PUT_LONG(buf, v) \ */ +/* (*(*(u_int32_t**)&(buf))++ = (long)htonl((u_long)(v))) */ + +/* WARNING: These macros are not safe against side effects for the 'buf' + * argument. But the old versions they're replacing took the address of + * 'buf' and were probably not safe in that situation either. */ #define IXDR_GET_LONG(buf) \ - ((long)ntohl((u_long)*(*(u_int32_t**)&(buf))++)) + ((long) ntohl((u_long) (((u_int32_t *)(buf = (void *)(((char *) buf) + sizeof(u_int32_t))))[-1]) )) #define IXDR_PUT_LONG(buf, v) \ - (*(*(u_int32_t**)&(buf))++ = (long)htonl((u_long)(v))) + (((u_int32_t *)(buf = (void *)(((char *) buf) + sizeof(u_int32_t))))[-1]) = (long)htonl((u_long)(v)) + + #define IXDR_GET_U_LONG(buf) ((u_long)IXDR_GET_LONG(buf)) #define IXDR_PUT_U_LONG(buf, v) IXDR_PUT_LONG(buf, (long)(v)) -- cgit v1.2.3