|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T m
Length: 15210 (0x3b6a) Types: TextFile Names: »mfree.c«
└─⟦2d1937cfd⟧ Bits:30007241 EUUGD22: P.P 5.0 └─⟦e83f91978⟧ »EurOpenD22/isode/osimis-2.0.tar.Z« └─⟦d846658bd⟧ └─⟦this⟧ »osimis/msap/mfree.c«
/* * Copyright (c) 1988 University College London * All rights reserved. * * Redistribution and use in source and binary forms are permitted * provided that the above copyright notice and this parasraph are * duplicated in all such forms and that any documentation, * advertising materials, and other materials related to such * distribution and use acknowledge that the software was developed * by the Department of Computer Science, University College London. * The name of the University may not be used to * endorse or promote products derived from this software without * specific prior written permission. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ /* Management data structures freeing routines */ /* * By George Pavlou, April 1990 */ #include <stdio.h> #include "isode/rosap.h" #include "msap.h" /* LINTLIBRARY */ mfilter_free (filter) CMISfilter * filter; { register CMISfilter * this; for (; filter != NULLFILTER;) { filter = (this = filter) -> flt_next; if (this -> flt_type == Filter_Item) { register FilterItem * item = this -> flt_item; switch (item -> fi_type) { case FI_Equality: case FI_GreaterOrEqual: case FI_LessOrEqual: case FI_SubsetOf: case FI_SupersetOf: case FI_NonNullSetIntersect: if (item -> fi_attr.mp_id.mid_type == MID_GLOBAL && item -> fi_attr.mp_id.mid_global != NULLOID) oid_free(item -> fi_attr.mp_id.mid_global); if (item -> fi_attr.mp_val != NULLPE) pe_free(item -> fi_attr.mp_val); break; case FI_Present: if (item -> fi_attr.mp_id.mid_type == MID_GLOBAL && item -> fi_attr.mp_id.mid_global != NULLOID) oid_free(item -> fi_attr.mp_id.mid_global); break; case FI_Substrings: { register FilterSubstrings * substring = item -> fi_substrings, * thisone; for (; substring;) { substring = (thisone = substring) -> fi_sub_next; if (thisone -> fi_sub_attrid.mid_type == MID_GLOBAL && thisone -> fi_sub_attrid.mid_global != NULLOID) oid_free(thisone -> fi_sub_attrid.mid_global); if (thisone -> fi_sub_string != NULLCP) free(thisone -> fi_sub_string); free ((char *) thisone); } } break; } } else mfilter_free(this -> flt_filter); free ((char *) this); } } mcfree (mc) struct MSAPconnect * mc; { if (mc->mc_context) oid_free(mc->mc_context), mc->mc_context = NULLOID; if (mc->mc_resptitle.aei_ap_title) pe_free( mc->mc_resptitle.aei_ap_title), mc->mc_resptitle.aei_ap_title = NULLPE; if (mc->mc_resptitle.aei_ae_qualifier) pe_free( mc->mc_resptitle.aei_ae_qualifier), mc->mc_resptitle.aei_ae_qualifier = NULLPE; if (mc->mc_info.mai_access) external_free(mc->mc_info.mai_access), mc->mc_info.mai_access = NULL; if (mc->mc_info.mai_info) external_free(mc->mc_info.mai_info), mc->mc_info.mai_info = NULL; } msfree (ms) struct MSAPstart * ms; { if (ms->ms_calling.aei_ap_title) pe_free( ms->ms_calling.aei_ap_title), ms->ms_calling.aei_ap_title = NULLPE; if (ms->ms_calling.aei_ae_qualifier) pe_free( ms->ms_calling.aei_ae_qualifier), ms->ms_calling.aei_ae_qualifier = NULLPE; if (ms->ms_called.aei_ap_title) pe_free( ms->ms_called.aei_ap_title), ms->ms_called.aei_ap_title = NULLPE; if (ms->ms_called.aei_ae_qualifier) pe_free( ms->ms_called.aei_ae_qualifier), ms->ms_called.aei_ae_qualifier = NULLPE; PSFREE(&ms->ms_start); if (ms->ms_context) oid_free(ms->ms_context), ms->ms_context = NULLOID; if (ms->ms_info.mai_access) external_free(ms->ms_info.mai_access), ms->ms_info.mai_access = NULL; if (ms->ms_info.mai_info) external_free(ms->ms_info.mai_info), ms->ms_info.mai_info = NULL; } mafree (ma) struct MSAPabort * ma; { if (ma->ma_info) external_free(ma->ma_info), ma->ma_info = NULL; } static mgetarg_free (ga) struct get_arg * ga; { register MID attr; if (ga -> ga_class.mid_type == MID_GLOBAL && ga -> ga_class.mid_global != NULLOID) oid_free(ga -> ga_class.mid_global); if (ga -> ga_inst.mn_type == MN_DN && ga -> ga_inst.mn_dn != NULLDN) dn_free(ga -> ga_inst.mn_dn); else if (ga -> ga_inst.mn_type == MN_NONSPEC && ga -> ga_inst.mn_nonspec != NULLCP) free(ga -> ga_inst.mn_nonspec); if (ga -> ga_access) external_free(ga -> ga_access); if (ga -> ga_filter != NULLFILTER) mfilter_free(ga -> ga_filter); for (attr = ga -> ga_attrs; ga -> ga_nattrs--; attr++) if (attr -> mid_type == MID_GLOBAL && attr -> mid_global != NULLOID) oid_free(attr -> mid_global); } static mgetres_free (gr) struct get_res * gr; { register CMISparam * attr; if (gr -> gr_class.mid_type == MID_GLOBAL && gr -> gr_class.mid_global != NULLOID) oid_free(gr -> gr_class.mid_global); if (gr -> gr_inst.mn_type == MN_DN && gr -> gr_inst.mn_dn != NULLDN) dn_free(gr -> gr_inst.mn_dn); else if (gr -> gr_inst.mn_type == MN_NONSPEC && gr -> gr_inst.mn_nonspec != NULLCP) free(gr -> gr_inst.mn_nonspec); if (gr -> gr_time != NULLCP) free(gr -> gr_time); for (attr = gr -> gr_attrs; gr -> gr_nattrs--; attr++) { if (attr -> mp_id.mid_type == MID_GLOBAL && attr -> mp_id.mid_global != NULLOID) oid_free(attr -> mp_id.mid_global); if (attr -> mp_val != NULLPE) pe_free(attr -> mp_val); } } static msetarg_free (sa) struct set_arg * sa; { register CMISparam * attr; if (sa -> sa_class.mid_type == MID_GLOBAL && sa -> sa_class.mid_global != NULLOID) oid_free(sa -> sa_class.mid_global); if (sa -> sa_inst.mn_type == MN_DN && sa -> sa_inst.mn_dn != NULLDN) dn_free(sa -> sa_inst.mn_dn); else if (sa -> sa_inst.mn_type == MN_NONSPEC && sa -> sa_inst.mn_nonspec != NULLCP) free(sa -> sa_inst.mn_nonspec); if (sa -> sa_access) external_free(sa -> sa_access); if (sa -> sa_filter != NULLFILTER) mfilter_free(sa -> sa_filter); for (attr = sa -> sa_attrs; sa -> sa_nattrs--; attr++) { if (attr -> mp_id.mid_type == MID_GLOBAL && attr -> mp_id.mid_global != NULLOID) oid_free(attr -> mp_id.mid_global); if (attr -> mp_val != NULLPE) pe_free(attr -> mp_val); } } static msetres_free (sr) struct set_res * sr; { register CMISparam * attr; if (sr -> sr_class.mid_type == MID_GLOBAL && sr -> sr_class.mid_global != NULLOID) oid_free(sr -> sr_class.mid_global); if (sr -> sr_inst.mn_type == MN_DN && sr -> sr_inst.mn_dn != NULLDN) dn_free(sr -> sr_inst.mn_dn); else if (sr -> sr_inst.mn_type == MN_NONSPEC && sr -> sr_inst.mn_nonspec != NULLCP) free(sr -> sr_inst.mn_nonspec); if (sr -> sr_time != NULLCP) free(sr -> sr_time); for (attr = sr -> sr_attrs; sr -> sr_nattrs--; attr++) { if (attr -> mp_id.mid_type == MID_GLOBAL && attr -> mp_id.mid_global != NULLOID) oid_free(attr -> mp_id.mid_global); if (attr -> mp_val != NULLPE) pe_free(attr -> mp_val); } } static meventreparg_free (ea) struct event_rep_arg * ea; { if (ea -> ea_class.mid_type == MID_GLOBAL && ea -> ea_class.mid_global != NULLOID) oid_free(ea -> ea_class.mid_global); if (ea -> ea_inst.mn_type == MN_DN && ea -> ea_inst.mn_dn != NULLDN) dn_free(ea -> ea_inst.mn_dn); else if (ea -> ea_inst.mn_type == MN_NONSPEC && ea -> ea_inst.mn_nonspec != NULLCP) free(ea -> ea_inst.mn_nonspec); if (ea -> ea_time != NULLCP) free(ea -> ea_time); if (ea -> ea_type.mid_type == MID_GLOBAL && ea -> ea_type.mid_global != NULLOID) oid_free(ea -> ea_type.mid_global); if (ea -> ea_info != NULLPE) pe_free(ea -> ea_info); } static meventrepres_free (er) struct event_rep_res * er; { if (er -> er_class.mid_type == MID_GLOBAL && er -> er_class.mid_global != NULLOID) oid_free(er -> er_class.mid_global); if (er -> er_inst.mn_type == MN_DN && er -> er_inst.mn_dn != NULLDN) dn_free(er -> er_inst.mn_dn); else if (er -> er_inst.mn_type == MN_NONSPEC && er -> er_inst.mn_nonspec != NULLCP) free(er -> er_inst.mn_nonspec); if (er -> er_time != NULLCP) free(er -> er_time); if (er -> er_reply.mp_id.mid_type == MID_GLOBAL && er -> er_reply.mp_id.mid_global != NULLOID) oid_free(er -> er_reply.mp_id.mid_global); if (er -> er_reply.mp_val != NULLPE) pe_free(er -> er_reply.mp_val); } static mactionarg_free (aa) struct action_arg * aa; { if (aa -> aa_class.mid_type == MID_GLOBAL && aa -> aa_class.mid_global != NULLOID) oid_free(aa -> aa_class.mid_global); if (aa -> aa_inst.mn_type == MN_DN && aa -> aa_inst.mn_dn != NULLDN) dn_free(aa -> aa_inst.mn_dn); else if (aa -> aa_inst.mn_type == MN_NONSPEC && aa -> aa_inst.mn_nonspec != NULLCP) free(aa -> aa_inst.mn_nonspec); if (aa -> aa_access) external_free(aa -> aa_access); if (aa -> aa_filter != NULLFILTER) mfilter_free(aa -> aa_filter); if (aa -> aa_info.mp_id.mid_type == MID_GLOBAL && aa -> aa_info.mp_id.mid_global != NULLOID) oid_free(aa -> aa_info.mp_id.mid_global); if (aa -> aa_info.mp_val != NULLPE) pe_free(aa -> aa_info.mp_val); } static mactionres_free (ar) struct action_res * ar; { if (ar -> ar_class.mid_type == MID_GLOBAL && ar -> ar_class.mid_global != NULLOID) oid_free(ar -> ar_class.mid_global); if (ar -> ar_inst.mn_type == MN_DN && ar -> ar_inst.mn_dn != NULLDN) dn_free(ar -> ar_inst.mn_dn); else if (ar -> ar_inst.mn_type == MN_NONSPEC && ar -> ar_inst.mn_nonspec != NULLCP) free(ar -> ar_inst.mn_nonspec); if (ar -> ar_time != NULLCP) free(ar -> ar_time); if (ar -> ar_reply.mp_id.mid_type == MID_GLOBAL && ar -> ar_reply.mp_id.mid_global != NULLOID) oid_free(ar -> ar_reply.mp_id.mid_global); if (ar -> ar_reply.mp_val != NULLPE) pe_free(ar -> ar_reply.mp_val); } static mcreatearg_free (ca) struct create_arg * ca; { register CMISparam * attr; if (ca -> ca_class.mid_type == MID_GLOBAL && ca -> ca_class.mid_global != NULLOID) oid_free(ca -> ca_class.mid_global); if (ca -> ca_inst.mn_type == MN_DN && ca -> ca_inst.mn_dn != NULLDN) dn_free(ca -> ca_inst.mn_dn); else if (ca -> ca_inst.mn_type == MN_NONSPEC && ca -> ca_inst.mn_nonspec != NULLCP) free(ca -> ca_inst.mn_nonspec); if (ca -> ca_refinst.mn_type == MN_DN && ca -> ca_refinst.mn_dn != NULLDN) dn_free(ca -> ca_refinst.mn_dn); else if (ca -> ca_refinst.mn_type == MN_NONSPEC && ca -> ca_refinst.mn_nonspec != NULLCP) free(ca -> ca_refinst.mn_nonspec); if (ca -> ca_access) external_free(ca -> ca_access); for (attr = ca -> ca_attrs; ca -> ca_nattrs--; attr++) { if (attr -> mp_id.mid_type == MID_GLOBAL && attr -> mp_id.mid_global != NULLOID) oid_free(attr -> mp_id.mid_global); if (attr -> mp_val != NULLPE) pe_free(attr -> mp_val); } } static mcreateres_free (cr) struct create_res * cr; { register CMISparam * attr; if (cr -> cr_class.mid_type == MID_GLOBAL && cr -> cr_class.mid_global != NULLOID) oid_free(cr -> cr_class.mid_global); if (cr -> cr_inst.mn_type == MN_DN && cr -> cr_inst.mn_dn != NULLDN) dn_free(cr -> cr_inst.mn_dn); else if (cr -> cr_inst.mn_type == MN_NONSPEC && cr -> cr_inst.mn_nonspec != NULLCP) free(cr -> cr_inst.mn_nonspec); if (cr -> cr_time != NULLCP) free(cr -> cr_time); for (attr = cr -> cr_attrs; cr -> cr_nattrs--; attr++) { if (attr -> mp_id.mid_type == MID_GLOBAL && attr -> mp_id.mid_global != NULLOID) oid_free(attr -> mp_id.mid_global); if (attr -> mp_val != NULLPE) pe_free(attr -> mp_val); } } static mdeletearg_free (da) struct delete_arg * da; { if (da -> da_class.mid_type == MID_GLOBAL && da -> da_class.mid_global != NULLOID) oid_free(da -> da_class.mid_global); if (da -> da_inst.mn_type == MN_DN && da -> da_inst.mn_dn != NULLDN) dn_free(da -> da_inst.mn_dn); else if (da -> da_inst.mn_type == MN_NONSPEC && da -> da_inst.mn_nonspec != NULLCP) free(da -> da_inst.mn_nonspec); if (da -> da_access) external_free(da -> da_access); if (da -> da_filter != NULLFILTER) mfilter_free(da -> da_filter); } static mdeleteres_free (dr) struct delete_res * dr; { if (dr -> dr_class.mid_type == MID_GLOBAL && dr -> dr_class.mid_global != NULLOID) oid_free(dr -> dr_class.mid_global); if (dr -> dr_inst.mn_type == MN_DN && dr -> dr_inst.mn_dn != NULLDN) dn_free(dr -> dr_inst.mn_dn); else if (dr -> dr_inst.mn_type == MN_NONSPEC && dr -> dr_inst.mn_nonspec != NULLCP) free(dr -> dr_inst.mn_nonspec); if (dr -> dr_time != NULLCP) free(dr -> dr_time); } static merror_free (me) struct CMISerrparam * me; { if (me -> me_class.mid_type == MID_GLOBAL && me -> me_class.mid_global != NULLOID) oid_free(me -> me_class.mid_global); if (me -> me_inst.mn_type == MN_DN && me -> me_inst.mn_dn != NULLDN) dn_free(me -> me_inst.mn_dn); if (me -> me_time != NULLCP) free(me -> me_time); if (me -> me_filter != NULLFILTER) mfilter_free(me -> me_filter); if (me -> me_id.mid_type == MID_GLOBAL && me -> me_id.mid_global != NULLOID) oid_free(me -> me_id.mid_global); if (me -> me_val != NULLPE) pe_free(me -> me_val); } static mlinkedreplyarg_free (lr) struct linked_reply_arg * lr; { switch (lr -> lr_type) { case LR_GET_RES: case LR_GET_LISTERR: mgetres_free(&lr -> lr_getr); break; case LR_SET_RES: case LR_SET_LISTERR: msetres_free(&lr -> lr_setr); break; case LR_ACTION_RES: mactionres_free(&lr -> lr_actionr); break; case LR_DELETE_RES: mdeleteres_free(&lr -> lr_deleter); break; case LR_ACTION_ERR: case LR_DELETE_ERR: case LR_PROC_FAIL: merror_free(&lr -> lr_error); break; case LR_UNKNOWN: break; } } int mifree (mi) struct MSAPindication * mi; { switch (mi -> mi_type) { case MI_EVENT_REP: case MI_EVENT_REPC: meventreparg_free(&mi -> mi_eventrepv.args); break; case MI_EVENT_REP_RES: meventrepres_free(&mi -> mi_eventrepr.result); break; case MI_LINKED_REPLY: mlinkedreplyarg_free(&mi -> mi_linkedreplyv.args); break; case MI_GET: mgetarg_free(&mi -> mi_getv.args); break; case MI_GET_RES: mgetres_free(&mi -> mi_getr.result); break; case MI_SET: case MI_SETC: msetarg_free(&mi -> mi_setv.args); break; case MI_SET_RES: msetres_free(&mi -> mi_setr.result); break; case MI_ACTION: case MI_ACTIONC: mactionarg_free(&mi -> mi_actionv.args); break; case MI_ACTION_RES: mactionres_free(&mi -> mi_actionr.result); break; case MI_CREATE: mcreatearg_free(&mi -> mi_createv.args); break; case MI_CREATE_RES: mcreateres_free(&mi -> mi_creater.result); break; case MI_DELETE: mdeletearg_free(&mi -> mi_deletev.args); break; case MI_DELETE_RES: mdeleteres_free(&mi -> mi_deleter.result); break; case MI_ERROR: if (mi -> mi_errtype == m_getListError) mgetres_free(&mi -> mi_getr.result); else if (mi -> mi_errtype == m_setListError) msetres_free(&mi -> mi_setr.result); else merror_free(&mi -> mi_error.info); break; case MI_TERM: case MI_ABORT: case MI_PREJECT: case MI_UNKNOWN: break; } }