Clarify para_strerror().
authorAndre Noll <maan@tuebingen.mpg.de>
Mon, 10 Aug 2015 18:00:49 +0000 (20:00 +0200)
committerAndre Noll <maan@tuebingen.mpg.de>
Sun, 27 Sep 2015 13:25:39 +0000 (13:25 +0000)
commit1fd34762208566dfe2d2e07772e4af088f833a2b
treebd951aeab9ad0e0bd7f0c41826f7873115f66573
parent4f18e922663731106fbc64dcc0583a7b017ac407
Clarify para_strerror().

para_strerror() needs to distinguish three kinds of errors: paraslash
errors, errors from the osl library, and system (libc) errors. This
is achieved through dedicated bits in the error code which are
set for errors from osl and libc function calls. These bits tell
para_strerror() which function to call in order to obtain the text
that corresponds to the error code.

If such a dedicated bit is set, para_strerror() first clears the bit,
then calls the library strerror() function that corresponds to the
bit. The code to clear the bit is

num & ((1 << OSL_ERROR_BIT) - 1))

and similar for libc errors. However, this expression clears *all*
high bits, not only bit number OSL_ERROR_BIT. This is not a problem
since the higher bits are not set under normal circumstances, but it
is better to fix this anyway. The new code is

num & ~(1U << OSL_ERROR_BIT),

which turns off the osl error bit only.
error.h