about summary refs log tree commit diff
path: root/nis/nis_clone_obj.c
diff options
context:
space:
mode:
Diffstat (limited to 'nis/nis_clone_obj.c')
-rw-r--r--nis/nis_clone_obj.c36
1 files changed, 17 insertions, 19 deletions
diff --git a/nis/nis_clone_obj.c b/nis/nis_clone_obj.c
index 82d1425081..5f9dd34b51 100644
--- a/nis/nis_clone_obj.c
+++ b/nis/nis_clone_obj.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 1997, 1998 Free Software Foundation, Inc.
+/* Copyright (c) 1997, 1998, 2004 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Thorsten Kukuk <kukuk@vt.uni-paderborn.de>, 1997.
 
@@ -29,43 +29,41 @@ nis_clone_object (const nis_object *src, nis_object *dest)
   unsigned char *addr;
   unsigned long size;
   XDR xdrs;
-  nis_object *res;
+  nis_object *res = NULL;
 
   if (src == NULL)
     return (NULL);
 
-  size = xdr_sizeof ((xdrproc_t)_xdr_nis_object, (char *)src);
-  if ((addr = calloc(1, size)) == NULL)
+  size = xdr_sizeof ((xdrproc_t)_xdr_nis_object, (char *) src);
+  if ((addr = calloc (1, size)) == NULL)
     return NULL;
 
   if (dest == NULL)
     {
       if ((res = calloc (1, sizeof (nis_object))) == NULL)
-	{
-	  free (addr);
-	  return NULL;
-	}
+	goto out2;
     }
   else
     res = dest;
 
-  xdrmem_create(&xdrs, addr, size, XDR_ENCODE);
+  xdrmem_create (&xdrs, addr, size, XDR_ENCODE);
   if (!_xdr_nis_object (&xdrs, (nis_object *)src))
-    {
-      xdr_destroy (&xdrs);
-      free (addr);
-      return NULL;
-    }
+    goto out3;
   xdr_destroy (&xdrs);
-  xdrmem_create(&xdrs, addr, size, XDR_DECODE);
-  if (!_xdr_nis_object(&xdrs, res))
+  xdrmem_create (&xdrs, addr, size, XDR_DECODE);
+  if (!_xdr_nis_object (&xdrs, res))
     {
-      xdr_destroy (&xdrs);
-      free (addr);
-      return NULL;
+    out3:
+      if (dest == NULL)
+	free (res);
+      res = NULL;
     }
+
+ out:
   xdr_destroy (&xdrs);
+ out2:
   free (addr);
 
   return res;
 }
+libnsl_hidden_def (nis_clone_object)