On 26.07.2016 20:03, Sascha Silbe wrote: > Dear Max, > > Max Reitz <mre...@redhat.com> writes: > >> We don't guarantee that error_setg_errno() does not modify errno. (In >> practice it should not, but we don't guarantee that.) > > I agree it's a good general policy to _not_ rely on the callee > explicitly saving and restoring errno. Especially since C11 pretty much > allows any "library function" (including e.g. va_start()) to clobber > errno... > > In the case of error_setg_errno() it would be helpful to mention that in > the API docs. The current implementation goes out of its way to preserve > errno, so callers might come to rely on it. > > So how about: > > /* > * Just like error_setg(), with @os_error info added to the message. > * If @os_error is non-zero, ": " + strerror(os_error) is appended to > * the human-readable error message. > + * > + * Reminder: errno may get clobbered by almost any function call. If > + * you need the value of errno for another purpose, save it before > + * invoking error_setg_errno() (or any other function for that > + * matter). > */ > #define error_setg_errno(errp, os_error, fmt, ...) \ > error_setg_errno_internal((errp), __FILE__, __LINE__, __func__, \ > (os_error), (fmt), ## __VA_ARGS__) > > (I can prepare a proper patch if you agree with the above.)
Thanks, that sounds good to me. Max
signature.asc
Description: OpenPGP digital signature