summaryrefslogtreecommitdiffstats
path: root/src/kmk/kmkbuiltin/mscfakes.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/kmk/kmkbuiltin/mscfakes.h')
-rw-r--r--src/kmk/kmkbuiltin/mscfakes.h183
1 files changed, 183 insertions, 0 deletions
diff --git a/src/kmk/kmkbuiltin/mscfakes.h b/src/kmk/kmkbuiltin/mscfakes.h
new file mode 100644
index 0000000..95f76b2
--- /dev/null
+++ b/src/kmk/kmkbuiltin/mscfakes.h
@@ -0,0 +1,183 @@
+/* $Id: mscfakes.h 3213 2018-03-30 21:03:28Z bird $ */
+/** @file
+ * Unix fakes for MSC.
+ */
+
+/*
+ * Copyright (c) 2005-2010 knut st. osmundsen <bird-kBuild-spamx@anduin.net>
+ *
+ * This file is part of kBuild.
+ *
+ * kBuild is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * kBuild is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with kBuild. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+#ifndef ___mscfakes_h
+#define ___mscfakes_h
+#ifdef _MSC_VER
+
+#define timeval windows_timeval
+
+/* Include the config file (kmk's) so we don't need to duplicate stuff from it here. */
+#include "config.h"
+
+#include <io.h>
+#include <direct.h>
+#include <time.h>
+#include <stdarg.h>
+#include <malloc.h>
+#ifndef FAKES_NO_GETOPT_H
+# include "getopt.h"
+#endif
+#ifndef MSCFAKES_NO_WINDOWS_H
+# include <Windows.h>
+#endif
+
+#include <sys/stat.h>
+#include <io.h>
+#include <direct.h>
+#include "nt/ntstat.h"
+#include "nt/ntunlink.h"
+#ifdef MSC_DO_64_BIT_IO
+# if _MSC_VER >= 1400 /* We want 64-bit file lengths here when possible. */
+# define off_t __int64
+# define lseek _lseeki64
+# endif
+#endif
+
+#undef timeval
+
+#undef PATH_MAX
+#define PATH_MAX _MAX_PATH
+#undef MAXPATHLEN
+#define MAXPATHLEN _MAX_PATH
+
+#define EX_OK 0
+#define EX_OSERR 1
+#define EX_NOUSER 1
+#define EX_USAGE 1
+
+#define STDIN_FILENO 0
+#define STDOUT_FILENO 1
+#define STDERR_FILENO 2
+
+#define F_OK 0
+#define X_OK 1
+#define W_OK 2
+#define R_OK 4
+
+#define EFTYPE EINVAL
+
+#define _PATH_DEVNULL "/dev/null"
+
+#ifndef MAX
+# define MAX(a,b) ((a) >= (b) ? (a) : (b))
+#endif
+
+typedef int mode_t;
+typedef unsigned short nlink_t;
+#if 0 /* found in config.h */
+typedef unsigned short uid_t;
+typedef unsigned short gid_t;
+#endif
+typedef intptr_t ssize_t;
+typedef unsigned long u_long;
+typedef unsigned int u_int;
+typedef unsigned short u_short;
+
+#if _MSC_VER >= 1600
+# include <stdint.h>
+#else
+typedef unsigned char uint8_t;
+typedef unsigned short uint16_t;
+typedef unsigned int uint32_t;
+typedef signed char int8_t;
+typedef signed short int16_t;
+typedef signed int int32_t;
+#endif
+
+struct msc_timeval
+{
+ __time64_t tv_sec;
+ long tv_usec;
+};
+#define timeval msc_timeval
+
+struct iovec
+{
+ char *iov_base;
+ size_t iov_len;
+};
+
+typedef __int64 intmax_t;
+#if 0 /* found in config.h */
+typedef unsigned __int64 uintmax_t;
+#endif
+
+#define chown(path, uid, gid) 0 /** @todo implement fchmod! */
+char *dirname(char *path);
+#define fsync(fd) 0
+#define fchown(fd,uid,gid) 0
+#define fchmod(fd, mode) 0 /** @todo implement fchmod! */
+#define geteuid() 0
+#define getegid() 0
+int lchmod(const char *path, mode_t mode);
+int msc_chmod(const char *path, mode_t mode);
+#define chmod msc_chmod
+#define lchown(path, uid, gid) chown(path, uid, gid)
+int link(const char *pszDst, const char *pszLink);
+int mkdir_msc(const char *path, mode_t mode);
+#define mkdir(path, mode) mkdir_msc(path, mode)
+#define mkfifo(path, mode) -1
+#define mknod(path, mode, devno) -1
+int mkstemp(char *temp);
+#define readlink(link, buf, size) -1
+#define reallocf(old, size) realloc(old, size)
+int rmdir_msc(const char *path);
+#define rmdir(path) rmdir_msc(path)
+intmax_t strtoimax(const char *nptr, char **endptr, int base);
+uintmax_t strtoumax(const char *nptr, char **endptr, int base);
+#define strtoll(a,b,c) strtoimax(a,b,c)
+#define strtoull(a,b,c) strtoumax(a,b,c)
+int asprintf(char **strp, const char *fmt, ...);
+int vasprintf(char **strp, const char *fmt, va_list ap);
+#if _MSC_VER < 1400
+int snprintf(char *buf, size_t size, const char *fmt, ...);
+#else
+#define snprintf _snprintf
+#endif
+int symlink(const char *pszDst, const char *pszLink);
+int utimes(const char *pszPath, const struct msc_timeval *paTimes);
+int lutimes(const char *pszPath, const struct msc_timeval *paTimes);
+ssize_t writev(int fd, const struct iovec *vector, int count);
+
+int gettimeofday(struct msc_timeval *pNow, void *pvIgnored);
+struct tm *localtime_r(const __time64_t *pNow, struct tm *pResult);
+__time64_t timegm(struct tm *pNow);
+#undef mktime
+#define mktime _mktime64
+
+/* bird write ENOSPC hacks. */
+#undef write
+#define write msc_write
+ssize_t msc_write(int fd, const void *pvSrc, size_t cbSrc);
+
+/*
+ * MSC fake internals / helpers.
+ */
+int birdSetErrno(unsigned dwErr);
+
+#endif /* _MSC_VER */
+#endif
+