*/
#include <h/mh.h>
+#include <h/utils.h>
#include <h/mime.h>
#include <h/mhparse.h>
static void free_multi (CT);
static void free_partial (CT);
static void free_external (CT);
-static void free_pmlist (PM);
+static void free_pmlist (PM *);
/*
*/
free_header (ct);
- if (ct->c_partno)
- free (ct->c_partno);
-
- if (ct->c_vrsn)
- free (ct->c_vrsn);
-
- if (ct->c_ctline)
- free (ct->c_ctline);
+ mh_xfree(ct->c_partno);
+ mh_xfree(ct->c_vrsn);
+ mh_xfree(ct->c_ctline);
+ ct->c_partno = ct->c_vrsn = ct->c_ctline = NULL;
free_ctinfo (ct);
break;
}
- if (ct->c_showproc)
- free (ct->c_showproc);
- if (ct->c_termproc)
- free (ct->c_termproc);
- if (ct->c_storeproc)
- free (ct->c_storeproc);
+ mh_xfree(ct->c_showproc);
+ mh_xfree(ct->c_termproc);
+ mh_xfree(ct->c_storeproc);
+ ct->c_showproc = ct->c_termproc = ct->c_storeproc = NULL;
- if (ct->c_celine)
- free (ct->c_celine);
+ mh_xfree(ct->c_celine);
+ ct->c_celine = NULL;
/* free structures for content encodings */
free_encoding (ct, 1);
- if (ct->c_id)
- free (ct->c_id);
- if (ct->c_descr)
- free (ct->c_descr);
- if (ct->c_dispo)
- free (ct->c_dispo);
- if (ct->c_dispo_type)
- free (ct->c_dispo_type);
- free_pmlist (ct->c_dispo_first);
+ mh_xfree(ct->c_id);
+ mh_xfree(ct->c_descr);
+ mh_xfree(ct->c_dispo);
+ mh_xfree(ct->c_dispo_type);
+ ct->c_id = ct->c_descr = ct->c_dispo = ct->c_dispo_type = NULL;
+ free_pmlist (&ct->c_dispo_first);
if (ct->c_file) {
if (ct->c_unlink)
(void) m_unlink (ct->c_file);
free (ct->c_file);
+ ct->c_file = NULL;
}
- if (ct->c_fp)
+ if (ct->c_fp) {
fclose (ct->c_fp);
+ ct->c_fp = NULL;
+ }
- if (ct->c_storage)
- free (ct->c_storage);
- if (ct->c_folder)
- free (ct->c_folder);
+ mh_xfree(ct->c_storage);
+ mh_xfree(ct->c_folder);
+ ct->c_storage = ct->c_folder = NULL;
free (ct);
}
CI ci;
ci = &ct->c_ctinfo;
- if (ci->ci_type) {
- free (ci->ci_type);
- ci->ci_type = NULL;
- }
- if (ci->ci_subtype) {
- free (ci->ci_subtype);
- ci->ci_subtype = NULL;
- }
- free_pmlist(ci->ci_first_pm);
- if (ci->ci_comment) {
- free (ci->ci_comment);
- ci->ci_comment = NULL;
- }
- if (ci->ci_magic) {
- free (ci->ci_magic);
- ci->ci_magic = NULL;
- }
+ mh_xfree(ci->ci_type);
+ mh_xfree(ci->ci_subtype);
+ ci->ci_type = ci->ci_subtype = NULL;
+ free_pmlist(&ci->ci_first_pm);
+ mh_xfree(ci->ci_comment);
+ mh_xfree(ci->ci_magic);
+ ci->ci_comment = ci->ci_magic = NULL;
}
if (!(t = (struct text *) ct->c_ctparams))
return;
- free ((char *) t);
+ free(t);
ct->c_ctparams = NULL;
}
if (!(m = (struct multipart *) ct->c_ctparams))
return;
- if (m->mp_start)
- free (m->mp_start);
- if (m->mp_stop)
- free (m->mp_stop);
+ mh_xfree(m->mp_start);
+ mh_xfree(m->mp_stop);
free (m->mp_content_before);
free (m->mp_content_after);
for (part = m->mp_parts; part; part = next) {
next = part->mp_next;
free_content (part->mp_part);
- free ((char *) part);
+ free(part);
}
m->mp_parts = NULL;
- free ((char *) m);
+ free(m);
ct->c_ctparams = NULL;
}
if (!(p = (struct partial *) ct->c_ctparams))
return;
- if (p->pm_partid)
- free (p->pm_partid);
+ mh_xfree(p->pm_partid);
- free ((char *) p);
+ free(p);
ct->c_ctparams = NULL;
}
return;
free_content (e->eb_content);
- if (e->eb_body)
- free (e->eb_body);
- if (e->eb_url)
- free (e->eb_url);
-
- free ((char *) e);
+ mh_xfree(e->eb_body);
+ mh_xfree(e->eb_url);
+ free(e);
ct->c_ctparams = NULL;
}
static void
-free_pmlist (PM pm)
+free_pmlist (PM *p)
{
- PM pm2;
+ PM pm = *p, pm2;
while (pm != NULL) {
- if (pm->pm_name)
- free (pm->pm_name);
- if (pm->pm_value)
- free (pm->pm_value);
- if (pm->pm_charset)
- free (pm->pm_charset);
- if (pm->pm_lang)
- free (pm->pm_lang);
+ mh_xfree(pm->pm_name);
+ mh_xfree(pm->pm_value);
+ mh_xfree(pm->pm_charset);
+ mh_xfree(pm->pm_lang);
pm2 = pm->pm_next;
free(pm);
pm = pm2;
}
+
+ if (*p)
+ *p = NULL;
}
{
CT *ctp;
- if ((ctp = cts))
- for (; *ctp; ctp++)
- free_content (*ctp);
+ for (ctp = cts; ctp && *ctp; ctp++)
+ free_content (*ctp);
+
+ free (cts);
exit (status);
}