On errno
Tim Kientzle
kientzle at freebsd.org
Mon Mar 30 12:13:53 PDT 2009
Poul-Henning Kamp wrote:
> In message <8321954E-5CFF-45F9-9F87-BE83659E4C8D at mac.com>, Marcel Moolenaar wri
> tes:
>
>> With so many drivers returning ENXIO whenever something (i.e
>> anything) is wrong, how meaningful is ENXIO in diagnosing
>> problems?
>>
>> What do the various standards dictate or allow us to do?
POSIX does specify the range of allowable error codes
for a lot of system calls, but not all. In my experience,
straying outside of that causes more problems than it's
worth. A lot of programs make error-recovery decisions
based on errno values and that can get to be a portability
headache rather quickly (remember that for most software,
the default is going to be "if you don't recognize the errno
value, exit with a fatal error.")
> Long time ago, I proposed a scheme where a process can register
> a userland error-text buffer with the kernel.
>
> Whenever a system call returns with error, the kernel has the
> opportunity to write an explanatory text in the registered
> buffer (if there is one).
>
> That is not only backwards and standards compatible, but it is also
> much more expressive than errno.
>
> If we start with teaching err(3) function about it, we even get
> a lot of coverage right away.
This is the right direction: Basically, add a new variable
that augments errno instead of extending the possible values of
errno. One variation, though: I would argue for another
integer variable (errno_fine?) so that translations can be
done in userland (instead of having to deal with I18N in
the kernel) but the principle is still sound.
Tim
More information about the freebsd-arch
mailing list