#ifndef INCLUDE_WINCE_COMPAT_H #define INCLUDE_WINCE_COMPAT_H #ifdef __cplusplus extern "C" { #endif /*** ANSI C library ***/ /* Missing ANSI C definitions */ #define BUFSIZ 4096 #define ENOMEM ERROR_NOT_ENOUGH_MEMORY #define EBADF ERROR_INVALID_HANDLE #define EINVAL ERROR_INVALID_PARAMETER #define ENOENT ERROR_FILE_NOT_FOUND #define ERANGE ERROR_INSUFFICIENT_BUFFER #define EINTR WSAEINTR /* * Because we need a per-thread errno, we define a function * pointer that we can call to return a pointer to the errno * for the current thread. Then we define a macro for errno * that dereferences this function's result. * * This makes it syntactically just like the "real" errno. * * Using a function pointer allows us to use a very fast * function when there are no threads running and a slower * function when there are multiple threads running. */ void __WinCE_Errno_New_Thread(int *Errno_Pointer); void __WinCE_Errno_Thread_Exit(void); extern int *(*__WinCE_Errno_Pointer_Function)(void); #define errno (*(*__WinCE_Errno_Pointer_Function)()) char *strerror(int errnum); struct tm { int tm_sec; /* seconds after the minute - [0,59] */ int tm_min; /* minutes after the hour - [0,59] */ int tm_hour; /* hours since midnight - [0,23] */ int tm_mday; /* day of the month - [1,31] */ int tm_mon; /* months since January - [0,11] */ int tm_year; /* years since 1900 */ int tm_wday; /* days since Sunday - [0,6] */ int tm_yday; /* days since January 1 - [0,365] */ int tm_isdst; /* daylight savings time flag */ }; struct tm *gmtime(const time_t *TimeP); /* for future use */ struct tm *localtime(const time_t *TimeP); time_t mktime(struct tm *tm); time_t time(time_t *TimeP); size_t strftime(char *s, size_t maxsize, const char *format, const struct tm *tim_p); int _wrename(const wchar_t *oldname, const wchar_t *newname); int _wremove(const wchar_t *filename); /* Environment variables are not supported */ #define getenv(x) (NULL) /* Redefine fileno so that it returns an integer */ #undef fileno #define fileno(f) (int)_fileno(f) /* Signals are not supported */ #define signal(num, handler) (0) #define SIGTERM 0 #define SIGINT 0 /*** POSIX API ***/ /* Missing POSIX definitions */ #define FILENAME_MAX MAX_PATH struct _stat { unsigned long st_size; unsigned long st_ino; int st_mode; unsigned long st_atime; unsigned long st_mtime; unsigned long st_ctime; unsigned short st_dev; unsigned short st_nlink; unsigned short st_uid; unsigned short st_gid; }; #define S_IFMT 0170000 #define S_IFDIR 0040000 #define S_IFREG 0100000 #define S_IEXEC 0000100 #define S_IWRITE 0000200 #define S_IREAD 0000400 #define _S_IFDIR S_IFDIR /* MSVCRT compatibilit */ int _fstat(int handle, struct _stat *buffer); int _wstat(const wchar_t *path, struct _stat *buffer); #define stat _stat /* NOTE: applies to _stat() and also struct _stat */ #define fstat _fstat #define O_RDWR (1<<0) #define O_RDONLY (2<<0) #define O_WRONLY (3<<0) #define O_MODE_MASK (3<<0) #define O_TRUNC (1<<2) #define O_EXCL (1<<3) #define O_CREAT (1<<4) #define O_BINARY 0 int _wopen(const wchar_t *filename, int oflag, ...); int _close(int handle); int _write(int handle, const void *buffer, unsigned int count); int _read(int handle, void *buffer, unsigned int count); long _lseek(int handle, long offset, int origin); #define close _close #define write _write #define read _read #define lseek _lseek /* WinCE has only a Unicode version of this function */ FILE *fdopen(int handle, const char *mode); int _wmkdir(const wchar_t *dirname); /* WinCE has no concept of current directory so we return a constant path */ wchar_t *_wgetcwd(wchar_t *buffer, int maxlen); #define freopen(path, mode, stream) assert(0) #ifdef __cplusplus } #endif #endif /* INCLUDE_WINCE_COMPAT_H */