Fix uip/whom.c for C89 compatibility
[mmh] / uip / pick.c
index 320db19..4cb33fb 100644 (file)
@@ -70,6 +70,8 @@ static struct swit switches[] = {
        { NULL, 0 }
 };
 
+char *version=VERSION;
+
 /*
 ** static prototypes
 */
@@ -197,7 +199,7 @@ main(int argc, char **argv)
                        if (folder)
                                adios(EX_USAGE, NULL, "only one folder at a time!");
                        else
-                               folder = getcpy(expandfol(cp));
+                               folder = mh_xstrdup(expandfol(cp));
                } else
                        app_msgarg(&msgs, cp);
        }
@@ -731,7 +733,7 @@ pattern: ;
                        padvise(NULL, "pattern error in %s %s", argp[-2], cp);
                        return NULL;
                }
-               n->n_patbuf = getcpy(dp);
+               n->n_patbuf = mh_xstrdup(dp);
                return n;
 
        case PROTHR:
@@ -768,7 +770,7 @@ newnexus(int (*action)())
 {
        struct nexus *p;
 
-       p = (struct nexus *) mh_xcalloc((size_t) 1, sizeof *p);
+       p = mh_xcalloc(1, sizeof *p);
 
        p->n_action = action;
        return p;
@@ -1241,38 +1243,40 @@ static int
 TWSaction(params)
 plist
 {
-       int state;
+       enum state state;
+       struct field f = {{0}};
        char *bp;
-       char buf[BUFSIZ], name[NAMESZ];
        struct tws *tw;
 
        fseek(fp, start, SEEK_SET);
-       for (state = FLD, bp = NULL;;) {
-               switch (state = m_getfld(state, name, buf, sizeof buf, fp)) {
-               case FLD:
-               case FLDPLUS:
-                       if (bp != NULL) {
-                               free(bp);
-                               bp = NULL;
-                       }
-                       bp = getcpy(buf);
-                       while (state == FLDPLUS) {
-                               state = m_getfld(state, name, buf,
-                                               sizeof buf, fp);
-                               bp = add(buf, bp);
+       for (state = FLD2, bp = NULL;;) {
+               switch (state = m_getfld2(state, &f, fp)) {
+               case LENERR2:
+                       state = FLD2;
+                       /* FALL */
+
+               case FLD2:
+                       if (bp) {
+                               mh_free0(&bp);
                        }
-                       if (!mh_strcasecmp(name, n->n_datef))
+                       bp = mh_xstrdup(f.value);
+                       if (mh_strcasecmp(f.name, n->n_datef)==0) {
                                break;
+                       }
                        continue;
 
-               case BODY:
-               case FILEEOF:
-               case LENERR:
-               case FMTERR:
-                       if (state == LENERR || state == FMTERR)
-                               advise(NULL, "format error in message %d", msgnum);
-                       if (bp != NULL)
-                               free(bp);
+               case FMTERR2:
+                       advise(NULL, "format error in message %d", msgnum);
+                       state = FLD2;
+                       continue;
+
+               case IOERR2:
+                       adios(EX_IOERR, "m_getfld2", "io error on message %d", msgnum);
+                       /* FALL */
+
+               case BODY2:
+               case FILEEOF2:
+                       mh_free0(&bp);
                        return 0;
 
                default:
@@ -1289,6 +1293,6 @@ plist
                        : (twsort(tw, &n->n_tws) < 0);
 
        if (bp != NULL)
-               free(bp);
+               mh_free0(&bp);
        return state;
 }