0ad/source/lib/sysdep/win/wposix/wposix.h

49 lines
1.7 KiB
C
Raw Normal View History

/**
* =========================================================================
* File : wposix.h
* Project : 0 A.D.
* Description : emulate a subset of POSIX on Win32.
* =========================================================================
*/
// license: GPL; see lib/license.txt
#ifndef INCLUDED_WPOSIX
#define INCLUDED_WPOSIX
/**
* rationale: the Windows headers declare many POSIX functions (e.g. read).
* unfortunately, these are often slightly incorrect (size_t vs. uint).
* to avert trouble in user code caused by these differences, we declare
* all functions ourselves according to SUSv3 and do not use the headers.
*
* however, it does not end there. some other libraries (e.g. wxWidgets)
* will want to pull in these headers, which would conflict with our
* declarations. also, our implementation uses the actual CRT code,
* so we want those functions (e.g. _read) to be declared correctly even
* if switching compiler/CRT version.
*
* how can these conflicting requirements be reconciled? our headers #include
* "no_crt_posix.h" to #define the CRT headers' include guards and thus
* prevent them from declaring anything. the implementation files #include
* "crt_posix.h", which pulls in the CRT headers (even if "no_crt_posix.h"
* was previously included, e.g. in the PCH). note that the CRT headers
* would still cause conflicts with the POSIX function declarations,
* but we are able to prevent this via __STDC__.
**/
// misc routines
extern char* getcwd(char*, size_t);
// user tests if available via #ifdef; can't use enum.
#define _SC_PAGESIZE 1
#define _SC_PAGE_SIZE 1
#define _SC_PHYS_PAGES 2
#define _SC_AVPHYS_PAGES 3
extern long sysconf(int name);
#endif // #ifndef INCLUDED_WPOSIX