X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;ds=sidebyside;f=libs%2Fwatt32%2Fsys%2Fwerrno.h;fp=libs%2Fwatt32%2Fsys%2Fwerrno.h;h=34c06fc3921a212b540020993a82a0a683cae479;hb=214a070238552de6167bbf506cbc23006969a182;hp=0000000000000000000000000000000000000000;hpb=d3c8a942b99443abf0c11d9759994022ed6da597;p=oftp diff --git a/libs/watt32/sys/werrno.h b/libs/watt32/sys/werrno.h new file mode 100644 index 0000000..34c06fc --- /dev/null +++ b/libs/watt32/sys/werrno.h @@ -0,0 +1,141 @@ +/*!\file sys/werrno.h + * + * sys_errlist[] and errno's for compilers with limited errnos. + * For WIN32, we do NOT use the WSAE* codes. + * + * G. Vanem 1998 - 2004 + */ + +#ifndef __SYS_WERRNO_H +#define __SYS_WERRNO_H + +/* When doing "gcc -MM" with gcc 3.0 we must include + * (via stdio.h) in order for __DJGPP__ to be defined + */ +#include +#include + +#ifndef __SYS_W32API_H +#include +#endif + +/* Hack: fix for compiling with djgpp 2.04, but + * ./util/dj_err.exe was compiled with 2.03 + */ +#if defined(MIXING_DJGPP_203_AND_204) +#undef ELOOP +#endif + +#if defined(__MINGW32__) + #include + +#elif defined(__HIGHC__) + #undef EDEADLK + #undef EDEADLOCK + #include + +#elif defined(__BORLANDC__) + #ifdef __FLAT__ + #undef ENAMETOOLONG /* bcc32 4.0 */ + #endif + #ifdef _WIN32 + #undef ENOTEMPTY + #endif + #include + +#elif defined(__TURBOC__) + #include + +#elif defined(__WATCOMC__) + #include + +#elif defined(__DJGPP__) + #include + +#elif defined(__DMC__) /* Digital Mars Compiler */ + #include + +#elif defined(_MSC_VER) && (_MSC_VER <= 800) /* MSC 8.0 or older */ + #include + +#elif defined(_MSC_VER) && (_MSC_VER > 800) /* Visual C on Windows */ + #undef EDEADLOCK + #include + +#elif defined(__CCDL__) /* LadSoft's cc386.exe */ + #include + +#elif defined(__LCC__) + #include + +#elif defined(__POCC__) + #include + +#else + #error Unknown target in . +#endif + +/* + * Ugly hack ahead. Someone tell me a better way, but + * errno and friends are macros on Windows. Redefine them + * to point to our variables. + * + * On Windows, the usual 'errno' is a macro "(*_errno)()" that + * is problematic to use as a lvalue. + * On other platforms we modify the global 'errno' variable directly. + * (see SOCK_ERRNO() in misc.h). So no need to redefine it in any way. + */ + +W32_DATA int _w32_errno; +W32_DATA int _w32_sys_nerr; +W32_DATA char *_w32_sys_errlist[]; + +#if 0 + #undef sys_nerr + #define sys_nerr _w32_sys_nerr + + #undef _sys_nerr + #define _sys_nerr _w32_sys_nerr + + #undef __sys_nerr + #define __sys_nerr _w32_sys_nerr + + #undef sys_errlist + #define sys_errlist _w32_sys_errlist + + #undef _sys_errlist + #define _sys_errlist _w32_sys_errlist + + #undef __sys_errlist + #define __sys_errlist _w32_sys_errlist +#endif + +/* + * Incase you have trouble with duplicate defined symbols, + * make sure the "*_s()" versions are referenced before normal + * perror() and strerror() in your C-library. + */ +W32_FUNC void perror_s (const char *str); +W32_FUNC char *strerror_s (int errnum); + +#if defined(__cplusplus) /* Damn C++ */ + #include + #include + +#elif !defined(_MSC_VER) && !defined(WIN32) + #if !defined(_INC_STDLIB) && !defined(_STDLIB_H_) && !defined(_STDIO_H) + W32_FUNC void perror (const char *str); + #endif + + #if !defined(_INC_STRING) && !defined(_STRING_H) && !defined(_STRING_H_) + W32_FUNC char *strerror (int errnum); + #endif +#endif + +#if defined(WIN32) || defined(_WIN32) + W32_FUNC int __stdcall WSAGetLastError (void); + W32_FUNC void __stdcall WSASetLastError (int err); +#endif + +#endif /* __SYS_WERRNO_H */ +