00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifndef SQUID_CONFIG_H
00035 #include "config.h"
00036 #endif
00037
00038 #ifndef SQUID_OS_MSWIN_H
00039 #define SQUID_OS_MSWIN_H
00040
00041 #ifdef _SQUID_WIN32_
00042
00043 #define ACL WindowsACL
00044 #if defined(_MSC_VER)
00045 #if _MSC_VER == 1400
00046 #define _CRT_SECURE_NO_DEPRECATE
00047 #pragma warning( disable : 4290 )
00048 #pragma warning( disable : 4996 )
00049 #endif
00050 #endif
00051
00052
00053
00054
00055
00056 #if defined(__GNUC__)
00057 #define NOMINMAX
00058 #endif
00059
00060 #if defined _FILE_OFFSET_BITS && _FILE_OFFSET_BITS == 64
00061 # define __USE_FILE_OFFSET64 1
00062 #endif
00063
00064 #if defined(_MSC_VER)
00065
00066 #if defined __USE_FILE_OFFSET64
00067 typedef uint64_t ino_t;
00068 #else
00069 typedef unsigned long ino_t;
00070 #endif
00071
00072 #define INT64_MAX _I64_MAX
00073 #define INT64_MIN _I64_MIN
00074
00075 #include "default_config_file.h"
00076
00077 #define __STDC__ 1
00078 #define THREADLOCAL __declspec(thread)
00079
00080 #elif defined(__GNUC__)
00081
00082 #define THREADLOCAL __attribute__((section(".tls")))
00083
00084 #endif
00085
00086 #if defined(_MSC_VER)
00087 #define alloca _alloca
00088 #endif
00089 #define chdir _chdir
00090 #define dup _dup
00091 #define dup2 _dup2
00092 #define fdopen _fdopen
00093 #if defined(_MSC_VER)
00094 #define fileno _fileno
00095 #define fstat _fstati64
00096 #endif
00097 #define ftruncate WIN32_ftruncate
00098 #define getcwd _getcwd
00099 #define getpid _getpid
00100 #define getrusage WIN32_getrusage
00101 #if defined(_MSC_VER)
00102 #define lseek _lseeki64
00103 #define memccpy _memccpy
00104 #define mkdir(p) _mkdir(p)
00105 #define mktemp _mktemp
00106 #endif
00107 #define pclose _pclose
00108 #define pipe WIN32_pipe
00109 #define popen _popen
00110 #define putenv _putenv
00111 #define setmode _setmode
00112 #define sleep(t) Sleep((t)*1000)
00113 #if defined(_MSC_VER)
00114 #define snprintf _snprintf
00115 #define stat _stati64
00116 #define strcasecmp _stricmp
00117 #define strdup _strdup
00118 #define strlwr _strlwr
00119 #define strncasecmp _strnicmp
00120 #define tempnam _tempnam
00121 #endif
00122 #define truncate WIN32_truncate
00123 #define umask _umask
00124 #define unlink _unlink
00125 #if defined(_MSC_VER)
00126 #define vsnprintf _vsnprintf
00127 #endif
00128
00129 #define O_RDONLY _O_RDONLY
00130 #define O_WRONLY _O_WRONLY
00131 #define O_RDWR _O_RDWR
00132 #define O_APPEND _O_APPEND
00133
00134 #define O_CREAT _O_CREAT
00135 #define O_TRUNC _O_TRUNC
00136 #define O_EXCL _O_EXCL
00137
00138 #define O_TEXT _O_TEXT
00139 #define O_BINARY _O_BINARY
00140 #define O_RAW _O_BINARY
00141 #define O_TEMPORARY _O_TEMPORARY
00142 #define O_NOINHERIT _O_NOINHERIT
00143 #define O_SEQUENTIAL _O_SEQUENTIAL
00144 #define O_RANDOM _O_RANDOM
00145 #define O_NDELAY 0
00146
00147 #define S_IFMT _S_IFMT
00148 #define S_IFDIR _S_IFDIR
00149 #define S_IFCHR _S_IFCHR
00150 #define S_IFREG _S_IFREG
00151 #define S_IREAD _S_IREAD
00152 #define S_IWRITE _S_IWRITE
00153 #define S_IEXEC _S_IEXEC
00154
00155 #define S_IRWXO 007
00156 #if defined(_MSC_VER)
00157 #define S_ISDIR(m) (((m) & _S_IFDIR) == _S_IFDIR)
00158 #endif
00159
00160 #define SIGHUP 1
00161 #define SIGKILL 9
00162 #define SIGBUS 10
00163 #define SIGPIPE 13
00164 #define SIGCHLD 20
00165 #define SIGUSR1 30
00166 #define SIGUSR2 31
00167
00168 typedef unsigned short int ushort;
00169 #if !_SQUID_CYGWIN_
00170 typedef int uid_t;
00171 typedef int gid_t;
00172 #endif
00173
00174 struct passwd {
00175 char *pw_name;
00176 char *pw_passwd;
00177 uid_t pw_uid;
00178 gid_t pw_gid;
00179 char *pw_gecos;
00180 char *pw_dir;
00181 char *pw_shell;
00182 };
00183
00184 struct group {
00185 char *gr_name;
00186 char *gr_passwd;
00187 gid_t gr_gid;
00188 char **gr_mem;
00189 };
00190
00191 struct statfs {
00192 long f_type;
00193 long f_bsize;
00194 long f_blocks;
00195 long f_bfree;
00196 long f_bavail;
00197 long f_files;
00198 long f_ffree;
00199 long f_fsid;
00200 long f_namelen;
00201 long f_spare[6];
00202 };
00203
00204 #if !HAVE_GETTIMEOFDAY
00205 struct timezone {
00206 int tz_minuteswest;
00207 int tz_dsttime;
00208 };
00209 #endif
00210
00211 #define CHANGE_FD_SETSIZE 1
00212 #if CHANGE_FD_SETSIZE && SQUID_MAXFD > DEFAULT_FD_SETSIZE
00213 #define FD_SETSIZE SQUID_MAXFD
00214 #endif
00215
00216 #include <process.h>
00217 #include <errno.h>
00218 #if defined(_MSC_VER)
00219 #include <winsock2.h>
00220 #endif
00221 #include <ws2tcpip.h>
00222 #if (EAI_NODATA == EAI_NONAME)
00223 #undef EAI_NODATA
00224 #define EAI_NODATA WSANO_DATA
00225 #endif
00226 #if defined(_MSC_VER)
00227
00228 #pragma warning (push)
00229 #pragma warning (disable:4142)
00230 #endif
00231
00232 #define NOGDI
00233 #include <ws2spi.h>
00234 #if defined(_MSC_VER)
00235 #pragma warning (pop)
00236 #endif
00237 #include <io.h>
00238
00239 typedef char * caddr_t;
00240
00241 #undef FD_CLOSE
00242 #undef FD_OPEN
00243 #undef FD_READ
00244 #undef FD_WRITE
00245
00246 #ifndef EISCONN
00247 #define EISCONN WSAEISCONN
00248 #endif
00249 #ifndef EINPROGRESS
00250 #define EINPROGRESS WSAEINPROGRESS
00251 #endif
00252 #ifndef EWOULDBLOCK
00253 #define EWOULDBLOCK WSAEWOULDBLOCK
00254 #endif
00255 #ifndef EALREADY
00256 #define EALREADY WSAEALREADY
00257 #endif
00258 #ifndef ETIMEDOUT
00259 #define ETIMEDOUT WSAETIMEDOUT
00260 #endif
00261 #ifndef ECONNREFUSED
00262 #define ECONNREFUSED WSAECONNREFUSED
00263 #endif
00264 #ifndef ECONNRESET
00265 #define ECONNRESET WSAECONNRESET
00266 #endif
00267 #ifndef ENOTCONN
00268 #define ENOTCONN WSAENOTCONN
00269 #endif
00270 #ifndef ERESTART
00271 #define ERESTART WSATRY_AGAIN
00272 #endif
00273 #ifndef EAFNOSUPPORT
00274 #define EAFNOSUPPORT WSAEAFNOSUPPORT
00275 #endif
00276
00277 #undef h_errno
00278 #define h_errno errno
00279
00280 #undef FD_CLR
00281 #define FD_CLR(fd, set) do { \
00282 u_int __i; \
00283 SOCKET __sock = _get_osfhandle(fd); \
00284 for (__i = 0; __i < ((fd_set FAR *)(set))->fd_count ; __i++) { \
00285 if (((fd_set FAR *)(set))->fd_array[__i] == __sock) { \
00286 while (__i < ((fd_set FAR *)(set))->fd_count-1) { \
00287 ((fd_set FAR *)(set))->fd_array[__i] = \
00288 ((fd_set FAR *)(set))->fd_array[__i+1]; \
00289 __i++; \
00290 } \
00291 ((fd_set FAR *)(set))->fd_count--; \
00292 break; \
00293 } \
00294 } \
00295 } while(0)
00296
00297 #undef FD_SET
00298 #define FD_SET(fd, set) do { \
00299 u_int __i; \
00300 SOCKET __sock = _get_osfhandle(fd); \
00301 for (__i = 0; __i < ((fd_set FAR *)(set))->fd_count; __i++) { \
00302 if (((fd_set FAR *)(set))->fd_array[__i] == (__sock)) { \
00303 break; \
00304 } \
00305 } \
00306 if (__i == ((fd_set FAR *)(set))->fd_count) { \
00307 if (((fd_set FAR *)(set))->fd_count < FD_SETSIZE) { \
00308 ((fd_set FAR *)(set))->fd_array[__i] = (__sock); \
00309 ((fd_set FAR *)(set))->fd_count++; \
00310 } \
00311 } \
00312 } while(0)
00313
00314 #undef FD_ISSET
00315 #define FD_ISSET(fd, set) Win32__WSAFDIsSet(fd, (fd_set FAR *)(set))
00316
00317
00318 typedef struct {
00319 long osfhnd;
00320 char osfile;
00321 char pipech;
00322 #ifdef _MT
00323 int lockinitflag;
00324 CRITICAL_SECTION lock;
00325 #endif
00326 } ioinfo;
00327 #define IOINFO_L2E 5
00328 #define IOINFO_ARRAY_ELTS (1 << IOINFO_L2E)
00329 #define _pioinfo(i) ( __pioinfo[(i) >> IOINFO_L2E] + ((i) & (IOINFO_ARRAY_ELTS - 1)) )
00330 #define _osfile(i) ( _pioinfo(i)->osfile )
00331 #define _osfhnd(i) ( _pioinfo(i)->osfhnd )
00332 #define FOPEN 0x01
00333
00334 #if defined(_MSC_VER)
00335
00336 SQUIDCEXTERN _CRTIMP ioinfo * __pioinfo[];
00337 SQUIDCEXTERN int __cdecl _free_osfhnd(int);
00338
00339 #elif defined(__MINGW32__)
00340
00341 __MINGW_IMPORT ioinfo * __pioinfo[];
00342 SQUIDCEXTERN int _free_osfhnd(int);
00343
00344 #endif
00345
00346 SQUIDCEXTERN THREADLOCAL int ws32_result;
00347
00348 #define strerror(e) WIN32_strerror(e)
00349 #define HAVE_STRERROR 1
00350
00351 #ifdef __cplusplus
00352
00353 inline
00354 int close(int fd)
00355 {
00356 char l_so_type[sizeof(int)];
00357 int l_so_type_siz = sizeof(l_so_type);
00358 SOCKET sock = _get_osfhandle(fd);
00359
00360 if (::getsockopt(sock, SOL_SOCKET, SO_TYPE, l_so_type, &l_so_type_siz) == 0) {
00361 int result = 0;
00362 if (closesocket(sock) == SOCKET_ERROR) {
00363 errno = WSAGetLastError();
00364 result = 1;
00365 }
00366 _free_osfhnd(fd);
00367 _osfile(fd) = 0;
00368 return result;
00369 } else
00370 return _close(fd);
00371 }
00372
00373 #if defined(_MSC_VER)
00374
00375 #ifndef _S_IREAD
00376 #define _S_IREAD 0x0100
00377 #endif
00378
00379 #ifndef _S_IWRITE
00380 #define _S_IWRITE 0x0080
00381 #endif
00382
00383 inline
00384 int open(const char *filename, int oflag, int pmode = 0)
00385 {
00386 return _open(filename, oflag, pmode & (_S_IREAD | _S_IWRITE));
00387 }
00388 #endif
00389
00390 inline
00391 int read(int fd, void * buf, size_t siz)
00392 {
00393 char l_so_type[sizeof(int)];
00394 int l_so_type_siz = sizeof(l_so_type);
00395 SOCKET sock = _get_osfhandle(fd);
00396
00397 if (::getsockopt(sock, SOL_SOCKET, SO_TYPE, l_so_type, &l_so_type_siz) == 0)
00398 return ::recv(sock, (char FAR *) buf, (int)siz, 0);
00399 else
00400 return _read(fd, buf, (unsigned int)siz);
00401 }
00402
00403 inline
00404 int write(int fd, const void * buf, size_t siz)
00405 {
00406 char l_so_type[sizeof(int)];
00407 int l_so_type_siz = sizeof(l_so_type);
00408 SOCKET sock = _get_osfhandle(fd);
00409
00410 if (::getsockopt(sock, SOL_SOCKET, SO_TYPE, l_so_type, &l_so_type_siz) == 0)
00411 return ::send(sock, (char FAR *) buf, siz, 0);
00412 else
00413 return _write(fd, buf, siz);
00414 }
00415
00416 inline
00417 char *index(const char *s, int c)
00418 {
00419 return (char *)strchr(s,c);
00420 }
00421
00423 namespace Squid
00424 {
00427 inline
00428 int accept(int s, struct sockaddr * a, size_t * l)
00429 {
00430 SOCKET result;
00431 if ((result = ::accept(_get_osfhandle(s), a, (int *)l)) == INVALID_SOCKET) {
00432 if (WSAEMFILE == (errno = WSAGetLastError()))
00433 errno = EMFILE;
00434 return -1;
00435 } else
00436 return _open_osfhandle(result, 0);
00437 }
00438
00439 inline
00440 int bind(int s, struct sockaddr * n, int l)
00441 {
00442 if (::bind(_get_osfhandle(s),n,l) == SOCKET_ERROR) {
00443 errno = WSAGetLastError();
00444 return -1;
00445 } else
00446 return 0;
00447 }
00448
00449 inline
00450 int connect(int s, const struct sockaddr * n, int l)
00451 {
00452 if (::connect(_get_osfhandle(s),n,l) == SOCKET_ERROR) {
00453 if (WSAEMFILE == (errno = WSAGetLastError()))
00454 errno = EMFILE;
00455 return -1;
00456 } else
00457 return 0;
00458 }
00459
00460 inline
00461 struct hostent * gethostbyname (const char *n) {
00462 HOSTENT FAR * result;
00463 if ((result = ::gethostbyname(n)) == NULL)
00464 errno = WSAGetLastError();
00465 return result;
00466 }
00467 #define gethostbyname(n) Squid::gethostbyname(n)
00468
00469 inline
00470 SERVENT FAR* getservbyname (const char * n, const char * p)
00471 {
00472 SERVENT FAR * result;
00473 if ((result = ::getservbyname(n, p)) == NULL)
00474 errno = WSAGetLastError();
00475 return result;
00476 }
00477 #define getservbyname(n,p) Squid::getservbyname(n,p)
00478
00479 inline
00480 HOSTENT FAR * gethostbyaddr(const char * a, int l, int t)
00481 {
00482 HOSTENT FAR * result;
00483 if ((result = ::gethostbyaddr(a, l, t)) == NULL)
00484 errno = WSAGetLastError();
00485 return result;
00486 }
00487 #define gethostbyaddr(a,l,t) Squid::gethostbyaddr(a,l,t)
00488
00489 inline
00490 int getsockname(int s, struct sockaddr * n, size_t * l)
00491 {
00492 if ((::getsockname(_get_osfhandle(s), n, (int *)l)) == SOCKET_ERROR) {
00493 errno = WSAGetLastError();
00494 return -1;
00495 } else
00496 return 0;
00497 }
00498
00499 inline
00500 int gethostname(char * n, size_t l)
00501 {
00502 if ((::gethostname(n, l)) == SOCKET_ERROR) {
00503 errno = WSAGetLastError();
00504 return -1;
00505 } else
00506 return 0;
00507 }
00508 #define gethostname(n,l) Squid::gethostname(n,l)
00509
00510 inline
00511 int getsockopt(int s, int l, int o, void * v, int * n)
00512 {
00513 Sleep(1);
00514 if ((::getsockopt(_get_osfhandle(s), l, o,(char *) v, n)) == SOCKET_ERROR) {
00515 errno = WSAGetLastError();
00516 return -1;
00517 } else
00518 return 0;
00519 }
00520
00521
00522 inline
00523 int ioctl(int s, int c, void * a)
00524 {
00525 if ((::ioctlsocket(_get_osfhandle(s), c, (u_long FAR *)a)) == SOCKET_ERROR) {
00526 errno = WSAGetLastError();
00527 return -1;
00528 } else
00529 return 0;
00530 }
00531
00532 inline
00533 int ioctlsocket(int s, long c, u_long FAR * a)
00534 {
00535 if ((::ioctlsocket(_get_osfhandle(s), c, a)) == SOCKET_ERROR) {
00536 errno = WSAGetLastError();
00537 return -1;
00538 } else
00539 return 0;
00540 }
00541
00542 inline
00543 int listen(int s, int b)
00544 {
00545 if (::listen(_get_osfhandle(s), b) == SOCKET_ERROR) {
00546 if (WSAEMFILE == (errno = WSAGetLastError()))
00547 errno = EMFILE;
00548 return -1;
00549 } else
00550 return 0;
00551 }
00552 #define listen(s,b) Squid::listen(s,b)
00553
00554 inline
00555 int recv(int s, void * b, size_t l, int f)
00556 {
00557 int result;
00558 if ((result = ::recv(_get_osfhandle(s), (char *)b, l, f)) == SOCKET_ERROR) {
00559 errno = WSAGetLastError();
00560 return -1;
00561 } else
00562 return result;
00563 }
00564
00565 inline
00566 int recvfrom(int s, void * b, size_t l, int f, struct sockaddr * fr, size_t * fl)
00567 {
00568 int result;
00569 if ((result = ::recvfrom(_get_osfhandle(s), (char *)b, l, f, fr, (int *)fl)) == SOCKET_ERROR) {
00570 errno = WSAGetLastError();
00571 return -1;
00572 } else
00573 return result;
00574 }
00575
00576 inline
00577 int select(int n, fd_set * r, fd_set * w, fd_set * e, struct timeval * t)
00578 {
00579 int result;
00580 if ((result = ::select(n,r,w,e,t)) == SOCKET_ERROR) {
00581 errno = WSAGetLastError();
00582 return -1;
00583 } else
00584 return result;
00585 }
00586 #define select(n,r,w,e,t) Squid::select(n,r,w,e,t)
00587
00588 inline
00589 int send(int s, const void * b, size_t l, int f)
00590 {
00591 int result;
00592 if ((result = ::send(_get_osfhandle(s), (char *)b, l, f)) == SOCKET_ERROR) {
00593 errno = WSAGetLastError();
00594 return -1;
00595 } else
00596 return result;
00597 }
00598
00599 inline
00600 int sendto(int s, const void * b, size_t l, int f, const struct sockaddr * t, int tl)
00601 {
00602 int result;
00603 if ((result = ::sendto(_get_osfhandle(s), (char *)b, l, f, t, tl)) == SOCKET_ERROR) {
00604 errno = WSAGetLastError();
00605 return -1;
00606 } else
00607 return result;
00608 }
00609
00610 inline
00611 int setsockopt(SOCKET s, int l, int o, const char * v, int n)
00612 {
00613 SOCKET socket;
00614
00615 socket = ((s == INVALID_SOCKET) ? s : (SOCKET)_get_osfhandle((int)s));
00616
00617 if (::setsockopt(socket, l, o, v, n) == SOCKET_ERROR) {
00618 errno = WSAGetLastError();
00619 return -1;
00620 } else
00621 return 0;
00622 }
00623 #define setsockopt(s,l,o,v,n) Squid::setsockopt(s,l,o,v,n)
00624
00625 inline
00626 int shutdown(int s, int h)
00627 {
00628 if (::shutdown(_get_osfhandle(s),h) == SOCKET_ERROR) {
00629 errno = WSAGetLastError();
00630 return -1;
00631 } else
00632 return 0;
00633 }
00634
00635 inline
00636 int socket(int f, int t, int p)
00637 {
00638 SOCKET result;
00639 if ((result = ::socket(f, t, p)) == INVALID_SOCKET) {
00640 if (WSAEMFILE == (errno = WSAGetLastError()))
00641 errno = EMFILE;
00642 return -1;
00643 } else
00644 return _open_osfhandle(result, 0);
00645 }
00646 #define socket(f,t,p) Squid::socket(f,t,p)
00647
00648 inline
00649 int WSAAsyncSelect(int s, HWND h, unsigned int w, long e)
00650 {
00651 if (::WSAAsyncSelect(_get_osfhandle(s), h, w, e) == SOCKET_ERROR) {
00652 errno = WSAGetLastError();
00653 return -1;
00654 } else
00655 return 0;
00656 }
00657
00658 #undef WSADuplicateSocket
00659 inline
00660 int WSADuplicateSocket(int s, DWORD n, LPWSAPROTOCOL_INFO l)
00661 {
00662 #ifdef UNICODE
00663 if (::WSADuplicateSocketW(_get_osfhandle(s), n, l) == SOCKET_ERROR) {
00664 #else
00665 if (::WSADuplicateSocketA(_get_osfhandle(s), n, l) == SOCKET_ERROR) {
00666 #endif
00667 errno = WSAGetLastError();
00668 return -1;
00669 } else
00670 return 0;
00671 }
00672
00673 #undef WSASocket
00674 inline
00675 int WSASocket(int a, int t, int p, LPWSAPROTOCOL_INFO i, GROUP g, DWORD f)
00676 {
00677 SOCKET result;
00678 #ifdef UNICODE
00679 if ((result = ::WSASocketW(a, t, p, i, g, f)) == INVALID_SOCKET) {
00680 #else
00681 if ((result = ::WSASocketA(a, t, p, i, g, f)) == INVALID_SOCKET) {
00682 #endif
00683 if (WSAEMFILE == (errno = WSAGetLastError()))
00684 errno = EMFILE;
00685 return -1;
00686 } else
00687 return _open_osfhandle(result, 0);
00688 }
00689
00690 }
00691
00692 #else
00693 #define connect(s,n,l) \
00694 (SOCKET_ERROR == connect(_get_osfhandle(s),n,l) ? \
00695 (WSAEMFILE == (errno = WSAGetLastError()) ? errno = EMFILE : -1, -1) : 0)
00696 #define gethostbyname(n) \
00697 (NULL == ((HOSTENT FAR*)(ws32_result = (int)gethostbyname(n))) ? \
00698 (errno = WSAGetLastError()), (HOSTENT FAR*)NULL : (HOSTENT FAR*)ws32_result)
00699 #define gethostname(n,l) \
00700 (SOCKET_ERROR == gethostname(n,l) ? \
00701 (errno = WSAGetLastError()), -1 : 0)
00702 #define recv(s,b,l,f) \
00703 (SOCKET_ERROR == (ws32_result = recv(_get_osfhandle(s),b,l,f)) ? \
00704 (errno = WSAGetLastError()), -1 : ws32_result)
00705 #define sendto(s,b,l,f,t,tl) \
00706 (SOCKET_ERROR == (ws32_result = sendto(_get_osfhandle(s),b,l,f,t,tl)) ? \
00707 (errno = WSAGetLastError()), -1 : ws32_result)
00708 #define select(n,r,w,e,t) \
00709 (SOCKET_ERROR == (ws32_result = select(n,r,w,e,t)) ? \
00710 (errno = WSAGetLastError()), -1 : ws32_result)
00711 #define socket(f,t,p) \
00712 (INVALID_SOCKET == ((SOCKET)(ws32_result = (int)socket(f,t,p))) ? \
00713 ((WSAEMFILE == (errno = WSAGetLastError()) ? errno = EMFILE : -1), -1) : \
00714 (SOCKET)_open_osfhandle(ws32_result,0))
00715 #define write _write
00716 #define open _open
00717 #endif
00718
00719 #if HAVE_SYS_RESOURCE_H
00720 #include <sys/resource.h>
00721 #else
00722 #define RUSAGE_SELF 0
00723 #define RUSAGE_CHILDREN -1
00724
00725 struct rusage {
00726 struct timeval ru_utime;
00727 struct timeval ru_stime;
00728 long ru_maxrss;
00729 long ru_ixrss;
00730 long ru_idrss;
00731 long ru_isrss;
00732 long ru_minflt;
00733 long ru_majflt;
00734 long ru_nswap;
00735 long ru_inblock;
00736 long ru_oublock;
00737 long ru_msgsnd;
00738 long ru_msgrcv;
00739 long ru_nsignals;
00740 long ru_nvcsw;
00741 long ru_nivcsw;
00742 };
00743 #endif
00744
00745 #undef ACL
00746
00747 #if !defined(getpagesize)
00748
00749 SQUIDCEXTERN size_t getpagesize(void);
00750 #endif
00751
00752 #endif
00753 #endif