fdwalk should return 0 on an empty directory
[kopensolaris-gnu/glibc.git] / sunrpc / xdr_ref.c
index f4ad74d..bc5f72d 100644 (file)
@@ -41,8 +41,15 @@ static char sccsid[] = "@(#)xdr_reference.c 1.11 87/08/11 SMI";
  */
 
 #include <stdio.h>
+#include <string.h>
 #include <rpc/types.h>
 #include <rpc/xdr.h>
+#include <libintl.h>
+
+#ifdef USE_IN_LIBIO
+# include <wchar.h>
+# include <libio/iolibio.h>
+#endif
 
 #define LASTUNSIGNED   ((u_int)0-1)
 
@@ -56,39 +63,44 @@ static char sccsid[] = "@(#)xdr_reference.c 1.11 87/08/11 SMI";
  * proc is the routine to handle the referenced structure.
  */
 bool_t
-xdr_reference(xdrs, pp, size, proc)
-       register XDR *xdrs;
-       caddr_t *pp;            /* the pointer to work on */
-       u_int size;             /* size of the object pointed to */
-       xdrproc_t proc;         /* xdr routine to handle the object */
+xdr_reference (xdrs, pp, size, proc)
+     XDR *xdrs;
+     caddr_t *pp;              /* the pointer to work on */
+     u_int size;               /* size of the object pointed to */
+     xdrproc_t proc;           /* xdr routine to handle the object */
 {
-       register caddr_t loc = *pp;
-       register bool_t stat;
+  caddr_t loc = *pp;
+  bool_t stat;
 
-       if (loc == NULL)
-               switch (xdrs->x_op) {
-               case XDR_FREE:
-                       return (TRUE);
+  if (loc == NULL)
+    switch (xdrs->x_op)
+      {
+      case XDR_FREE:
+       return TRUE;
 
-               case XDR_DECODE:
-                       *pp = loc = (caddr_t) mem_alloc(size);
-                       if (loc == NULL) {
-                               (void) fprintf(stderr,
-                                   "xdr_reference: out of memory\n");
-                               return (FALSE);
-                       }
-                       bzero(loc, (int)size);
-                       break;
-       }
+      case XDR_DECODE:
+       *pp = loc = (caddr_t) calloc (1, size);
+       if (loc == NULL)
+         {
+           (void) __fxprintf (NULL, "%s",
+                              _("xdr_reference: out of memory\n"));
+           return FALSE;
+         }
+       break;
+      default:
+       break;
+      }
 
-       stat = (*proc)(xdrs, loc, LASTUNSIGNED);
+  stat = (*proc) (xdrs, loc, LASTUNSIGNED);
 
-       if (xdrs->x_op == XDR_FREE) {
-               mem_free(loc, size);
-               *pp = NULL;
-       }
-       return (stat);
+  if (xdrs->x_op == XDR_FREE)
+    {
+      mem_free (loc, size);
+      *pp = NULL;
+    }
+  return stat;
 }
+INTDEF(xdr_reference)
 
 
 /*
@@ -111,22 +123,24 @@ xdr_reference(xdrs, pp, size, proc)
  *
  */
 bool_t
-xdr_pointer(xdrs,objpp,obj_size,xdr_obj)
-       register XDR *xdrs;
-       char **objpp;
-       u_int obj_size;
-       xdrproc_t xdr_obj;
+xdr_pointer (xdrs, objpp, obj_size, xdr_obj)
+     XDR *xdrs;
+     char **objpp;
+     u_int obj_size;
+     xdrproc_t xdr_obj;
 {
 
-       bool_t more_data;
+  bool_t more_data;
 
-       more_data = (*objpp != NULL);
-       if (! xdr_bool(xdrs,&more_data)) {
-               return (FALSE);
-       }
-       if (! more_data) {
-               *objpp = NULL;
-               return (TRUE);
-       }
-       return (xdr_reference(xdrs,objpp,obj_size,xdr_obj));
+  more_data = (*objpp != NULL);
+  if (!INTUSE(xdr_bool) (xdrs, &more_data))
+    {
+      return FALSE;
+    }
+  if (!more_data)
+    {
+      *objpp = NULL;
+      return TRUE;
+    }
+  return INTUSE(xdr_reference) (xdrs, objpp, obj_size, xdr_obj);
 }