#pragma once #if MG_ARCH == MG_ARCH_WIN32 #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #ifndef _CRT_SECURE_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS #endif #ifndef _WINSOCK_DEPRECATED_NO_WARNINGS #define _WINSOCK_DEPRECATED_NO_WARNINGS #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if defined(_MSC_VER) && _MSC_VER < 1700 #define __func__ "" typedef __int64 int64_t; typedef unsigned __int64 uint64_t; typedef unsigned char uint8_t; typedef char int8_t; typedef unsigned short uint16_t; typedef short int16_t; typedef unsigned int uint32_t; typedef int int32_t; typedef enum { false = 0, true = 1 } bool; #else #include #include #include #endif #include #include #include // For mg_random() #if defined(_MSC_VER) && _MSC_VER < 1700 #ifndef _WIN32_WINNT #define _WIN32_WINNT 0x400 // Let vc98 pick up wincrypt.h #endif #include #pragma comment(lib, "advapi32.lib") #else #include #if defined(_MSC_VER) #pragma comment(lib, "bcrypt.lib") #endif #endif // Protect from calls like std::snprintf in app code // See https://github.com/cesanta/mongoose/issues/1047 #ifndef __cplusplus #define snprintf _snprintf #define vsnprintf _vsnprintf #ifndef strdup // For MSVC with _DEBUG, see #1359 #define strdup(x) _strdup(x) #endif #endif #define MG_INVALID_SOCKET INVALID_SOCKET #define MG_SOCKET_TYPE SOCKET typedef unsigned long nfds_t; #if defined(_MSC_VER) #pragma comment(lib, "ws2_32.lib") #ifndef alloca #define alloca(a) _alloca(a) #endif #endif #define poll(a, b, c) WSAPoll((a), (b), (c)) #define closesocket(x) closesocket(x) typedef int socklen_t; #define MG_DIRSEP '\\' #ifndef MG_PATH_MAX #define MG_PATH_MAX FILENAME_MAX #endif #ifndef SO_EXCLUSIVEADDRUSE #define SO_EXCLUSIVEADDRUSE ((int) (~SO_REUSEADDR)) #endif #define MG_SOCK_ERR(errcode) ((errcode) < 0 ? WSAGetLastError() : 0) #define MG_SOCK_PENDING(errcode) \ (((errcode) < 0) && \ (WSAGetLastError() == WSAEINTR || WSAGetLastError() == WSAEINPROGRESS || \ WSAGetLastError() == WSAEWOULDBLOCK)) #define MG_SOCK_RESET(errcode) \ (((errcode) < 0) && (WSAGetLastError() == WSAECONNRESET)) #define realpath(a, b) _fullpath((b), (a), MG_PATH_MAX) #define sleep(x) Sleep((x) * 1000) #define mkdir(a, b) _mkdir(a) #define timegm(x) _mkgmtime(x) #ifndef S_ISDIR #define S_ISDIR(x) (((x) & _S_IFMT) == _S_IFDIR) #endif #ifndef MG_ENABLE_DIRLIST #define MG_ENABLE_DIRLIST 1 #endif #ifndef SIGPIPE #define SIGPIPE 0 #endif #ifndef MG_ENABLE_POSIX_FS #define MG_ENABLE_POSIX_FS 1 #endif #ifndef MG_IO_SIZE #define MG_IO_SIZE 16384 #endif #endif