146 lines
3.7 KiB
C
146 lines
3.7 KiB
C
|
|
||
|
#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 */
|