nis_object * nis_read_obj (const char *name) { XDR xdrs; FILE *in; bool_t status; nis_object *obj; in = fopen (name, "rb"); if (in == NULL) return NULL; obj = calloc (1, sizeof (nis_object)); if (obj == NULL) { fclose (in); return NULL; } xdrstdio_create (&xdrs, in, XDR_DECODE); status =_xdr_nis_object (&xdrs, obj); xdr_destroy (&xdrs); fclose (in); if (status) return obj; else { nis_free_object (obj); return NULL; } }
nis_object * nis_clone_object (const nis_object *src, nis_object *dest) { char *addr; unsigned int size; XDR xdrs; 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) return NULL; if (dest == NULL) { if ((res = calloc (1, sizeof (nis_object))) == NULL) goto out; } else res = dest; xdrmem_create (&xdrs, addr, size, XDR_ENCODE); if (!_xdr_nis_object (&xdrs, (nis_object *) src)) goto out2; xdr_destroy (&xdrs); xdrmem_create (&xdrs, addr, size, XDR_DECODE); if (!_xdr_nis_object (&xdrs, res)) { out2: if (dest == NULL) free (res); res = NULL; } xdr_destroy (&xdrs); out: free (addr); return res; }
bool_t nis_write_obj (const char *name, const nis_object *obj) { XDR xdrs; FILE *out; bool_t status; out = fopen (name, "wb"); if (out == NULL) return FALSE; xdrstdio_create (&xdrs, out, XDR_ENCODE); status = _xdr_nis_object (&xdrs, (nis_object *) obj); xdr_destroy (&xdrs); fclose (out); return status; }