blob: c739299f76d402c0a9b569db8e94bf4243618af8 [file] [log] [blame]
Jan Kundrát049729d2021-12-09 17:42:43 +01001#ifndef _UNISTD_H
2#define _UNISTD_H 1
3
4/* This is intended as a drop-in replacement for unistd.h on Windows.
5 * Please add functionality as neeeded.
6 * https://stackoverflow.com/a/826027/1202830
7 */
8
9#include <stdlib.h>
10#include <io.h>
11#include <process.h> /* for getpid() and the exec..() family */
12#include <direct.h> /* for _getcwd() and _chdir() */
13
14#define srandom srand
15#define random rand
16
17/* Values for the second argument to access.
18 These may be OR'd together. */
19#define R_OK 4 /* Test for read permission. */
20#define W_OK 2 /* Test for write permission. */
Jan Kundrát4bcc96f2021-12-09 22:31:18 +010021#define X_OK 0 /* jkt: unsupported on Windows, so we don't really care */
Jan Kundrát049729d2021-12-09 17:42:43 +010022#define F_OK 0 /* Test for existence. */
23
24#define access _access
25#define dup2 _dup2
26#define execve _execve
27#define ftruncate _chsize
28#define unlink _unlink
29#define fileno _fileno
30#define getcwd _getcwd
31#define chdir _chdir
32#define isatty _isatty
33#define lseek _lseek
Jan Kundrát32b5a882021-12-10 16:14:13 +010034#define fsync _commit
Jan Kundrát049729d2021-12-09 17:42:43 +010035/* 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(). */
36
37#ifdef _WIN64
38#define ssize_t __int64
39#else
40#define ssize_t long
41#endif
42
43#define STDIN_FILENO 0
44#define STDOUT_FILENO 1
45#define STDERR_FILENO 2
46/* should be in some equivalent to <sys/types.h> */
47typedef __int8 int8_t;
48typedef __int16 int16_t;
49typedef __int32 int32_t;
50typedef __int64 int64_t;
51typedef unsigned __int8 uint8_t;
52typedef unsigned __int16 uint16_t;
53typedef unsigned __int32 uint32_t;
54typedef unsigned __int64 uint64_t;
55
Jan Kundráte3d33552021-12-09 23:34:59 +010056#include <windows.h>
57#ifndef PATH_MAX
58#define PATH_MAX MAX_PATH
59#endif
60#ifndef _POSIX_PATH_MAX
61#define _POSIX_PATH_MAX 256
62#endif
63
Jan Kundrát73aa07a2021-12-10 16:03:58 +010064#ifndef S_ISREG
65# define S_ISREG(m) (((m) & _S_IFMT) == _S_IFREG)
66#endif
67#ifndef S_ISDIR
68# define S_ISDIR(m) (((m) & _S_IFMT) == _S_IFDIR)
69#endif
70#ifndef S_IRUSR
71# define S_IRUSR _S_IREAD
72#endif
73#ifndef S_IWUSR
74# define S_IWUSR _S_IWRITE
75#endif
76
Jan Kundrát049729d2021-12-09 17:42:43 +010077#endif /* unistd.h */