(xdr_long, xdr_u_long): Fix comments about this functions.
authordrepper <drepper>
Mon, 15 Jan 2001 07:20:34 +0000 (07:20 +0000)
committerdrepper <drepper>
Mon, 15 Jan 2001 07:20:34 +0000 (07:20 +0000)
(xdr_long, xdr_u_long): Return FALSE if trying to encode value which does not
fit in the 32bit type.

sunrpc/xdr.c

index e5d706d..46dfe3b 100644 (file)
@@ -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: