14 #ifndef SQUID_COMPAT_OS_MSWINDOWS_H
15 #define SQUID_COMPAT_OS_MSWINDOWS_H
40 #define ACL WindowsACL
43 #define _CRT_SECURE_NO_DEPRECATE
44 #pragma warning( disable : 4290 )
45 #pragma warning( disable : 4996 )
49 #if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS == 64
50 # define __USE_FILE_OFFSET64 1
55 #if defined(__USE_FILE_OFFSET64)
56 typedef uint64_t ino_t;
58 typedef unsigned long ino_t;
61 #define INT64_MAX _I64_MAX
62 #define INT64_MIN _I64_MIN
64 #include "default_config_file.h"
67 #define THREADLOCAL __declspec(thread)
69 #elif defined(__GNUC__)
71 #define THREADLOCAL __attribute__((section(".tls")))
77 #define alloca _alloca
78 #define fileno _fileno
79 #define fstat _fstati64
80 #define lseek _lseeki64
81 #define memccpy _memccpy
82 #define mktemp _mktemp
83 #define snprintf _snprintf
85 #define strcasecmp _stricmp
86 #define strlwr _strlwr
87 #define strncasecmp _strnicmp
88 #define tempnam _tempnam
89 #define vsnprintf _vsnprintf
93 #if defined(_MSC_VER) || _SQUID_CYGWIN_
95 #define ftruncate WIN32_ftruncate
96 SQUIDCEXTERN int WIN32_truncate(
const char *pathname, off_t length);
97 #define truncate WIN32_truncate
104 #define fdopen _fdopen
105 #define getcwd _getcwd
106 #define getpid _getpid
107 #define mkdir(p,F) mkdir((p))
108 #define pclose _pclose
112 setenv(
const char *
const name,
const char *
const value,
const int overwrite)
114 if (!overwrite && getenv(name))
122 return (_putenv_s(name, value) == 0 ? 0 : -1);
125 #define setmode _setmode
126 #define sleep(t) Sleep((t)*1000)
128 #define unlink _unlink
131 #define O_RDONLY _O_RDONLY
134 #define O_WRONLY _O_WRONLY
137 #define O_RDWR _O_RDWR
140 #define O_APPEND _O_APPEND
143 #define O_CREAT _O_CREAT
146 #define O_TRUNC _O_TRUNC
149 #define O_EXCL _O_EXCL
152 #define O_TEXT _O_TEXT
155 #define O_BINARY _O_BINARY
158 #define O_RAW _O_BINARY
161 #define O_TEMPORARY _O_TEMPORARY
164 #define O_NOINHERIT _O_NOINHERIT
167 #define O_SEQUENTIAL _O_SEQUENTIAL
170 #define O_RANDOM _O_RANDOM
177 #define S_IFMT _S_IFMT
180 #define S_IFDIR _S_IFDIR
183 #define S_IFCHR _S_IFCHR
186 #define S_IFREG _S_IFREG
189 #define S_IREAD _S_IREAD
192 #define S_IWRITE _S_IWRITE
195 #define S_IEXEC _S_IEXEC
219 #if defined(_MSC_VER)
220 #define S_ISDIR(m) (((m) & _S_IFDIR) == _S_IFDIR)
231 #if defined(_MSC_VER)
253 #if !HAVE_GETTIMEOFDAY
260 #define CHANGE_FD_SETSIZE 1
261 #if CHANGE_FD_SETSIZE && SQUID_MAXFD > DEFAULT_FD_SETSIZE
262 #define FD_SETSIZE SQUID_MAXFD
268 #include <winsock2.h>
273 #include <ws2tcpip.h>
276 #if (EAI_NODATA == EAI_NONAME)
278 #define EAI_NODATA WSANO_DATA
281 #if defined(_MSC_VER)
283 #pragma warning (push)
284 #pragma warning (disable:4142)
291 #if defined(_MSC_VER)
292 #pragma warning (pop)
298 #define EISCONN WSAEISCONN
301 #define EINPROGRESS WSAEINPROGRESS
304 #define EWOULDBLOCK WSAEWOULDBLOCK
307 #define EALREADY WSAEALREADY
310 #define ETIMEDOUT WSAETIMEDOUT
313 #define ECONNREFUSED WSAECONNREFUSED
316 #define ECONNRESET WSAECONNRESET
319 #define ENOTCONN WSAENOTCONN
322 #define ERESTART WSATRY_AGAIN
325 #define EAFNOSUPPORT WSAEAFNOSUPPORT
328 #define ENETUNREACH WSAENETUNREACH
331 #define ENOTSUP WSAEOPNOTSUPP
334 #define ECONNABORTED WSAECONNABORTED
338 #define h_errno errno
341 #define FD_CLR(fd, set) do { \
343 SOCKET __sock = _get_osfhandle(fd); \
344 for (__i = 0; __i < ((fd_set FAR *)(set))->fd_count ; __i++) { \
345 if (((fd_set FAR *)(set))->fd_array[__i] == __sock) { \
346 while (__i < ((fd_set FAR *)(set))->fd_count-1) { \
347 ((fd_set FAR *)(set))->fd_array[__i] = \
348 ((fd_set FAR *)(set))->fd_array[__i+1]; \
351 ((fd_set FAR *)(set))->fd_count--; \
358 #define FD_SET(fd, set) do { \
360 SOCKET __sock = _get_osfhandle(fd); \
361 for (__i = 0; __i < ((fd_set FAR *)(set))->fd_count; __i++) { \
362 if (((fd_set FAR *)(set))->fd_array[__i] == (__sock)) { \
366 if (__i == ((fd_set FAR *)(set))->fd_count) { \
367 if (((fd_set FAR *)(set))->fd_count < FD_SETSIZE) { \
368 ((fd_set FAR *)(set))->fd_array[__i] = (__sock); \
369 ((fd_set FAR *)(set))->fd_count++; \
375 #define FD_ISSET(fd, set) Win32__WSAFDIsSet(fd, (fd_set FAR *)(set))
384 CRITICAL_SECTION lock;
388 #define IOINFO_ARRAY_ELTS (1 << IOINFO_L2E)
389 #define _pioinfo(i) ( __pioinfo[(i) >> IOINFO_L2E] + ((i) & (IOINFO_ARRAY_ELTS - 1)) )
390 #define _osfile(i) ( _pioinfo(i)->osfile )
391 #define _osfhnd(i) ( _pioinfo(i)->osfhnd )
396 #if defined(_MSC_VER)
403 #if defined(__cplusplus)
405 #if defined(_MSC_VER)
410 #include <functional>
430 ioctl(
int s,
int c,
void * a)
432 if ((::ioctlsocket(_get_osfhandle(s), c, (u_long FAR *)a)) == SOCKET_ERROR) {
433 errno = WSAGetLastError();
438 #define ioctl(s,c,a) Squid::ioctl(s,c,a)
441 ioctlsocket(
int s,
long c, u_long FAR * a)
443 if ((::ioctlsocket(_get_osfhandle(s), c, a)) == SOCKET_ERROR) {
444 errno = WSAGetLastError();
449 #define ioctlsocket(s,c,a) Squid::ioctlsocket(s,c,a)
452 shutdown(
int s,
int h)
454 if (::shutdown(_get_osfhandle(s),h) == SOCKET_ERROR) {
455 errno = WSAGetLastError();
460 #define shutdown(s,h) Squid::shutdown(s,h)
462 #undef WSADuplicateSocket
464 WSADuplicateSocket(
int s, DWORD n, LPWSAPROTOCOL_INFO l)
467 if (::WSADuplicateSocketW(_get_osfhandle(s), n, l) == SOCKET_ERROR) {
469 if (::WSADuplicateSocketA(_get_osfhandle(s), n, l) == SOCKET_ERROR) {
471 errno = WSAGetLastError();
476 #define WSADuplicateSocket(s,n,l) Squid::WSADuplicateSocket(s,n,l)
480 WSASocket(
int a,
int t,
int p, LPWSAPROTOCOL_INFO i, GROUP g, DWORD f)
484 if ((result = ::WSASocketW(a, t, p, i, g, f)) == INVALID_SOCKET) {
486 if ((result = ::WSASocketA(a, t, p, i, g, f)) == INVALID_SOCKET) {
488 if (WSAEMFILE == (errno = WSAGetLastError()))
492 return _open_osfhandle(result, 0);
494 #define WSASocket(a,t,p,i,g,f) Squid::WSASocket(a,t,p,i,g,f)
506 #include <sys/time.h>
508 #if HAVE_SYS_RESOURCE_H
509 #include <sys/resource.h>
511 #define RUSAGE_SELF 0
512 #define RUSAGE_CHILDREN -1
515 struct timeval ru_utime;
516 struct timeval ru_stime;
582 #if !HAVE_GETPAGESIZE
584 size_t getpagesize();
585 #define HAVE_GETPAGESIZE 2
589 SQUIDCEXTERN int Win32__WSAFDIsSet(
int fd, fd_set* set);
599 #define ACL WindowsACL
600 #define _MSWIN_ACL_WAS_NOT_DEFINED 1
603 #if _MSWIN_ACL_WAS_NOT_DEFINED
605 #undef _MSWIN_ACL_WAS_NOT_DEFINED
615 #define LOG_WARNING 4
619 #define LOG_DAEMON (3<<3)
621 void openlog(
const char *ident,
int logopt,
int facility);
622 void syslog(
int priority,
const char *fmt, ...);