mirror of
https://github.com/cesanta/mongoose.git
synced 2026-11-11 16:40:17 +00:00
184 lines
4.0 KiB
C
184 lines
4.0 KiB
C
#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_ */
|