summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>2002-11-21 08:47:44 +0000
committerJim Meyering <jim@meyering.net>2002-11-21 08:47:44 +0000
commit449872c53a89ded7f22d6dd73e22639d73f3e38b (patch)
tree8616adac13b67e2522204ec68dfbd451c5da23f1 /lib
parent9e96a0b09cd5aad5a4aefe7e381c139b7f4093a7 (diff)
downloadcoreutils-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.c4
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)