diff options
author | Ulrich Drepper <drepper@redhat.com> | 2001-01-15 07:20:34 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2001-01-15 07:20:34 +0000 |
commit | b1c1573959ac0fbbcf695c82d3c10e720de98830 (patch) | |
tree | e0142a5be1b0d87a2403154533824091211850b2 /sunrpc/xdr.c | |
parent | 6589ba79adb9aac077343a55c636489068ee6564 (diff) | |
download | glibc-b1c1573959ac0fbbcf695c82d3c10e720de98830.zip glibc-b1c1573959ac0fbbcf695c82d3c10e720de98830.tar.gz glibc-b1c1573959ac0fbbcf695c82d3c10e720de98830.tar.bz2 |
(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.
Diffstat (limited to 'sunrpc/xdr.c')
-rw-r--r-- | sunrpc/xdr.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/sunrpc/xdr.c b/sunrpc/xdr.c index e5d706d..46dfe3b 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: |