PATCH 4/6: fix multibyte error reporting in zparseopts

Mikael Magnusson <[email protected]>
Newsgroups gmane.comp.shells.zsh.devel
Message-ID <[email protected]>
This one is complicated by the fact it's using fprintf. If the user
passed a nonprintable char as an option, we shouldn't print that, which
nicechar handles for us.

Fixes 54077.

---

It would be great if there was some kind of generic MB_NICECHAR or so,
but there isn't (stay tuned for PATCH 5/6 coming up in your mailbox).

 Src/Modules/zutil.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/Src/Modules/zutil.c b/Src/Modules/zutil.c
index add0554600..0bc340dc90 100644
--- a/Src/Modules/zutil.c
+++ b/Src/Modules/zutil.c
@@ -1988,10 +1988,19 @@ bin_zparseopts(char *nam, char **args, Options ops, UNUSED(int func))
 	    while (*++o) {
 		if (!(d = sopts[(unsigned char) *o])) {
 		    if (fail) {
-			if (*o != '-' || o > *pp + 1)
-			    fprintf(stderr, "%s: bad option: -%c\n", progname, *o);
-			else
+			if (*o != '-' || o > *pp + 1) {
+			    convchar_t wc = unmeta_one(o, NULL);
+			    fprintf(stderr, "%s: bad option: -", progname);
+#ifdef MULTIBYTE_SUPPORT
+			    mb_charinit();
+			    zputs(wcs_nicechar(wc, NULL, NULL), stderr);
+#else
+			    zputs(nicechar(wc), stderr);
+#endif
+			    fputc('\n', stderr);
+			} else {
 			    fprintf(stderr, "%s: bad option: -%s\n", progname, o);
+			}
 			return 1;
 		    }
 		    o = NULL;
-- 
2.38.1
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.