]> diplodocus.org Git - nmh/blobdiff - uip/scansbr.c
Fix typo in man page
[nmh] / uip / scansbr.c
index 60acec90ab03dba38623041db7f51d9b982c8f07..ce49bee21f9dd21cce5afb21bd46bf98d04cff2c 100644 (file)
@@ -14,8 +14,6 @@
 #include <h/tws.h>
 #include <h/utils.h>
 
-#define MAXSCANL 256           /* longest possible scan line */
-
 /*
  * Buffer size for content part of header fields.  We want this
  * to be large enough so that we don't do a lot of extra FLDPLUS
@@ -68,11 +66,13 @@ scan (FILE *inb, int innum, int outnum, char *nfs, int width, int curflg,
        way the code is now, with callers initializing *scanl to NULL.
        scanl used to be a global. */
     if (! *scanl) {
-       if (width == 0) {
+       if (width == -1) {
+           /* Default:  width of the terminal, but at least WIDTH/2. */
            if ((width = sc_width ()) < WIDTH/2)
                width = WIDTH/2;
-           else if (width > MAXSCANL)
-               width = MAXSCANL;
+       } else if (width == 0) {
+           /* Unlimited width. */
+           width = INT_MAX;
        }
        dat[3] = slwidth = width;
        *scanl = charstring_create (width);
@@ -134,7 +134,9 @@ scan (FILE *inb, int innum, int outnum, char *nfs, int width, int curflg,
        if (used_buf == NULL)
            adios (NULL, "unable to allocate component buffer stack");
        used_buf += ncomps+1; *--used_buf = 0;
-       rlwidth = bodycomp && (width > SBUFSIZ) ? width : SBUFSIZ;
+       rlwidth = bodycomp && (width > SBUFSIZ)
+           ? min (width, NMH_BUFSIZ)
+           : SBUFSIZ;
        for (i = ncomps; i--; )
            *nxtbuf++ = mh_xmalloc(rlwidth);
     }