]> diplodocus.org Git - nmh/blobdiff - uip/inc.c
Use Nmh-Attach for attach header field name, and accept Attach.
[nmh] / uip / inc.c
index b76f1cd96d8d04bf33b646ba479b9559a6a9f287..8b9fe7ae876e3a52ca4f85b813e1b5b1033f0c61 100644 (file)
--- a/uip/inc.c
+++ b/uip/inc.c
@@ -171,7 +171,7 @@ int
 main (int argc, char **argv)
 {
     int chgflag = 1, trnflag = 1;
-    int noisy = 1, width = 0;
+    int noisy = 1, width = -1;
     int hghnum = 0, msgnum = 0;
     int sasl = 0;
     int incerr = 0; /* <0 if inc hits an error which means it should not truncate mailspool */
@@ -587,12 +587,16 @@ go_to_it:
        }
 
        for (i = 1; i <= nmsgs; i++) {
+           charstring_t scanl = NULL;
+
            msgnum++;
            if (packfile) {
                fseek (pf, 0L, SEEK_CUR);
                pos = ftell (pf);
                size = 0;
-               fwrite (mmdlm1, 1, strlen (mmdlm1), pf);
+               if (fwrite (mmdlm1, 1, strlen (mmdlm1), pf) < strlen (mmdlm1)) {
+                   advise (mmdlm1, "fwrite");
+               }
                start = ftell (pf);
 
                if (pop_retr (i, pop_pack) == NOTOK)
@@ -619,7 +623,7 @@ go_to_it:
            }
            switch (incerr = scan (pf, msgnum, 0, nfs, width,
                              packfile ? 0 : msgnum == mp->hghmsg + 1 && chgflag,
-                             1, NULL, stop - start, noisy)) {
+                             1, NULL, stop - start, noisy, &scanl)) {
            case SCNEOF: 
                printf ("%*d  empty\n", DMAXFOLDER, msgnum);
                break;
@@ -638,14 +642,18 @@ go_to_it:
            case SCNENC:
            default: 
                if (aud)
-                   fputs (scanl, aud);
+                   fputs (charstring_buffer (scanl), aud);
                if (noisy)
                    fflush (stdout);
                break;
            }
+           charstring_free (scanl);
+
            if (packfile) {
                fseek (pf, stop, SEEK_SET);
-               fwrite (mmdlm2, 1, strlen (mmdlm2), pf);
+               if (fwrite (mmdlm2, 1, strlen (mmdlm2), pf) < strlen (mmdlm1)) {
+                   advise (mmdlm2, "fwrite");
+               }
                if (fflush (pf) || ferror (pf)) {
                    int e = errno;
                    pop_quit ();
@@ -666,6 +674,8 @@ go_to_it:
 
            if (trnflag && pop_dele (i) == NOTOK)
                adios (NULL, "%s", response);
+
+           scan_finished();
        }
 
        if (pop_quit () == NOTOK)
@@ -683,9 +693,12 @@ go_to_it:
        scan_detect_mbox_style (in);            /* the MAGIC invocation... */
        hghnum = msgnum = mp->hghmsg;
        for (;;) {
+           charstring_t scanl = NULL;
+
            /* create scanline for new message */
            switch (incerr = scan (in, msgnum + 1, msgnum + 1, nfs, width,
-                             msgnum == hghnum && chgflag, 1, NULL, 0L, noisy)) {
+                             msgnum == hghnum && chgflag, 1, NULL, 0L, noisy,
+                             &scanl)) {
            case SCNFAT:
            case SCNEOF: 
                break;
@@ -714,13 +727,15 @@ go_to_it:
                (void)ext_hook("add-hook", b, (char *)0);
 
                if (aud)
-                   fputs (scanl, aud);
+                   fputs (charstring_buffer (scanl), aud);
                if (noisy)
                    fflush (stdout);
 
                msgnum++;
                continue;
            }
+           charstring_free (scanl);
+
            /* If we get here there was some sort of error from scan(),
             * so stop processing anything more from the spool.
             */
@@ -733,6 +748,8 @@ go_to_it:
 
        hghnum = msgnum = mp->hghmsg;
        for (i = 0; i < num_maildir_entries; i++) {
+           charstring_t scanl = NULL;
+
            msgnum++;
 
            sp = Maildir[i].filename;
@@ -765,7 +782,7 @@ go_to_it:
            fseek (pf, 0L, SEEK_SET);
            switch (incerr = scan (pf, msgnum, 0, nfs, width,
                              msgnum == mp->hghmsg + 1 && chgflag,
-                             1, NULL, stop - start, noisy)) {
+                             1, NULL, stop - start, noisy, &scanl)) {
            case SCNEOF: 
                printf ("%*d  empty\n", DMAXFOLDER, msgnum);
                break;
@@ -791,11 +808,13 @@ go_to_it:
                (void)ext_hook("add-hook", b, (char *)0);
 
                if (aud)
-                   fputs (scanl, aud);
+                   fputs (charstring_buffer (scanl), aud);
                if (noisy)
                    fflush (stdout);
                break;
            }
+           charstring_free (scanl);
+
            if (ferror(pf) || fclose (pf)) {
                int e = errno;
                (void) m_unlink (cp);
@@ -808,6 +827,8 @@ go_to_it:
            if (trnflag && m_unlink (sp) == NOTOK)
                adios (sp, "couldn't unlink");
            free (sp); /* Free Maildir[i]->filename */
+
+           scan_finished();
        }
        free (Maildir); /* From now on Maildir is just a flag - don't dref! */
     }
@@ -952,9 +973,9 @@ pop_pack (char *s)
     char buffer[BUFSIZ];
 
     snprintf (buffer, sizeof(buffer), "%s\n", s);
-    for (j = 0; (j = stringdex (mmdlm1, buffer)) >= 0; buffer[j]++)
+    for ( ; (j = stringdex (mmdlm1, buffer)) >= 0; buffer[j]++)
        continue;
-    for (j = 0; (j = stringdex (mmdlm2, buffer)) >= 0; buffer[j]++)
+    for ( ; (j = stringdex (mmdlm2, buffer)) >= 0; buffer[j]++)
        continue;
     fputs (buffer, pf);
     size += strlen (buffer) + 1;