diff options
Diffstat (limited to 'nis/nis_free.c')
-rw-r--r-- | nis/nis_free.c | 300 |
1 files changed, 18 insertions, 282 deletions
diff --git a/nis/nis_free.c b/nis/nis_free.c index a4ab7378e6..5d08882f84 100644 --- a/nis/nis_free.c +++ b/nis/nis_free.c @@ -18,317 +18,53 @@ Boston, MA 02111-1307, USA. */ #include <rpcsvc/nis.h> -#include <rpcsvc/nislib.h> void -nis_free_attr (nis_attr *obj) +__free_fdresult (fd_result *res) { - if (obj == NULL) - return; - - if (obj->zattr_ndx) - { - free (obj->zattr_ndx); - obj->zattr_ndx = NULL; - } - - if (obj->zattr_val.zattr_val_val) + if (res != NULL) { - free (obj->zattr_val.zattr_val_val); - obj->zattr_val.zattr_val_val = NULL; - obj->zattr_val.zattr_val_len = 0; + xdr_free ((xdrproc_t)xdr_fd_result, (char *)res); + free (res); } } void nis_free_request (ib_request *ibreq) { - unsigned int i; - - for (i = 0; i < ibreq->ibr_srch.ibr_srch_len; ++i) - { - nis_free_attr (&(ibreq->ibr_srch.ibr_srch_val)[i]); - ibreq->ibr_srch.ibr_srch_val = NULL; - ibreq->ibr_srch.ibr_srch_len = 0; - } - - if (ibreq->ibr_name) - { - free (ibreq->ibr_name); - ibreq->ibr_name = NULL; - } - - if (ibreq->ibr_cookie.n_bytes) - { - free (ibreq->ibr_cookie.n_bytes); - ibreq->ibr_cookie.n_bytes = NULL; - ibreq->ibr_cookie.n_len = 0; - } -} - -void -nis_free_endpoints (endpoint *ep, unsigned int len) -{ - unsigned int i; - - if (ep == NULL) - return; - - for (i = 0; i < len; ++i) - { - if (ep[i].uaddr) - { - free (ep[i].uaddr); - ep[i].uaddr = NULL; - } - if (ep[i].family) - { - free (ep[i].family); - ep[i].family = NULL; - } - if (ep[i].proto) - { - free (ep[i].proto); - ep[i].proto = NULL; - } - } -} - -void -nis_free_servers (nis_server *obj, unsigned int len) -{ - unsigned int i; - - if (obj == NULL) - return; - - for (i = 0; i < len; i++) + if (ibreq != NULL) { - if (obj[i].name) - { - free (obj[i].name); - obj[i].name = NULL; - } - if (obj[i].ep.ep_len > 0) - { - nis_free_endpoints (obj[i].ep.ep_val, obj[i].ep.ep_len); - free (obj[i].ep.ep_val); - obj[i].ep.ep_val = NULL; - obj[i].ep.ep_len = 0; - } - if (obj[i].pkey.n_bytes && obj[i].pkey.n_len > 0) - { - free (obj[i].pkey.n_bytes); - obj[i].pkey.n_bytes = NULL; - obj[i].pkey.n_len = 0; - } + xdr_free ((xdrproc_t)xdr_ib_request, (char *)ibreq); + free (ibreq); } } void nis_free_directory (directory_obj *obj) { - if (obj == NULL) - return; - if (obj->do_name) - { - free (obj->do_name); - obj->do_name = NULL; - } - if (obj->do_servers.do_servers_len > 0) + if (obj != NULL) { - nis_free_servers (obj->do_servers.do_servers_val, - obj->do_servers.do_servers_len); - free (obj->do_servers.do_servers_val); - obj->do_servers.do_servers_val = NULL; - obj->do_servers.do_servers_len = 0; - } - if (obj->do_armask.do_armask_len > 0) - { - free (obj->do_armask.do_armask_val); - obj->do_armask.do_armask_val = NULL; - obj->do_armask.do_armask_len = 0; - } -} - -void -nis_free_group (group_obj *obj) -{ - unsigned int i; - - if (obj->gr_members.gr_members_len > 0) - { - for (i = 0; i < obj->gr_members.gr_members_len; ++i) - if (obj->gr_members.gr_members_val[i]) - free (obj->gr_members.gr_members_val[i]); - free (obj->gr_members.gr_members_val); - obj->gr_members.gr_members_val = NULL; - obj->gr_members.gr_members_len = 0; - } -} - -void -nis_free_table (table_obj *obj) -{ - if (obj == NULL) - return; - - if (obj->ta_type) - { - free (obj->ta_type); - obj->ta_type = NULL; - } - - if (obj->ta_cols.ta_cols_val) - { - unsigned int i; - - for (i = 0; i < obj->ta_cols.ta_cols_len; ++i) - if (obj->ta_cols.ta_cols_val[i].tc_name) - free (obj->ta_cols.ta_cols_val[i].tc_name); - free (obj->ta_cols.ta_cols_val); - obj->ta_cols.ta_cols_val = NULL; - obj->ta_cols.ta_cols_len = 0; - } - - if (obj->ta_path) - { - free (obj->ta_path); - obj->ta_path = NULL; - } -} - -void -nis_free_entry (entry_obj *obj) -{ - if (obj == NULL) - return; - - if (obj->en_type) - { - free (obj->en_type); - obj->en_type = 0; - } - - if (obj->en_cols.en_cols_val) - { - unsigned int i; - - for (i = 0; i < obj->en_cols.en_cols_len; ++i) - if (obj->en_cols.en_cols_val[i].ec_value.ec_value_val) - free (obj->en_cols.en_cols_val[i].ec_value.ec_value_val); - free (obj->en_cols.en_cols_val); - obj->en_cols.en_cols_val = NULL; - obj->en_cols.en_cols_len = 0; - } -} - -void -nis_free_link (link_obj *obj) -{ - if (obj == NULL) - return; - - if (obj->li_attrs.li_attrs_val) - { - unsigned int i; - - for (i = 0; i < obj->li_attrs.li_attrs_len; ++i) - { - if (obj->li_attrs.li_attrs_val[i].zattr_ndx) - free (obj->li_attrs.li_attrs_val[i].zattr_ndx); - if (obj->li_attrs.li_attrs_val[i].zattr_val.zattr_val_val) - free (obj->li_attrs.li_attrs_val[i].zattr_val.zattr_val_val); - } - free (obj->li_attrs.li_attrs_val); - obj->li_attrs.li_attrs_val = NULL; - obj->li_attrs.li_attrs_len = 0; - } - - if (obj->li_name) - { - free (obj->li_name); - obj->li_name = NULL; + xdr_free ((xdrproc_t)xdr_directory_obj, (char *)obj); + free (obj); } } void nis_free_object (nis_object *obj) { - - if (obj == NULL) - return; - - if (obj->zo_name) - { - free (obj->zo_name); - obj->zo_name = NULL; - } - if (obj->zo_owner) - { - free (obj->zo_owner); - obj->zo_owner = NULL; - } - if (obj->zo_group) + if (obj != NULL) { - free (obj->zo_group); - obj->zo_group = NULL; + xdr_free ((xdrproc_t)xdr_nis_object, (char *)obj); + free (obj); } - if (obj->zo_domain) - { - free (obj->zo_domain); - obj->zo_domain = NULL; - } - switch (obj->zo_data.zo_type) - { - case BOGUS_OBJ: - break; - case NO_OBJ: - break; - case DIRECTORY_OBJ: - nis_free_directory (&obj->zo_data.objdata_u.di_data); - break; - case GROUP_OBJ: - nis_free_group (&obj->zo_data.objdata_u.gr_data); - break; - case TABLE_OBJ: - nis_free_table (&obj->zo_data.objdata_u.ta_data); - break; - case ENTRY_OBJ: - nis_free_entry (&obj->zo_data.objdata_u.en_data); - break; - case LINK_OBJ: - nis_free_link (&obj->zo_data.objdata_u.li_data); - break; - case PRIVATE_OBJ: - if (obj->zo_data.objdata_u.po_data.po_data_val) - { - free (obj->zo_data.objdata_u.po_data.po_data_val); - obj->zo_data.objdata_u.po_data.po_data_val = NULL; - } - break; - default: - break; - } - obj->zo_data.zo_type = NO_OBJ; } void nis_freeresult (nis_result *res) { - unsigned int i; - - if (res == NULL) - return; - - for (i = 0; i < res->objects.objects_len; i++) - nis_free_object (&(res->objects.objects_val)[i]); - - if (res->objects.objects_val != NULL) - free (res->objects.objects_val); - - if (res->cookie.n_bytes != NULL && res->cookie.n_len > 0) - free (res->cookie.n_bytes); - - free (res); + if (res != NULL) + { + xdr_free ((xdrproc_t)xdr_nis_result, (char *)res); + free (res); + } } |