Module Name: src Committed By: uwe Date: Sun Jul 28 00:15:38 UTC 2019
Modified Files: src/lib/libcurses: slk.c Log Message: __slk_set - fix calculating "len" for HAVE_WCHAR To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/lib/libcurses/slk.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/lib/libcurses/slk.c diff -u src/lib/libcurses/slk.c:1.6 src/lib/libcurses/slk.c:1.7 --- src/lib/libcurses/slk.c:1.6 Sat Jul 27 00:58:34 2019 +++ src/lib/libcurses/slk.c Sun Jul 28 00:15:38 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: slk.c,v 1.6 2019/07/27 00:58:34 uwe Exp $ */ +/* $NetBSD: slk.c,v 1.7 2019/07/28 00:15:38 uwe Exp $ */ /*- * Copyright (c) 2017 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: slk.c,v 1.6 2019/07/27 00:58:34 uwe Exp $"); +__RCSID("$NetBSD: slk.c,v 1.7 2019/07/28 00:15:38 uwe Exp $"); #endif /* not lint */ #include <ctype.h> @@ -496,21 +496,21 @@ __slk_set(SCREEN *screen, int labnum, co end = label; #ifdef HAVE_WCHAR - len = 0; + size_t endlen = strlen(end); while (*end != '\0') { - if ((wc_len = mbrtowc(0, end, strlen(end), &screen->sp)) == -1) + wc_len = mbrtowc(&wc, end, endlen, &screen->sp); + if ((ssize_t)wc_len < 0) return ERR; - mbrtowc(&wc, end, wc_len, &screen->sp); if (!iswprint((wint_t)wc)) break; - len += wcwidth(wc); end += wc_len; + endlen -= wc_len; } #else while(isprint((unsigned char)*end)) end++; - len = end - label; #endif + len = end - label; /* Take a backup, in-case we can grow the label. */ if ((text = strndup(label, len)) == NULL)