#ifndef CS_COMMON_PLATFORMS_PLATFORM_WINDOWS_H_ #define CS_COMMON_PLATFORMS_PLATFORM_WINDOWS_H_ #if CS_PLATFORM == CS_P_WINDOWS /* * MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015) * MSVC++ 12.0 _MSC_VER == 1800 (Visual Studio 2013) * MSVC++ 11.0 _MSC_VER == 1700 (Visual Studio 2012) * MSVC++ 10.0 _MSC_VER == 1600 (Visual Studio 2010) * MSVC++ 9.0 _MSC_VER == 1500 (Visual Studio 2008) * MSVC++ 8.0 _MSC_VER == 1400 (Visual Studio 2005) * MSVC++ 7.1 _MSC_VER == 1310 (Visual Studio 2003) * MSVC++ 7.0 _MSC_VER == 1300 * MSVC++ 6.0 _MSC_VER == 1200 * MSVC++ 5.0 _MSC_VER == 1100 */ #ifdef _MSC_VER #pragma warning(disable : 4127) /* FD_SET() emits warning, disable it */ #pragma warning(disable : 4204) /* missing c99 support */ #endif #ifndef _WINSOCK_DEPRECATED_NO_WARNINGS #define _WINSOCK_DEPRECATED_NO_WARNINGS 1 #endif #ifndef _CRT_SECURE_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS #endif #include <assert.h> #include <direct.h> #include <errno.h> #include <fcntl.h> #include <io.h> #include <limits.h> #include <signal.h> #include <stddef.h> #include <stdio.h> #include <stdlib.h> #include <sys/stat.h> #include <time.h> #include <ctype.h> #ifdef _MSC_VER #pragma comment(lib, "ws2_32.lib") /* Linking with winsock library */ #endif #include <winsock2.h> #include <ws2tcpip.h> #include <windows.h> #include <process.h> #if _MSC_VER < 1700 typedef int bool; #else #include <stdbool.h> #endif #if defined(_MSC_VER) && _MSC_VER >= 1800 #define strdup _strdup #endif #ifndef EINPROGRESS #define EINPROGRESS WSAEINPROGRESS #endif #ifndef EWOULDBLOCK #define EWOULDBLOCK WSAEWOULDBLOCK #endif #ifndef __func__ #define STRX(x) #x #define STR(x) STRX(x) #define __func__ __FILE__ ":" STR(__LINE__) #endif #define snprintf _snprintf #define vsnprintf _vsnprintf #define to64(x) _atoi64(x) #if !defined(__MINGW32__) && !defined(__MINGW64__) #define popen(x, y) _popen((x), (y)) #define pclose(x) _pclose(x) #define fileno _fileno #endif #if defined(_MSC_VER) && _MSC_VER >= 1400 #define fseeko(x, y, z) _fseeki64((x), (y), (z)) #else #define fseeko(x, y, z) fseek((x), (y), (z)) #endif #if defined(_MSC_VER) && _MSC_VER <= 1200 typedef unsigned long uintptr_t; typedef long intptr_t; #endif typedef int socklen_t; #if _MSC_VER >= 1700 #include <stdint.h> #else typedef signed char int8_t; typedef unsigned char uint8_t; typedef int int32_t; typedef unsigned int uint32_t; typedef short int16_t; typedef unsigned short uint16_t; typedef __int64 int64_t; typedef unsigned __int64 uint64_t; #endif typedef SOCKET sock_t; typedef uint32_t in_addr_t; #ifndef UINT16_MAX #define UINT16_MAX 65535 #endif #ifndef UINT32_MAX #define UINT32_MAX 4294967295 #endif #ifndef pid_t #define pid_t HANDLE #endif #define INT64_FMT "I64d" #define INT64_X_FMT "I64x" #define SIZE_T_FMT "Iu" typedef struct _stati64 cs_stat_t; #ifndef S_ISDIR #define S_ISDIR(x) (((x) &_S_IFMT) == _S_IFDIR) #endif #ifndef S_ISREG #define S_ISREG(x) (((x) &_S_IFMT) == _S_IFREG) #endif #define DIRSEP '\\' #define CS_DEFINE_DIRENT #ifndef va_copy #ifdef __va_copy #define va_copy __va_copy #else #define va_copy(x, y) (x) = (y) #endif #endif #ifndef MG_MAX_HTTP_REQUEST_SIZE #define MG_MAX_HTTP_REQUEST_SIZE 8192 #endif #ifndef MG_MAX_HTTP_SEND_MBUF #define MG_MAX_HTTP_SEND_MBUF 4096 #endif #ifndef MG_MAX_HTTP_HEADERS #define MG_MAX_HTTP_HEADERS 40 #endif #ifndef CS_ENABLE_STDIO #define CS_ENABLE_STDIO 1 #endif #ifndef MG_ENABLE_BROADCAST #define MG_ENABLE_BROADCAST 1 #endif #ifndef MG_ENABLE_DIRECTORY_LISTING #define MG_ENABLE_DIRECTORY_LISTING 1 #endif #ifndef MG_ENABLE_FILESYSTEM #define MG_ENABLE_FILESYSTEM 1 #endif #ifndef MG_ENABLE_HTTP_CGI #define MG_ENABLE_HTTP_CGI MG_ENABLE_FILESYSTEM #endif #ifndef MG_NET_IF #define MG_NET_IF MG_NET_IF_SOCKET #endif unsigned int sleep(unsigned int seconds); /* https://stackoverflow.com/questions/16647819/timegm-cross-platform */ #define timegm _mkgmtime #define gmtime_r(a, b) \ do { \ *(b) = *gmtime(a); \ } while (0) #endif /* CS_PLATFORM == CS_P_WINDOWS */ #endif /* CS_COMMON_PLATFORMS_PLATFORM_WINDOWS_H_ */