X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/4db310433eb20ec95643299b0d14fefaea44b8bd..582d5e802ceb8e0c7f0dc5b83fdbf2a62fc10fb3:/sbr/fmt_scan.c?ds=inline diff --git a/sbr/fmt_scan.c b/sbr/fmt_scan.c index ef3ab1b1..9377b393 100644 --- a/sbr/fmt_scan.c +++ b/sbr/fmt_scan.c @@ -256,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); @@ -297,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); @@ -749,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;