Fix uip/whom.c for C89 compatibility
[mmh] / uip / scansbr.c
index 50b250e..48837d7 100644 (file)
@@ -74,8 +74,7 @@ scan(FILE *inb, int innum, int outnum, char *fmtstr, int width, int curflg,
                                        width = MAXSCANL;
                        }
                        dat[3] = slwidth = width;
-                       scanl = (char *) mh_xmalloc((size_t) SCAN_CHARWIDTH *
-                                       (slwidth + 2));  /* probably for \n and \0 */
+                       scanl = mh_xcalloc(slwidth + 2, SCAN_CHARWIDTH);  /* probably for \n and \0 */
                        /* Compile format string */
                        ncomps = fmt_compile(fmtstr, &fmt) + 1;
                        FINDCOMP(datecomp, "date");
@@ -108,6 +107,9 @@ scan(FILE *inb, int innum, int outnum, char *fmtstr, int width, int curflg,
        for (compnum = 1, state = FLD2; ; ) {
                state = m_getfld2(state, &f, inb);
                switch (state) {
+               case LENERR2:
+                       state = FLD2;
+                       /* FALL */
                case FLD2:
                        compnum++;
                        if (incing) {
@@ -129,7 +131,7 @@ scan(FILE *inb, int innum, int outnum, char *fmtstr, int width, int curflg,
                                                free(cptr->c_text);
                                                cptr->c_text = NULL;
                                        }
-                                       cptr->c_text = getcpy(f.value);
+                                       cptr->c_text = mh_xstrdup(f.value);
                                        cp = cptr->c_text + strlen(cptr->c_text) - 1;
                                        for (; cp >= cptr->c_text; cp--) {
                                                if (isspace(*cp)) {
@@ -192,19 +194,20 @@ body:;
                        }
                        goto finished;
 
-               case LENERR2:
-                       advise(NULL, "line \"%s\" too long", trim(f.value));
-                       goto handleerror;
-
                case FMTERR2:
                        if (strncmp("From ", f.value, 5)==0) {
                                state = FILEEOF2;
                                goto finished;
                        }
-                       /* FALL */
+                       state = FLD2;
+                       fprintf(stderr, innum ?
+                                       "??Format error (message %d) in " :
+                                       "??Format error in ",
+                                       outnum ? outnum : innum);
+                       fprintf(stderr, "component %d\n", compnum);
+                       continue;
 
                case IOERR2:
-handleerror:;
                        fprintf(stderr, innum ?
                                        "??Format error (message %d) in " :
                                        "??Format error in ",
@@ -252,7 +255,7 @@ finished:
                if (datecomp && !datecomp->c_text) {
                        if (!datecomp->c_text) {
                                if (!datecomp->c_tws)
-                                       datecomp->c_tws = (struct tws *) mh_xcalloc((size_t) 1, sizeof(*datecomp->c_tws));
+                                       datecomp->c_tws = mh_xcalloc(1, sizeof(*datecomp->c_tws));
                                if (!datecomp->c_tws)
                                        adios(EX_OSERR, NULL, "unable to allocate tws buffer");
                                *datecomp->c_tws = *dlocaltime((time_t *) &st.st_mtime);