aboutsummaryrefslogtreecommitdiff
path: root/sunrpc/xdr.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2001-01-15 07:20:34 +0000
committerUlrich Drepper <drepper@redhat.com>2001-01-15 07:20:34 +0000
commitb1c1573959ac0fbbcf695c82d3c10e720de98830 (patch)
treee0142a5be1b0d87a2403154533824091211850b2 /sunrpc/xdr.c
parent6589ba79adb9aac077343a55c636489068ee6564 (diff)
downloadglibc-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.c14
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: