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_result *
27: nis_clone_result (const nis_result *src, nis_result *dest)
28: {
29: char *addr;
30: unsigned int size;
31: XDR xdrs;
32:
33: if (src == NULL)
34: return (NULL);
35:
36: size = xdr_sizeof ((xdrproc_t)_xdr_nis_result, (char *)src);
37: if ((addr = calloc(1, size)) == NULL)
38: return NULL;
39:
40: xdrmem_create (&xdrs, addr, size, XDR_ENCODE);
41: if (!_xdr_nis_result (&xdrs, (nis_result *)src))
42: {
43: xdr_destroy (&xdrs);
44: free (addr);
45: return NULL;
46: }
47: xdr_destroy (&xdrs);
48:
49: nis_result *res;
50: if (dest == NULL)
51: {
52: if ((res = calloc (1, sizeof (nis_result))) == NULL)
53: {
54: free (addr);
55: return NULL;
56: }
57: }
58: else
59: res = dest;
60:
61: xdrmem_create (&xdrs, addr, size, XDR_DECODE);
62: if (!_xdr_nis_result (&xdrs, res))
63: {
64: xdr_destroy (&xdrs);
65: if (res != dest)
66: free (res);
67: free (addr);
68: return NULL;
69: }
70: xdr_destroy (&xdrs);
71: free (addr);
72:
73: return res;
74: }