bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: vasnprintf does not preserve anymore errno


From: Bruno Haible
Subject: Re: vasnprintf does not preserve anymore errno
Date: Fri, 15 Oct 2010 02:04:53 +0200
User-agent: KMail/1.9.9

Hi,

Gianluigi Tiesi wrote:
>   some time ago a change was added to vasnprintf, right now the line is:
> 4958 in vasnprintf.c
> 
> errno = 0
> 
> but it's never saved before, so I lose errno

Indeed, POSIX says in
<http://www.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_03>
"No function in this volume of POSIX.1-2008 shall set errno to zero." So,
vasnprintf should also avoid to set errno to 0 without saving and restoring it.
I'm applying this fix:


2010-10-14  Bruno Haible  <address@hidden>

        vasnprintf: Don't set errno to 0.
        * lib/vasnprintf.c (VASNPRINTF): Save and restore errno around the
        block that sets it to 0.
        Reported by Gianluigi Tiesi <address@hidden>.

--- lib/vasnprintf.c.orig       Fri Oct 15 02:00:19 2010
+++ lib/vasnprintf.c    Fri Oct 15 01:57:02 2010
@@ -4599,6 +4599,7 @@
                 TCHAR_T *fbp;
                 unsigned int prefix_count;
                 int prefixes[2] IF_LINT (= { 0 });
+                int orig_errno;
 #if !USE_SNPRINTF
                 size_t tmp_length;
                 TCHAR_T tmpbuf[700];
@@ -4902,6 +4903,8 @@
                 *(TCHAR_T *) (result + length) = '\0';
 #endif
 
+                orig_errno = errno;
+
                 for (;;)
                   {
                     int count = -1;
@@ -5499,6 +5502,7 @@
                     length += count;
                     break;
                   }
+                errno = orig_errno;
 #undef pad_ourselves
 #undef prec_ourselves
               }



reply via email to

[Prev in Thread] Current Thread [Next in Thread]