X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/0a032eea07f6d77ac6ea4d5a39c9491c34358058..582d5e802ceb8e0c7f0dc5b83fdbf2a62fc10fb3:/sbr/fmt_scan.c diff --git a/sbr/fmt_scan.c b/sbr/fmt_scan.c index 894d2423..9377b393 100644 --- a/sbr/fmt_scan.c +++ b/sbr/fmt_scan.c @@ -1,5 +1,4 @@ -/* - * fmt_scan.c -- format string interpretation +/* fmt_scan.c -- format string interpretation * * This code is Copyright (c) 2002, by the authors of nmh. See the * COPYRIGHT file in the root directory of the nmh distribution for @@ -257,16 +256,15 @@ cpstripped (charstring_t dest, size_t max, char *str) while (*str != '\0' && len > 0 && max > 0) { #ifdef MULTIBYTE_SUPPORT char_len = mbtowc(&wide_char, str, len); - w = wcwidth(wide_char); /* * If mbrtowc() failed, then we have a character that isn't valid - * in the current encoding. Replace it with a '?'. We do that by + * in the current encoding, or len wasn't enough for the whole + * multi-byte rune to be read. Replace it with a '?'. We do that by * setting the alstr variable to the value of the replacement string; * altstr is used below when the bytes are copied into the output * buffer. */ - if (char_len < 0) { altstr = "?"; char_len = mbtowc(&wide_char, altstr, 1); @@ -298,6 +296,7 @@ cpstripped (charstring_t dest, size_t max, char *str) prevCtrl = 0; #ifdef MULTIBYTE_SUPPORT + w = wcwidth(wide_char); assert(w >= 0); if (max >= (size_t) w) { charstring_push_back_chars (dest, altstr ? altstr : str, char_len, w); @@ -750,13 +749,13 @@ fmt_scan (struct format *format, charstring_t scanlp, int width, int *dat, break; case FT_LV_DIVIDE_L: if (fmt->f_value) - value = value / fmt->f_value; + value /= fmt->f_value; else value = 0; break; case FT_LV_MODULO_L: if (fmt->f_value) - value = value % fmt->f_value; + value %= fmt->f_value; else value = 0; break; @@ -834,7 +833,7 @@ fmt_scan (struct format *format, charstring_t scanlp, int width, int *dat, } break; case FT_LV_ZONEF: - if ((fmt->f_comp->c_tws->tw_flags & TW_SZONE) == TW_SZEXP) + if (fmt->f_comp->c_tws->tw_flags & TW_SZEXP) value = 1; else value = -1;