diff options
author | Jim Meyering <jim@meyering.net> | 2002-11-21 08:47:44 +0000 |
---|---|---|
committer | Jim Meyering <jim@meyering.net> | 2002-11-21 08:47:44 +0000 |
commit | 449872c53a89ded7f22d6dd73e22639d73f3e38b (patch) | |
tree | 8616adac13b67e2522204ec68dfbd451c5da23f1 /lib | |
parent | 9e96a0b09cd5aad5a4aefe7e381c139b7f4093a7 (diff) | |
download | coreutils-449872c53a89ded7f22d6dd73e22639d73f3e38b.tar.xz |
(quotearg_buffer_restyled): If mbrtowc returns
`(size_t) -1' (at which point it would also set errno to EILSEQ),
then restore errno to its previous value.
Reported by Phillip Jones via Tim Waugh as
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=76334.
Diffstat (limited to 'lib')
-rw-r--r-- | lib/quotearg.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/lib/quotearg.c b/lib/quotearg.c index 9d4395659..5e7e01184 100644 --- a/lib/quotearg.c +++ b/lib/quotearg.c @@ -443,6 +443,8 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize, do { wchar_t w; + /* Be careful not to let mbrtowc change errno. */ + int saved_errno = errno; size_t bytes = mbrtowc (&w, &arg[i + m], argsize - (i + m), &mbstate); if (bytes == 0) @@ -450,6 +452,8 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize, else if (bytes == (size_t) -1) { printable = 0; + /* Restore previous errno value. */ + errno = saved_errno; break; } else if (bytes == (size_t) -2) |