Fix uip/whom.c for C89 compatibility
[mmh] / uip / mhmisc.c
index 9f0044a..8e20fa9 100644 (file)
-
 /*
- * mhparse.c -- misc routines to process MIME messages
- *
- * $Id$
- *
- * 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.
- */
+** mhparse.c -- misc routines to process 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 <errno.h>
 #include <h/mime.h>
 #include <h/mhparse.h>
 #include <h/utils.h>
+#include <stdarg.h>
+#include <sys/stat.h>
 
 extern int debugsw;
 
 /*
- * limit actions to specified parts or content types
- */
+** limit actions to specified parts or content types
+*/
 int npart = 0;
 int ntype = 0;
 char *parts[NPARTS + 1];
 char *types[NTYPES + 1];
 
-int endian = 0;                /* little or big endian */
+int endian = 0;  /* little or big endian */
 int userrs = 0;
 
 static char *errs = NULL;
 
 
 /*
- * prototypes
- */
-int part_ok (CT, int);
-int type_ok (CT, int);
-void set_endian (void);
-int make_intermediates (char *);
-void content_error (char *, CT, char *, ...);
-void flush_errors (void);
+** prototypes
+*/
+int part_ok(CT, int);
+int type_ok(CT, int);
+void set_endian(void);
+int make_intermediates(char *);
+void content_error(char *, CT, char *, ...);
+void flush_errors(void);
 
 
 int
-part_ok (CT ct, int sP)
+part_ok(CT ct, int sP)
 {
-    char **ap;
-    int len;
-
-    if (npart == 0 || (ct->c_type == CT_MULTIPART && (sP || ct->c_subtype)))
-       return 1;
-
-    for (ap = parts; *ap; ap++) {
-        len = strlen(*ap);
-        if (!strncmp (*ap, ct->c_partno, len) &&
-                (!ct->c_partno[len] || ct->c_partno[len] == '.' ))
-            return 1;
-    }
+       char **ap;
+       int len;
+
+       if (npart == 0 || (ct->c_type == CT_MULTIPART &&
+                       (sP || ct->c_subtype)))
+               return 1;
+
+       for (ap = parts; *ap; ap++) {
+               len = strlen(*ap);
+               if (strncmp(*ap, ct->c_partno, len)==0 &&
+                               (!ct->c_partno[len] ||
+                               ct->c_partno[len] == '.' ))
+                       return 1;
+       }
 
-    return 0;
+       return 0;
 }
 
 
 int
-type_ok (CT ct, int sP)
+type_ok(CT ct, int sP)
 {
-    char **ap;
-    char buffer[BUFSIZ];
-    CI ci = &ct->c_ctinfo;
+       char **ap;
+       char buffer[BUFSIZ];
+       CI ci = &ct->c_ctinfo;
 
-    if (ntype == 0 || (ct->c_type == CT_MULTIPART && (sP || ct->c_subtype)))
-       return 1;
+       if (ntype == 0 || (ct->c_type == CT_MULTIPART &&
+                       (sP || ct->c_subtype)))
+               return 1;
 
-    snprintf (buffer, sizeof(buffer), "%s/%s", ci->ci_type, ci->ci_subtype);
-    for (ap = types; *ap; ap++)
-       if (!strcasecmp (*ap, ci->ci_type) || !strcasecmp (*ap, buffer))
-           return 1;
+       snprintf(buffer, sizeof(buffer), "%s/%s", ci->ci_type, ci->ci_subtype);
+       for (ap = types; *ap; ap++)
+               if (!mh_strcasecmp(*ap, ci->ci_type) ||
+                               !mh_strcasecmp(*ap, buffer))
+                       return 1;
 
-    return 0;
+       return 0;
 }
 
 
 void
-set_endian (void)
+set_endian(void)
 {
-    union {
-       long l;
-       char c[sizeof(long)];
-    } un;
-
-    un.l = 1;
-    endian = un.c[0] ? -1 : 1;
-    if (debugsw)
-       fprintf (stderr, "%s endian architecture\n",
-               endian > 0 ? "big" : "little");
+       union {
+               long l;
+               char c[sizeof(long)];
+       } un;
+
+       un.l = 1;
+       endian = un.c[0] ? -1 : 1;
+       if (debugsw)
+               fprintf(stderr, "%s endian architecture\n",
+                               endian > 0 ? "big" : "little");
 }
 
 
 int
-make_intermediates (char *file)
+make_intermediates(char *file)
 {
-    char *cp;
+       char *cp;
 
-    for (cp = file + 1; (cp = strchr(cp, '/')); cp++) {
-       struct stat st;
+       for (cp = file + 1; (cp = strchr(cp, '/')); cp++) {
+               struct stat st;
 
-       *cp = '\0';
-       if (stat (file, &st) == NOTOK) {
-           int answer;
-           char *ep;
-           if (errno != ENOENT) {
-               advise (file, "error on directory");
+               *cp = '\0';
+               if (stat(file, &st) == NOTOK) {
+                       int answer;
+                       char *ep;
+                       if (errno != ENOENT) {
+                               advise(file, "error on directory");
 losing_directory:
+                               *cp = '/';
+                               return NOTOK;
+                       }
+
+                       ep = concat("Create directory \"", file, "\"? ", NULL);
+                       answer = getanswer(ep);
+                       mh_free0(&ep);
+
+                       if (!answer)
+                               goto losing_directory;
+                       if (!makedir(file)) {
+                               advise(NULL, "unable to create directory %s",
+                                               file);
+                               goto losing_directory;
+                       }
+               }
+
                *cp = '/';
-               return NOTOK;
-           }
-
-           ep = concat ("Create directory \"", file, "\"? ", NULL);
-           answer = getanswer (ep);
-           free (ep);
-
-           if (!answer)
-               goto losing_directory;
-           if (!makedir (file)) {
-               advise (NULL, "unable to create directory %s", file);
-               goto losing_directory;
-           }
        }
 
-       *cp = '/';
-    }
-
-    return OK;
+       return OK;
 }
 
 
 /*
- * Construct error message for content
- */
+** Construct error message for content
+*/
 
 void
-content_error (char *what, CT ct, char *fmt, ...)
+content_error(char *what, CT ct, char *fmt, ...)
 {
-    va_list arglist;
-    int        i, len, buflen;
-    char *bp, buffer[BUFSIZ];
-    CI ci;
+       int i, len, buflen;
+       char *bp, buffer[BUFSIZ];
+       CI ci;
+
+       bp = buffer;
+       buflen = sizeof(buffer);
+
+       if (userrs && invo_name && *invo_name) {
+               snprintf(bp, buflen, "%s: ", invo_name);
+               len = strlen(bp);
+               bp += len;
+               buflen -= len;
+       }
 
-    bp = buffer;
-    buflen = sizeof(buffer);
+       {
+               va_list arglist;
 
-    if (userrs && invo_name && *invo_name) {
-       snprintf (bp, buflen, "%s: ", invo_name);
-       len = strlen (bp);
+               va_start(arglist, fmt);
+               vsnprintf(bp, buflen, fmt, arglist);
+               va_end(arglist);
+       }
+       len = strlen(bp);
        bp += len;
        buflen -= len;
-    }
 
-    va_start (arglist, fmt);
+       ci = &ct->c_ctinfo;
 
-    vsnprintf (bp, buflen, fmt, arglist);
-    len = strlen (bp);
-    bp += len;
-    buflen -= len;
+       if (what) {
+               char *s;
 
-    ci = &ct->c_ctinfo;
+               if (*what) {
+                       snprintf(bp, buflen, " %s: ", what);
+                       len = strlen(bp);
+                       bp += len;
+                       buflen -= len;
+               }
 
-    if (what) {
-       char *s;
+               if ((s = strerror(errno)))
+                       snprintf(bp, buflen, "%s", s);
+               else
+                       snprintf(bp, buflen, "Error %d", errno);
 
-       if (*what) {
-           snprintf (bp, buflen, " %s: ", what);
-           len = strlen (bp);
-           bp += len;
-           buflen -= len;
+               len = strlen(bp);
+               bp += len;
+               buflen -= len;
        }
 
-       if ((s = strerror (errno)))
-           snprintf (bp, buflen, "%s", s);
-       else
-           snprintf (bp, buflen, "Error %d", errno);
+       i = strlen(invo_name) + 2;
 
-       len = strlen (bp);
+       /* Now add content type and subtype */
+       snprintf(bp, buflen, "\n%*.*s(content %s/%s", i, i, "",
+                       ci->ci_type, ci->ci_subtype);
+       len = strlen(bp);
        bp += len;
        buflen -= len;
-    }
-
-    i = strlen (invo_name) + 2;
 
-    /* Now add content type and subtype */
-    snprintf (bp, buflen, "\n%*.*s(content %s/%s", i, i, "",
-       ci->ci_type, ci->ci_subtype);
-    len = strlen (bp);
-    bp += len;
-    buflen -= len;
+       /* Now add the message/part number */
+       if (ct->c_file) {
+               snprintf(bp, buflen, " in message %s", ct->c_file);
+               len = strlen(bp);
+               bp += len;
+               buflen -= len;
+
+               if (ct->c_partno) {
+                       snprintf(bp, buflen, ", part %s", ct->c_partno);
+                       len = strlen(bp);
+                       bp += len;
+                       buflen -= len;
+               }
+       }
 
-    /* Now add the message/part number */
-    if (ct->c_file) {
-       snprintf (bp, buflen, " in message %s", ct->c_file);
-       len = strlen (bp);
+       snprintf(bp, buflen, ")");
+       len = strlen(bp);
        bp += len;
        buflen -= len;
 
-       if (ct->c_partno) {
-           snprintf (bp, buflen, ", part %s", ct->c_partno);
-           len = strlen (bp);
-           bp += len;
-           buflen -= len;
+       if (userrs) {
+               *bp++ = '\n';
+               *bp = '\0';
+               buflen--;
+
+               errs = add(buffer, errs);
+       } else {
+               advise(NULL, "%s", buffer);
        }
-    }
-
-    snprintf (bp, buflen, ")");
-    len = strlen (bp);
-    bp += len;
-    buflen -= len;
-
-    if (userrs) {
-       *bp++ = '\n';
-       *bp = '\0';
-       buflen--;
-
-       errs = add (buffer, errs);
-    } else {
-       advise (NULL, "%s", buffer);
-    }
 }
 
 
 void
-flush_errors (void)
+flush_errors(void)
 {
-    if (errs) {
-       fflush (stdout);
-       fprintf (stderr, "%s", errs);
-       free (errs);
-       errs = NULL;
-    }
+       if (errs) {
+               fflush(stdout);
+               fprintf(stderr, "%s", errs);
+               mh_free0(&errs);
+       }
 }