blob: d7679c53f85601b86343e6dfd56ad88f03be118f [file] [log] [blame]
Jan Kundrát049729d2021-12-09 17:42:43 +01001#ifndef _UNISTD_H
2#define _UNISTD_H 1
3
Jan Kundráta3d248e2021-12-14 18:05:26 +01004/* headers are broken on Windows, which means that some of them simply *have* to come first */
5# include <winsock2.h>
6# include <ws2tcpip.h>
7
Jan Kundrát049729d2021-12-09 17:42:43 +01008/* This is intended as a drop-in replacement for unistd.h on Windows.
9 * Please add functionality as neeeded.
10 * https://stackoverflow.com/a/826027/1202830
11 */
12
13#include <stdlib.h>
14#include <io.h>
15#include <process.h> /* for getpid() and the exec..() family */
16#include <direct.h> /* for _getcwd() and _chdir() */
17
18#define srandom srand
19#define random rand
20
21/* Values for the second argument to access.
22 These may be OR'd together. */
23#define R_OK 4 /* Test for read permission. */
24#define W_OK 2 /* Test for write permission. */
Jan Kundrát4bcc96f2021-12-09 22:31:18 +010025#define X_OK 0 /* jkt: unsupported on Windows, so we don't really care */
Jan Kundrát049729d2021-12-09 17:42:43 +010026#define F_OK 0 /* Test for existence. */
27
28#define access _access
29#define dup2 _dup2
30#define execve _execve
31#define ftruncate _chsize
32#define unlink _unlink
33#define fileno _fileno
34#define getcwd _getcwd
35#define chdir _chdir
36#define isatty _isatty
37#define lseek _lseek
Jan Kundrát32b5a882021-12-10 16:14:13 +010038#define fsync _commit
Jan Kundrát1d050e52021-12-10 16:29:19 +010039#define timegm _mkgmtime
Jan Kundrát049729d2021-12-09 17:42:43 +010040/* read, write, and close are NOT being #defined here, because while there are file handle specific versions for Windows, they probably don't work for sockets. You need to look at your app and consider whether to call e.g. closesocket(). */
41
Jan Kundrátc2b2f082022-06-14 15:23:12 +020042#define ssize_t SSIZE_T
Jan Kundrát049729d2021-12-09 17:42:43 +010043
44#define STDIN_FILENO 0
45#define STDOUT_FILENO 1
46#define STDERR_FILENO 2
47/* should be in some equivalent to <sys/types.h> */
48typedef __int8 int8_t;
49typedef __int16 int16_t;
50typedef __int32 int32_t;
51typedef __int64 int64_t;
52typedef unsigned __int8 uint8_t;
53typedef unsigned __int16 uint16_t;
54typedef unsigned __int32 uint32_t;
55typedef unsigned __int64 uint64_t;
56
Jan Kundráte3d33552021-12-09 23:34:59 +010057#include <windows.h>
58#ifndef PATH_MAX
59#define PATH_MAX MAX_PATH
60#endif
61#ifndef _POSIX_PATH_MAX
62#define _POSIX_PATH_MAX 256
63#endif
64
Jan Kundrát73aa07a2021-12-10 16:03:58 +010065#ifndef S_ISREG
66# define S_ISREG(m) (((m) & _S_IFMT) == _S_IFREG)
67#endif
68#ifndef S_ISDIR
69# define S_ISDIR(m) (((m) & _S_IFMT) == _S_IFDIR)
70#endif
71#ifndef S_IRUSR
72# define S_IRUSR _S_IREAD
73#endif
74#ifndef S_IWUSR
75# define S_IWUSR _S_IWRITE
76#endif
77
Jan Kundrát049729d2021-12-09 17:42:43 +010078#endif /* unistd.h */