From b1c1573959ac0fbbcf695c82d3c10e720de98830 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Mon, 15 Jan 2001 07:20:34 +0000 Subject: (xdr_long, xdr_u_long): Fix comments about this functions. (xdr_long, xdr_u_long): Return FALSE if trying to encode value which does not fit in the 32bit type. --- sunrpc/xdr.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'sunrpc') diff --git a/sunrpc/xdr.c b/sunrpc/xdr.c index e5d706dd20..46dfe3b6b4 100644 --- a/sunrpc/xdr.c +++ b/sunrpc/xdr.c @@ -153,13 +153,16 @@ xdr_u_int (XDR *xdrs, u_int *up) /* * XDR long integers - * same as xdr_u_long - open coded to save a proc call! + * The definition of xdr_long() is kept for backward + * compatibility. Instead xdr_int() should be used. */ bool_t xdr_long (XDR *xdrs, long *lp) { - if (xdrs->x_op == XDR_ENCODE) + if (xdrs->x_op == XDR_ENCODE + && (sizeof (int32_t) == sizeof (long) + || (int32_t) *lp == *lp)) return XDR_PUTLONG (xdrs, lp); if (xdrs->x_op == XDR_DECODE) @@ -173,7 +176,8 @@ xdr_long (XDR *xdrs, long *lp) /* * XDR unsigned long integers - * same as xdr_long - open coded to save a proc call! + * The definition of xdr_u_long() is kept for backward + * compatibility. Instead xdr_u_int() should be used. */ bool_t xdr_u_long (XDR *xdrs, u_long *ulp) @@ -192,6 +196,10 @@ xdr_u_long (XDR *xdrs, u_long *ulp) } case XDR_ENCODE: + if (sizeof (uint32_t) != sizeof (u_long) + && (uint32_t) *ulp != *ulp) + return FALSE; + return XDR_PUTLONG (xdrs, (long *) ulp); case XDR_FREE: -- cgit v1.2.3