Files
dat-thang/extra/dat-dpi/inc/win_compat.h
T
divorce b735900f2e 0.0.002
ddat interop with dat js
cable interop with cabal js
ddat's frontend = dat-thang
cable fe = cable-thang
dillo support based on cel's dillo-dat
bootstrap node
xplatform support

Signed-off-by: divo <418@cryspace.space>
2026-10-19 00:17:02 -04:00

81 lines
1.9 KiB
C

#ifndef DATGPT_WIN_COMPAT_H
#define DATGPT_WIN_COMPAT_H
/* Small POSIX spellings used by the shared C sources on native Windows. */
#ifdef _WIN32
#include <io.h>
#include <direct.h>
#include <process.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/stat.h>
#include <string.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <windows.h>
#ifndef mkdir
#define mkdir(path, mode) _mkdir(path)
#endif
#ifndef fsync
#define fsync(fd) _commit(fd)
#endif
#ifndef getpid
#define getpid _getpid
#endif
#ifndef O_CLOEXEC
#define O_CLOEXEC 0
#endif
#ifndef O_NOFOLLOW
#define O_NOFOLLOW 0
#endif
#ifndef EKEYREJECTED
#define EKEYREJECTED EACCES
#endif
#ifndef S_ISLNK
#define S_ISLNK(mode) (((mode) & S_IFMT) == S_IFLNK)
#endif
#ifndef S_IFLNK
#define S_IFLNK 0120000
#endif
#ifndef fchmod
#define fchmod(fd, mode) ((void)(fd), (void)(mode), 0)
#endif
#ifndef strcasecmp
#define strcasecmp _stricmp
#endif
#ifndef strncasecmp
#define strncasecmp _strnicmp
#endif
static inline char *dat_win_getenv_compat(const char *name)
{
char *value = getenv(name);
if (!value && name && !strcmp(name, "HOME")) value = getenv("USERPROFILE");
return value;
}
#define getenv dat_win_getenv_compat
static inline int dat_win_lstat(const char *path, struct stat *info)
{
DWORD attributes;
if (stat(path, info)) return -1;
attributes = GetFileAttributesA(path);
if (attributes != INVALID_FILE_ATTRIBUTES && (attributes & FILE_ATTRIBUTE_REPARSE_POINT))
info->st_mode = (info->st_mode & ~S_IFMT) | S_IFLNK;
return 0;
}
#ifndef lstat
#define lstat dat_win_lstat
#endif
static inline int dat_win_readlink(const char *path, char *target, size_t capacity)
{ (void)path; (void)target; (void)capacity; errno = ENOTSUP; return -1; }
static inline int dat_win_symlink(const char *target, const char *path)
{ (void)target; (void)path; errno = ENOTSUP; return -1; }
#ifndef readlink
#define readlink dat_win_readlink
#endif
#ifndef symlink
#define symlink dat_win_symlink
#endif
#endif
#endif