]> diplodocus.org Git - nmh/blobdiff - sbr/fmt_scan.c
mhshow: suppress error for undisplayable parts, if they're not wanted
[nmh] / sbr / fmt_scan.c
index 4460c62800def628d1578934c8e5f3fd0c30a41f..e4d79d57d71597eea672c988e3ad8b6d8fdbcae2 100644 (file)
@@ -47,7 +47,6 @@ match (char *str, char *sub)
     int c1, c2;
     char *s1, *s2;
 
-#ifdef LOCALE
     while ((c1 = *sub)) {
        c1 = (isascii((unsigned char) c1) && isalpha((unsigned char) c1) &&
              isupper((unsigned char) c1)) ? tolower((unsigned char) c1) : c1;
@@ -71,19 +70,6 @@ match (char *str, char *sub)
        if (! c1)
            return 1;
     }
-#else
-    while ((c1 = *sub)) {
-       while ((c2 = *str++) && (c1 | 040) != (c2 | 040))
-           ;
-       if (! c2)
-           return 0;
-       s1 = sub + 1; s2 = str;
-       while ((c1 = *s1++) && (c1 | 040) == (*s2++ | 040))
-           ;
-       if (! c1)
-           return 1;
-    }
-#endif
     return 1;
 }
 
@@ -175,11 +161,11 @@ cptrimmed(char **dest, char **ep, char *str, unsigned int wid, char fill,
             * widths, so use the column width to bump the end pointer when
             * appropriate.
             */
-           if (char_len > 1 && epmax - *ep >= char_len - w) {
+           if (w >= 0  &&  char_len > 1 && epmax - *ep >= char_len - w) {
                *ep += char_len - w;
            }
 
-           if (cp + w > *ep)
+           if (w >= 0  &&  cp + w > *ep)
                break;
 
            end -= char_len;
@@ -278,7 +264,7 @@ cpstripped (char **dest, char **end, char *max, char *str)
         * by the number of "extra" bytes in this character.  That's the
         * character length (char_len) minus the column width (w).
         */
-       if (char_len > 1  &&  max - *end >= char_len - w) {
+       if (w >= 0  &&  char_len > 1  &&  max - *end >= char_len - w) {
            *end += char_len - w;
        }
 
@@ -1079,7 +1065,7 @@ fmt_scan (struct format *format, char *scanl, size_t max, int width, int *dat,
               there isn't enough room in the buffer for the entire
               string, skip it completely.  Need room for null
               terminator, and maybe trailing newline (added below). */
-           if (cp - scanl + strlen (str) + 1 < max) {
+           if (str && (cp - scanl + strlen (str) + 1 < max)) {
                for (sp = str; *sp; *cp++ = *sp++) continue;
            }
            if (callbacks && callbacks->trace_func)