Back to index

glibc  2.9
Functions
nis_clone_dir.c File Reference
#include <string.h>
#include <rpc/rpc.h>
#include <rpcsvc/nis.h>
#include "nis_xdr.h"

Go to the source code of this file.

Functions

directory_obj * nis_clone_directory (const directory_obj *src, directory_obj *dest)

Function Documentation

directory_obj* nis_clone_directory ( const directory_obj *  src,
directory_obj *  dest 
)

Definition at line 27 of file nis_clone_dir.c.

{
  char *addr;
  unsigned int size;
  XDR xdrs;

  if (src == NULL)
    return NULL;

  size = xdr_sizeof ((xdrproc_t)_xdr_directory_obj, (char *)src);
  if ((addr = calloc(1, size)) == NULL)
    return NULL;

  xdrmem_create(&xdrs, addr, size, XDR_ENCODE);
  if (!_xdr_directory_obj (&xdrs, (directory_obj *)src))
    {
      xdr_destroy (&xdrs);
      free (addr);
      return NULL;
    }
  xdr_destroy (&xdrs);

  directory_obj *res;
  if (dest == NULL)
    {
      if ((res = calloc (1, sizeof (directory_obj))) == NULL)
       {
         free (addr);
         return NULL;
       }
    }
  else
    res = dest;

  xdrmem_create (&xdrs, addr, size, XDR_DECODE);
  if (!_xdr_directory_obj (&xdrs, res))
    {
      xdr_destroy (&xdrs);
      if (res != dest)
       free (res);
      free (addr);
      return NULL;
    }
  xdr_destroy (&xdrs);
  free (addr);

  return res;
}

Here is the call graph for this function: