On Tue, Feb 21, 2006 at 06:23:21AM +0000, Brian M. Carlson wrote: > > (void *)strerror(error_code); > > Not thread safe.
Then use strerror_r(). > Also, this code does not check that it is a *POSIX* > error code. If you check the Linux sources, you can see that there are > many error codes (mostly for NFS) that are not standard, and therefore > are invalid for my program. Let's check. EBADHANDLE is 521 (fwiw, it is not #defined unless __KERNEL__ is defined, which should not be the case for user-space programs): /* We want the SUSv3 version of strerror_r(), not the GNU one */ #define _XOPEN_SOURCE 600 #include <errno.h> #include <string.h> #include <stdio.h> int main(void) { errno = 0; strerror_r(EINVAL, NULL, 0); printf("%d %s\n", errno, strerror(errno)); errno = 0; strerror_r(521, NULL, 0); printf("%d %s\n", errno, strerror(errno)); return 0; } This gives: 34 Numerical result out of range 22 Invalid argument > I have a patch > forthcoming which mitigates the damage and allows people that really > want standards compliance to indicate so. SUSv3 clearly defines how an application should indicate that it desires standard compliance. By introducing a different schema you are actually _breaking_ standard compliance here. Gabor -- --------------------------------------------------------- MTA SZTAKI Computer and Automation Research Institute Hungarian Academy of Sciences --------------------------------------------------------- -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]