"errno" is a macro and cannot be used as a normal variable or member name. You may run into problems with this in newer glibc versions on linux, too. Definitely with pthreads.
The 1989 ANSI C standard, and all relevant standards since, specify "errno" as a reserved word that you cannot use except for the global "modifiable lvalue" declared in <errno.h>. In practice, the macros are always written so that "extern int errno;" still works without complaint. But you cannot use the name "errno" in local scopes.

