Max Reitz <mre...@redhat.com> writes: > On 26.07.2016 19:18, Halil Pasic wrote: >> >> >> On 07/26/2016 05:42 PM, Max Reitz wrote: >>>> +++ b/block/raw-posix.c >>>>> @@ -485,6 +485,7 @@ static int raw_open_common(BlockDriverState *bs, >>>>> QDict *options, >>>>> s->fd = -1; >>>>> fd = qemu_open(filename, s->open_flags, 0644); >>>>> if (fd < 0) { >>>>> + error_setg_errno(errp, errno, "Could not open file"); >>> We don't guarantee that error_setg_errno() does not modify errno. (In >>> practice it should not, but we don't guarantee that.) >>> >> >> >> Thank you very much for your review. I have double checked, and I >> remembered correctly: error_setg_errno saves and restores the original >> errno, so that is why I assumed it does not. > > Oh, and about this: Yes, I remember, this was introduced after we had > noticed that we had some old code that assumed that error_setg() would > not modify errno. We had to decide between making error_setg*() save and > restore errno (which we deemed a bit ugly) and fixing all of that old > code (which we deemed hard). So we want for the former, but I don't > think we actually guarantee that behavior (because you should never rely > on any function not to modify errno).
Since we rely on this behavior, we should definitely spell it out in the function contract. > (The difference between us saving/restoring errno in practice and > guaranteeing that feature is the lack of documentation thereof, i.e., > the comment for error_setg() in include/qapi/error.h doesn't mention > this :-)) Let's fix it.