[libvirt] [PATCH 1/3] Preserve errno across calls to error reporting functions

Laine Stump laine at laine.org
Thu Dec 23 21:51:00 UTC 2010


On 12/23/2010 02:30 PM, Eric Blake wrote:
> On 12/23/2010 11:39 AM, Laine Stump wrote:
>> There are cases when we want log an error message while still
>> preserving errno for a caller, but the functions that log errors make
>> system calls that will clear errno. This patch preserves errno during
>> those most basic error logging functions (corresponding to
>> virReportSystemError(), virReportOOMError(), networkReportError(),
>> etc, as well as virStrError()). It does *not preserve errno across
>> calls to higher level items such as virDispatchError(), as it's
>> assumed the caller is all finished with any need for errno by the time
>> it dispatches the error.
>>   const char *virStrerror(int theerrno, char *errBuf, size_t errBufLen)
>>   {
>> +    int save_errno = errno;
>> +    const char *ret;
>> +
>>   #ifdef HAVE_STRERROR_R
>>   # ifdef __USE_GNU
>>       /* Annoying linux specific API contract */
>> -    return strerror_r(theerrno, errBuf, errBufLen);
>> +    ret = strerror_r(theerrno, errBuf, errBufLen);
>>   # else
>>       strerror_r(theerrno, errBuf, errBufLen);
>> -    return errBuf;
>> +    ret = errBuf;
>>   # endif
>>   #else
>>       /* Mingw lacks strerror_r and its strerror is definitely not
> Ah, but gnulib now provides the LGPLv2+ strerror_r-posix module, which
> not only provides strerror_r on mingw, but also sanitizes the Linux
> interface into the POSIX compatible interface, so that we could use it
> to simplify the code.  But that's a patch for another day.
>
> ACK as-is.
>

I squashed in a bit of code to preserve errno during VIR_FREE (virFree) 
as you suggested in the review of patch 3/3 and pushed the result.

Thanks!




More information about the libvir-list mailing list