summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--text-utils/more.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/text-utils/more.c b/text-utils/more.c
index 8c0853c14..a75cd7a80 100644
--- a/text-utils/more.c
+++ b/text-utils/more.c
@@ -1091,6 +1091,16 @@ void clreos(void)
my_putstring(EodClr);
}
+
+static UL_ASAN_BLACKLIST xmbrtowc(wchar_t *wc, const char *s, size_t n,
+ mbstate_t *mbstate)
+{
+ const size_t mblength = mbrtowc(&wc, s, n, &mbstate);
+ if (mblength == (size_t)-2 || mblength == (size_t)-1)
+ return 1;
+ return mblength;
+}
+
/* Print a buffer of n characters */
void prbuf(register char *s, register int n)
{
@@ -1130,10 +1140,7 @@ void prbuf(register char *s, register int n)
memset(&mbstate, '\0', sizeof(mbstate_t));
s--;
n++;
- mblength = mbrtowc(&wc, s, n, &mbstate);
- if (mblength == (size_t)-2
- || mblength == (size_t)-1)
- mblength = 1;
+ mblength = xmbrtowc(&wc, s, n, &mbstate);
while (mblength--)
putchar(*s++);
n += mblength;