(quotearg_buffer_restyled): If mbrtowc returns
authorJim Meyering <jim@meyering.net>
Thu, 21 Nov 2002 08:47:44 +0000 (08:47 +0000)
committerJim Meyering <jim@meyering.net>
Thu, 21 Nov 2002 08:47:44 +0000 (08:47 +0000)
`(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.

lib/quotearg.c

index 9d43956..5e7e011 100644 (file)
@@ -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)