Fix uip/whom.c for C89 compatibility
[mmh] / uip / mhfree.c
index 38b830e..5378c35 100644 (file)
-
 /*
- * mhfree.c -- routines to free the data structures used to
- *          -- represent MIME messages
- *
- * This code is Copyright (c) 2002, by the authors of nmh.  See the
- * COPYRIGHT file in the root directory of the nmh distribution for
- * complete copyright information.
- */
+** mhfree.c -- routines to free the data structures used to
+**          -- represent MIME messages
+**
+** This code is Copyright (c) 2002, by the authors of nmh.  See the
+** COPYRIGHT file in the root directory of the nmh distribution for
+** complete copyright information.
+*/
 
 #include <h/mh.h>
+#include <h/utils.h>
 #include <errno.h>
 #include <h/mime.h>
 #include <h/mhparse.h>
+#include <unistd.h>
 
 /* The list of top-level contents to display */
 CT *cts = NULL;
 
 /*
- * prototypes
- */
-void free_content (CT);
-void free_header (CT);
-void free_ctinfo (CT);
-void free_encoding (CT, int);
-void freects_done (int);
+** prototypes
+*/
+void free_content(CT);
+void free_header(CT);
+void free_ctinfo(CT);
+void free_encoding(CT, int);
+void freects_done();
 
 /*
- * static prototypes
- */
-static void free_text (CT);
-static void free_multi (CT);
-static void free_partial (CT);
-static void free_external (CT);
+** static prototypes
+*/
+static void free_text(CT);
+static void free_multi(CT);
+static void free_partial(CT);
 
 
 /*
- * Primary routine to free a MIME content structure
- */
+** Primary routine to free a MIME content structure
+*/
 
 void
-free_content (CT ct)
+free_content(CT ct)
 {
-    if (!ct)
-       return;
+       if (!ct)
+               return;
 
-    /*
-     * free all the header fields
-     */
-    free_header (ct);
+       /*
+       ** free all the header fields
+       */
+       free_header(ct);
 
-    if (ct->c_partno)
-       free (ct->c_partno);
+       if (ct->c_partno)
+               mh_free0(&(ct->c_partno));
 
-    if (ct->c_vrsn)
-       free (ct->c_vrsn);
+       if (ct->c_vrsn)
+               mh_free0(&(ct->c_vrsn));
 
-    if (ct->c_ctline)
-       free (ct->c_ctline);
+       if (ct->c_ctline)
+               mh_free0(&(ct->c_ctline));
 
-    free_ctinfo (ct);
+       free_ctinfo(ct);
 
-    /*
-     * some of the content types have extra
-     * parts which need to be freed.
-     */
-    switch (ct->c_type) {
+       /*
+       ** some of the content types have extra
+       ** parts which need to be freed.
+       */
+       switch (ct->c_type) {
        case CT_MULTIPART:
-           free_multi (ct);
-           break;
+               free_multi(ct);
+               break;
 
        case CT_MESSAGE:
-           switch (ct->c_subtype) {
-               case MESSAGE_PARTIAL:
-                   free_partial (ct);
-                   break;
-
-               case MESSAGE_EXTERNAL:
-                   free_external (ct);
-                   break;
-           }
-           break;
+               if (ct->c_subtype == MESSAGE_PARTIAL) {
+                       free_partial(ct);
+               }
+               break;
 
        case CT_TEXT:
-           free_text (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);
-
-    if (ct->c_celine)
-       free (ct->c_celine);
-
-    /* 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_file) {
-       if (ct->c_unlink)
-           unlink (ct->c_file);
-       free (ct->c_file);
-    }
-    if (ct->c_fp)
-       fclose (ct->c_fp);
-
-    if (ct->c_storage)
-       free (ct->c_storage);
-    if (ct->c_folder)
-       free (ct->c_folder);
-
-    free (ct);
+               free_text(ct);
+               break;
+       }
+
+       if (ct->c_charset)
+               mh_free0(&(ct->c_charset));
+       if (ct->c_showproc)
+               mh_free0(&(ct->c_showproc));
+       if (ct->c_storeproc)
+               mh_free0(&(ct->c_storeproc));
+
+       if (ct->c_celine)
+               mh_free0(&(ct->c_celine));
+
+       /* free structures for content encodings */
+       free_encoding(ct, 1);
+
+       if (ct->c_id)
+               mh_free0(&(ct->c_id));
+       if (ct->c_descr)
+               mh_free0(&(ct->c_descr));
+       if (ct->c_dispo)
+               mh_free0(&(ct->c_dispo));
+
+       if (ct->c_file) {
+               if (ct->c_unlink)
+                       unlink(ct->c_file);
+               mh_free0(&(ct->c_file));
+       }
+       if (ct->c_fp)
+               fclose(ct->c_fp);
+
+       if (ct->c_storage)
+               mh_free0(&(ct->c_storage));
+       if (ct->c_folder)
+               mh_free0(&(ct->c_folder));
+
+       mh_free0(&ct);
 }
 
 
 /*
- * Free the linked list of header fields
- * for this content.
- */
+** Free the linked list of header fields
+** for this content.
+*/
 
 void
-free_header (CT ct)
+free_header(CT ct)
 {
-    HF hp1, hp2;
+       HF hp1, hp2;
 
-    hp1 = ct->c_first_hf;
-    while (hp1) {
-       hp2 = hp1->next;
+       hp1 = ct->c_first_hf;
+       while (hp1) {
+               hp2 = hp1->next;
 
-       free (hp1->name);
-       free (hp1->value);
-       free (hp1);
+               mh_free0(&(hp1->name));
+               mh_free0(&(hp1->value));
+               mh_free0(&hp1);
 
-       hp1 = hp2;
-    }
+               hp1 = hp2;
+       }
 
-    ct->c_first_hf = NULL;
-    ct->c_last_hf  = NULL;
+       ct->c_first_hf = NULL;
+       ct->c_last_hf  = NULL;
 }
 
 
 void
-free_ctinfo (CT ct)
+free_ctinfo(CT ct)
 {
-    char **ap;
-    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;
-    }
-    for (ap = ci->ci_attrs; *ap; ap++) {
-       free (*ap);
-       *ap = NULL;
-    }
-    if (ci->ci_comment) {
-       free (ci->ci_comment);
-       ci->ci_comment = NULL;
-    }
-    if (ci->ci_magic) {
-       free (ci->ci_magic);
-       ci->ci_magic = NULL;
-    }
+       char **ap;
+       CI ci;
+
+       ci = &ct->c_ctinfo;
+       if (ci->ci_type) {
+               mh_free0(&(ci->ci_type));
+       }
+       if (ci->ci_subtype) {
+               mh_free0(&(ci->ci_subtype));
+       }
+       for (ap = ci->ci_attrs; *ap; ap++) {
+               mh_free0(ap);
+       }
+       if (ci->ci_comment) {
+               mh_free0(&(ci->ci_comment));
+       }
+       if (ci->ci_magic) {
+               mh_free0(&(ci->ci_magic));
+       }
 }
 
 
 static void
-free_text (CT ct)
+free_text(CT ct)
 {
-    struct text *t;
+       struct text *t;
 
-    if (!(t = (struct text *) ct->c_ctparams))
-       return;
+       if (!(t = (struct text *) ct->c_ctparams))
+               return;
 
-    free ((char *) t);
-    ct->c_ctparams = NULL;
+       mh_free0(&t);
 }
 
 
 static void
-free_multi (CT ct)
+free_multi(CT ct)
 {
-    struct multipart *m;
-    struct part *part, *next;
-
-    if (!(m = (struct multipart *) ct->c_ctparams))
-       return;
-
-    if (m->mp_start)
-       free (m->mp_start);
-    if (m->mp_stop)
-       free (m->mp_stop);
-       
-    for (part = m->mp_parts; part; part = next) {
-       next = part->mp_next;
-       free_content (part->mp_part);
-       free ((char *) part);
-    }
-    m->mp_parts = NULL;
-
-    free ((char *) m);
-    ct->c_ctparams = NULL;
-}
+       struct multipart *m;
+       struct part *part, *next;
 
+       if (!(m = (struct multipart *) ct->c_ctparams))
+               return;
 
-static void
-free_partial (CT ct)
-{
-    struct partial *p;
-
-    if (!(p = (struct partial *) ct->c_ctparams))
-       return;
+       if (m->mp_start)
+               mh_free0(&(m->mp_start));
+       if (m->mp_stop)
+               mh_free0(&(m->mp_stop));
 
-    if (p->pm_partid)
-       free (p->pm_partid);
+       for (part = m->mp_parts; part; part = next) {
+               next = part->mp_next;
+               free_content(part->mp_part);
+               mh_free0(&part);
+       }
 
-    free ((char *) p);
-    ct->c_ctparams = NULL;
+       mh_free0(&m);
 }
 
 
 static void
-free_external (CT ct)
+free_partial(CT ct)
 {
-    struct exbody *e;
+       struct partial *p;
 
-    if (!(e = (struct exbody *) ct->c_ctparams))
-       return;
+       if (!(p = (struct partial *) ct->c_ctparams))
+               return;
 
-    free_content (e->eb_content);
-    if (e->eb_body)
-       free (e->eb_body);
+       if (p->pm_partid)
+               mh_free0(&(p->pm_partid));
 
-    free ((char *) e);
-    ct->c_ctparams = NULL;
+       mh_free0(&p);
 }
 
 
 /*
- * Free data structures related to encoding/decoding
- * Content-Transfer-Encodings.
- */
+** Free data structures related to encoding/decoding
+** Content-Transfer-Encodings.
+*/
 
 void
-free_encoding (CT ct, int toplevel)
+free_encoding(CT ct, int toplevel)
 {
-    CE ce;
-
-    if (!(ce = ct->c_cefile))
-       return;
-
-    if (ce->ce_fp) {
-       fclose (ce->ce_fp);
-       ce->ce_fp = NULL;
-    }
-
-    if (ce->ce_file) {
-       if (ce->ce_unlink)
-           unlink (ce->ce_file);
-       free (ce->ce_file);
-       ce->ce_file = NULL;
-    }
-
-    if (toplevel) {
-       free ((char *) ce);
-       ct->c_cefile = NULL;
-    } else {
-       ct->c_ceopenfnx = NULL;
-    }
+       CE ce;
+
+       if (!(ce = ct->c_cefile))
+               return;
+
+       if (ce->ce_fp) {
+               fclose(ce->ce_fp);
+               ce->ce_fp = NULL;
+       }
+
+       if (ce->ce_file) {
+               if (ce->ce_unlink)
+                       unlink(ce->ce_file);
+               mh_free0(&(ce->ce_file));
+       }
+
+       if (toplevel) {
+               mh_free0(&ce);
+       } else {
+               ct->c_ceopenfnx = NULL;
+       }
 }
 
 
 void
-freects_done (int status)
+freects_done()
 {
-    CT *ctp;
-
-    if ((ctp = cts))
-       for (; *ctp; ctp++)
-           free_content (*ctp);
+       CT *ctp;
 
-    exit (status);
+       if ((ctp = cts)) {
+               for (; *ctp; ctp++){
+                       free_content(*ctp);
+               }
+       }
 }