Hello, Attempting to port abseil source package to the GNU/Hurd I found some weird behaviour in the strerror_r function call when errnum is -1.
#include <stdio.h> #include <string.h> int main(int argc, char **argv) { char buf[100] = {0}; strerror_r(-1, buf, 100); printf("strerror_r: %s\n", buf); return 0; } This is my simplified reproducer. When I run it on Debian GNU/Linux it outputs the following string: strerror_r: Unknown error -1 However, when running in GNU/Hurd, the output is a bit different: strerror_r: Error in unknown error system: FFFFFFFF That difference makes the abseil test suite to produce an error in the following test[1]: TEST(StrErrorTest, InvalidErrorCode) { errno = ERANGE; EXPECT_THAT(absl::base_internal::StrError(-1), AnyOf(Eq("No error information"), Eq("Unknown error -1"))); EXPECT_THAT(errno, Eq(ERANGE)); } The POSIX specification says that an unknown error shall be indicated[2]: [CX] [Option Start] If the value of errnum is a valid error number, the message string shall indicate what error occurred; if the value of errnum is zero, the message string shall either be an empty string or indicate that no error occurred; otherwise, if these functions complete successfully, the message string shall indicate that an unknown error occurred. [Option End] One could argue that the requirement is fullfilled, the message says `unknown error` after all :-) But aligning to what GNU/Linux does would help the porting to be easier. What should we do here? Regards, Diego -- [1] https://github.com/abseil/abseil-cpp/blob/master/absl/base/internal/strerror_test.cc#L41 [2] https://pubs.opengroup.org/onlinepubs/9799919799/functions/strerror.html