1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20: #include <string.h>
21: #include <rpc/rpc.h>
22: #include <rpcsvc/nis.h>
23:
24: #include "nis_xdr.h"
25:
26: nis_object *
27: nis_clone_object (const nis_object *src, nis_object *dest)
28: {
29: char *addr;
30: unsigned int size;
31: XDR xdrs;
32: nis_object *res = NULL;
33:
34: if (src == NULL)
35: return (NULL);
36:
37: size = xdr_sizeof ((xdrproc_t)_xdr_nis_object, (char *) src);
38: if ((addr = calloc (1, size)) == NULL)
39: return NULL;
40:
41: if (dest == NULL)
42: {
43: if ((res = calloc (1, sizeof (nis_object))) == NULL)
44: goto out;
45: }
46: else
47: res = dest;
48:
49: xdrmem_create (&xdrs, addr, size, XDR_ENCODE);
50: if (!_xdr_nis_object (&xdrs, (nis_object *) src))
51: goto out2;
52: xdr_destroy (&xdrs);
53: xdrmem_create (&xdrs, addr, size, XDR_DECODE);
54: if (!_xdr_nis_object (&xdrs, res))
55: {
56: out2:
57: if (dest == NULL)
58: free (res);
59: res = NULL;
60: }
61:
62: xdr_destroy (&xdrs);
63: out:
64: free (addr);
65:
66: return res;
67: }
68: libnsl_hidden_def (nis_clone_object)