Hi,
POSIX [1] requires that the error messages from perror and strerror for
the same error number are the same:
"The contents of the error message strings shall be the same as those
returned by strerror() with argument errno."
On glibc/Linux this is fulfilled. On glibc/Hurd this is not true for negative
error numbers.
How to reproduce:
=================================== foo.c ===================================
#define _GNU_SOURCE 1
#include <errno.h>
#include <stdio.h>
#include <string.h>
int main ()
{
int errnum = -3;
printf ("strerror -> %s\n", strerror (errnum));
char buf[80];
strerror_r (errnum, buf, sizeof buf);
printf ("strerror_r -> %s\n", buf);
errno = errnum;
perror("perror");
}
=============================================================================
$ gcc -Wall foo.c
$ ./a.out
strerror -> Error in unknown error system: FFFFFFFD
strerror_r -> Error in unknown error system: : -3
perror: Error in unknown error system: : -3
Note the two differences:
- decimal vs. hexadecimal output,
- an extra ": " in the decimal case.
Seen on Debian GNU/Hurd, with glibc 2.34.
Bruno
[1] https://pubs.opengroup.org/onlinepubs/9699919799/functions/perror.html