2002-12-13 Paul Eggert <eggert@twinsun.com>
[kopensolaris-gnu/glibc.git] / sunrpc / xdr_sizeof.c
index 72403e0..aaf25e9 100644 (file)
@@ -70,22 +70,18 @@ x_setpostn (XDR *xdrs, u_int len)
   return FALSE;
 }
 
-static long *
-x_inline (XDR *xdrs, int len)
+static int32_t *
+x_inline (XDR *xdrs, u_int len)
 {
   if (len == 0)
-    {
-      return NULL;
-    }
+    return NULL;
   if (xdrs->x_op != XDR_ENCODE)
-    {
-      return NULL;
-    }
-  if (len < (int) xdrs->x_base)
+    return NULL;
+  if (len < (u_int) (long int) xdrs->x_base)
     {
       /* x_private was already allocated */
       xdrs->x_handy += len;
-      return (long *) xdrs->x_private;
+      return (int32_t *) xdrs->x_private;
     }
   else
     {
@@ -97,9 +93,9 @@ x_inline (XDR *xdrs, int len)
          xdrs->x_base = 0;
          return NULL;
        }
-      xdrs->x_base = (caddr_t) len;
+      xdrs->x_base = (void *) (long) len;
       xdrs->x_handy += len;
-      return (long *) xdrs->x_private;
+      return (int32_t *) xdrs->x_private;
     }
 }
 
@@ -123,6 +119,13 @@ x_destroy (XDR *xdrs)
   return;
 }
 
+static bool_t
+x_putint32 (XDR *xdrs, const int32_t *int32p)
+{
+  xdrs->x_handy += BYTES_PER_XDR_UNIT;
+  return TRUE;
+}
+
 unsigned long
 xdr_sizeof (xdrproc_t func, void *data)
 {
@@ -132,6 +135,7 @@ xdr_sizeof (xdrproc_t func, void *data)
   /* to stop ANSI-C compiler from complaining */
   typedef bool_t (*dummyfunc1) (XDR *, long *);
   typedef bool_t (*dummyfunc2) (XDR *, caddr_t, u_int);
+  typedef bool_t (*dummyfunc3) (XDR *, int32_t *);
 
   ops.x_putlong = x_putlong;
   ops.x_putbytes = x_putbytes;
@@ -139,10 +143,12 @@ xdr_sizeof (xdrproc_t func, void *data)
   ops.x_getpostn = x_getpostn;
   ops.x_setpostn = x_setpostn;
   ops.x_destroy = x_destroy;
+  ops.x_putint32 = x_putint32;
 
   /* the other harmless ones */
   ops.x_getlong = (dummyfunc1) harmless;
   ops.x_getbytes = (dummyfunc2) harmless;
+  ops.x_getint32 = (dummyfunc3) harmless;
 
   x.x_op = XDR_ENCODE;
   x.x_ops = &ops;
@@ -153,5 +159,5 @@ xdr_sizeof (xdrproc_t func, void *data)
   stat = func (&x, data);
   if (x.x_private)
     free (x.x_private);
-  return stat == TRUE ? (unsigned) x.x_handy : 0;
+  return stat == TRUE ? x.x_handy : 0;
 }