#ifndef __CONFIG_H__
#define __CONFIG_H__

// 下で指定された定義の前に対象プラットフォームを指定しなければならない場合、以下の定義を変更してください。
// 異なるプラットフォームに対応する値に関する最新情報については、MSDN を参照してください。
#ifndef WINVER				// Windows XP 以降のバージョンに固有の機能の使用を許可します。
#define WINVER 0x0501		// これを Windows の他のバージョン向けに適切な値に変更してください。
#endif

#ifndef _WIN32_WINNT		// Windows XP 以降のバージョンに固有の機能の使用を許可します。                   
#define _WIN32_WINNT 0x0501	// これを Windows の他のバージョン向けに適切な値に変更してください。
#endif

#ifndef _WIN32_WINDOWS		// Windows 98 以降のバージョンに固有の機能の使用を許可します。
#define _WIN32_WINDOWS 0x0410 // これを Windows Me またはそれ以降のバージョン向けに適切な値に変更してください。
#endif

#ifndef _WIN32_IE			// IE 6.0 以降のバージョンに固有の機能の使用を許可します。
#define _WIN32_IE 0x0600	// これを IE. の他のバージョン向けに適切な値に変更してください。
#endif

#define WIN32_LEAN_AND_MEAN		// Windows ヘッダーから使用されていない部分を除外します。

#define FD_SETSIZE 2248

#include <windows.h>
#include <stdio.h>
#include <stdint.h>
#include <io.h>
#include <fcntl.h>

typedef unsigned short uid_t;
typedef unsigned short gid_t;

typedef unsigned long vm_offset_t;
typedef unsigned long vm_size_t;

#define __BIT_TYPES_DEFINED__

typedef signed char int8_t;
typedef unsigned char u_int8_t;
typedef short int16_t;
typedef unsigned short u_int16_t;
typedef int int32_t;
typedef unsigned int u_int32_t;
typedef long long int64_t;
typedef unsigned long long u_int64_t;
typedef int32_t register_t;

typedef int _ssize_t;
typedef _ssize_t ssize_t;

#define _READ_WRITE_RETURN_TYPE _ssize_t

#define _fpos_t fpos_t
typedef int _flock_t;

// sys/_types.h
/* Conversion state information.  */
typedef struct
{
  int _count;
  union
  {
    wint_t __wch;
    unsigned char __wchb[4];
  } _value;		/* Value so far.  */
} _mbstate_t;

// limits.h
#define LONG_LONG_MIN INT64_MIN
#define LONG_LONG_MAX INT64_MAX

// stat.h
#define	_IFMT		0170000	/* type of file */
#define		_IFDIR	0040000	/* directory */
#define		_IFCHR	0020000	/* character special */
#define		_IFBLK	0060000	/* block special */
#define		_IFREG	0100000	/* regular */
#define		_IFLNK	0120000	/* symbolic link */
#define		_IFSOCK	0140000	/* socket */
#define		_IFIFO	0010000	/* fifo */

#define	S_ISBLK(m)	(((m)&_IFMT) == _IFBLK)
#define	S_ISCHR(m)	(((m)&_IFMT) == _IFCHR)
#define	S_ISDIR(m)	(((m)&_IFMT) == _IFDIR)
#define	S_ISFIFO(m)	(((m)&_IFMT) == _IFIFO)
#define	S_ISREG(m)	(((m)&_IFMT) == _IFREG)
#define	S_ISLNK(m)	(((m)&_IFMT) == _IFLNK)
#define	S_ISSOCK(m)	(((m)&_IFMT) == _IFSOCK)

#define	S_IRWXU 	(S_IRUSR | S_IWUSR | S_IXUSR)
#define		S_IRUSR	0000400	/* read permission, owner */
#define		S_IWUSR	0000200	/* write permission, owner */
#define		S_IXUSR 0000100/* execute/search permission, owner */
#define	S_IRWXG		(S_IRGRP | S_IWGRP | S_IXGRP)
#define		S_IRGRP	0000040	/* read permission, group */
#define		S_IWGRP	0000020	/* write permission, grougroup */
#define		S_IXGRP 0000010/* execute/search permission, group */
#define	S_IRWXO		(S_IROTH | S_IWOTH | S_IXOTH)
#define		S_IROTH	0000004	/* read permission, other */
#define		S_IWOTH	0000002	/* write permission, other */
#define		S_IXOTH 0000001/* execute/search permission, other */

// sys/_default_fcntl.h
#define	_FNONBLOCK	0x4000	/* non blocking I/O (POSIX style) */

#define inline __inline
#define __extension__

#define LIBRARY_DIR		"."
#define STDIN_FILENO	stdin->_file
#define STDOUT_FILENO	stdout->_file
#define STDERR_FILENO	stderr->_file
#define PACKAGE_NAME	"lighttpd"
#define PACKAGE_VERSION	"1.4.32"
#define LOG_ERR			0
#define LIGHTTPD_VERSION_ID (1 << 16 | 4 << 8 | 32)

#define HAVE_GETOPT_H
#define HAVE_SELECT
#define HAVE_STDINT_H
#define HAVE_MEMCPY
#define HAVE_MEMSET
#define HAVE_SOCKLEN_T
#define HAVE_PCRE_H
#define PCRE_STATIC

#define snprintf _snprintf_c

#endif