add free_field as standard for struct field
[mmh] / uip / mhfree.c
index 356a4d7..c873066 100644 (file)
@@ -11,6 +11,7 @@
 #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;
@@ -18,19 +19,18 @@ 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);
+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 void free_text(CT);
+static void free_multi(CT);
+static void free_partial(CT);
 
 
 /*
@@ -38,7 +38,7 @@ static void free_external (CT);
 */
 
 void
-free_content (CT ct)
+free_content(CT ct)
 {
        if (!ct)
                return;
@@ -46,79 +46,73 @@ free_content (CT ct)
        /*
        ** free all the header fields
        */
-       free_header (ct);
+       free_header(ct);
 
        if (ct->c_partno)
-               free (ct->c_partno);
+               free(ct->c_partno);
 
        if (ct->c_vrsn)
-               free (ct->c_vrsn);
+               free(ct->c_vrsn);
 
        if (ct->c_ctline)
-               free (ct->c_ctline);
+               free(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) {
-               case CT_MULTIPART:
-                       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;
-
-               case CT_TEXT:
-                       free_text (ct);
-                       break;
+       case CT_MULTIPART:
+               free_multi(ct);
+               break;
+
+       case CT_MESSAGE:
+               if (ct->c_subtype == MESSAGE_PARTIAL) {
+                       free_partial(ct);
+               }
+               break;
+
+       case CT_TEXT:
+               free_text(ct);
+               break;
        }
 
+       if (ct->c_charset)
+               free(ct->c_charset);
        if (ct->c_showproc)
-               free (ct->c_showproc);
-       if (ct->c_termproc)
-               free (ct->c_termproc);
+               free(ct->c_showproc);
        if (ct->c_storeproc)
-               free (ct->c_storeproc);
+               free(ct->c_storeproc);
 
        if (ct->c_celine)
-               free (ct->c_celine);
+               free(ct->c_celine);
 
        /* free structures for content encodings */
-       free_encoding (ct, 1);
+       free_encoding(ct, 1);
 
        if (ct->c_id)
-               free (ct->c_id);
+               free(ct->c_id);
        if (ct->c_descr)
-               free (ct->c_descr);
+               free(ct->c_descr);
        if (ct->c_dispo)
-               free (ct->c_dispo);
+               free(ct->c_dispo);
 
        if (ct->c_file) {
                if (ct->c_unlink)
-                       unlink (ct->c_file);
-               free (ct->c_file);
+                       unlink(ct->c_file);
+               free(ct->c_file);
        }
        if (ct->c_fp)
-               fclose (ct->c_fp);
+               fclose(ct->c_fp);
 
        if (ct->c_storage)
-               free (ct->c_storage);
+               free(ct->c_storage);
        if (ct->c_folder)
-               free (ct->c_folder);
+               free(ct->c_folder);
 
-       free (ct);
+       free(ct);
 }
 
 
@@ -128,7 +122,7 @@ free_content (CT ct)
 */
 
 void
-free_header (CT ct)
+free_header(CT ct)
 {
        HF hp1, hp2;
 
@@ -136,9 +130,9 @@ free_header (CT ct)
        while (hp1) {
                hp2 = hp1->next;
 
-               free (hp1->name);
-               free (hp1->value);
-               free (hp1);
+               free(hp1->name);
+               free(hp1->value);
+               free(hp1);
 
                hp1 = hp2;
        }
@@ -149,50 +143,50 @@ free_header (CT ct)
 
 
 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);
+               free(ci->ci_type);
                ci->ci_type = NULL;
        }
        if (ci->ci_subtype) {
-               free (ci->ci_subtype);
+               free(ci->ci_subtype);
                ci->ci_subtype = NULL;
        }
        for (ap = ci->ci_attrs; *ap; ap++) {
-               free (*ap);
+               free(*ap);
                *ap = NULL;
        }
        if (ci->ci_comment) {
-               free (ci->ci_comment);
+               free(ci->ci_comment);
                ci->ci_comment = NULL;
        }
        if (ci->ci_magic) {
-               free (ci->ci_magic);
+               free(ci->ci_magic);
                ci->ci_magic = NULL;
        }
 }
 
 
 static void
-free_text (CT ct)
+free_text(CT ct)
 {
        struct text *t;
 
        if (!(t = (struct text *) ct->c_ctparams))
                return;
 
-       free ((char *) t);
+       free((char *) t);
        ct->c_ctparams = NULL;
 }
 
 
 static void
-free_multi (CT ct)
+free_multi(CT ct)
 {
        struct multipart *m;
        struct part *part, *next;
@@ -201,24 +195,24 @@ free_multi (CT ct)
                return;
 
        if (m->mp_start)
-               free (m->mp_start);
+               free(m->mp_start);
        if (m->mp_stop)
-               free (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);
+               free_content(part->mp_part);
+               free((char *) part);
        }
        m->mp_parts = NULL;
 
-       free ((char *) m);
+       free((char *) m);
        ct->c_ctparams = NULL;
 }
 
 
 static void
-free_partial (CT ct)
+free_partial(CT ct)
 {
        struct partial *p;
 
@@ -226,26 +220,9 @@ free_partial (CT ct)
                return;
 
        if (p->pm_partid)
-               free (p->pm_partid);
+               free(p->pm_partid);
 
-       free ((char *) p);
-       ct->c_ctparams = NULL;
-}
-
-
-static void
-free_external (CT ct)
-{
-       struct exbody *e;
-
-       if (!(e = (struct exbody *) ct->c_ctparams))
-               return;
-
-       free_content (e->eb_content);
-       if (e->eb_body)
-               free (e->eb_body);
-
-       free ((char *) e);
+       free((char *) p);
        ct->c_ctparams = NULL;
 }
 
@@ -256,7 +233,7 @@ free_external (CT ct)
 */
 
 void
-free_encoding (CT ct, int toplevel)
+free_encoding(CT ct, int toplevel)
 {
        CE ce;
 
@@ -264,19 +241,19 @@ free_encoding (CT ct, int toplevel)
                return;
 
        if (ce->ce_fp) {
-               fclose (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);
+                       unlink(ce->ce_file);
+               free(ce->ce_file);
                ce->ce_file = NULL;
        }
 
        if (toplevel) {
-               free ((char *) ce);
+               free((char *) ce);
                ct->c_cefile = NULL;
        } else {
                ct->c_ceopenfnx = NULL;
@@ -285,13 +262,13 @@ free_encoding (CT ct, int toplevel)
 
 
 void
-freects_done (int status)
+freects_done()
 {
        CT *ctp;
 
-       if ((ctp = cts))
-               for (; *ctp; ctp++)
-                       free_content (*ctp);
-
-       exit (status);
+       if ((ctp = cts)) {
+               for (; *ctp; ctp++){
+                       free_content(*ctp);
+               }
+       }
 }