diff options
Diffstat (limited to '')
| -rw-r--r-- | src/os/win32/ngx_errno.h | 1 | ||||
| -rw-r--r-- | src/os/win32/ngx_file.h | 52 | ||||
| -rw-r--r-- | src/os/win32/ngx_sendfile.c | 14 | ||||
| -rw-r--r-- | src/os/win32/ngx_sendfile.h | 1 | ||||
| -rw-r--r-- | src/os/win32/ngx_socket.c | 17 | ||||
| -rw-r--r-- | src/os/win32/ngx_socket.h | 7 | ||||
| -rw-r--r-- | src/os/win32/ngx_stat.c | 13 | ||||
| -rw-r--r-- | src/os/win32/ngx_stat.h | 10 | ||||
| -rw-r--r-- | src/os/win32/ngx_time.h | 2 | ||||
| -rw-r--r-- | src/os/win32/ngx_types.h | 1 |
10 files changed, 105 insertions, 13 deletions
diff --git a/src/os/win32/ngx_errno.h b/src/os/win32/ngx_errno.h index dc4cd5044..5197fdd17 100644 --- a/src/os/win32/ngx_errno.h +++ b/src/os/win32/ngx_errno.h @@ -11,6 +11,7 @@ typedef DWORD ngx_err_t; #define NGX_ENOENT ERROR_FILE_NOT_FOUND #define NGX_EAGAIN WSAEWOULDBLOCK +#define NGX_EADDRINUSE WSAEADDRINUSE int ngx_strerror_r(ngx_err_t err, char *errstr, size_t size); diff --git a/src/os/win32/ngx_file.h b/src/os/win32/ngx_file.h new file mode 100644 index 000000000..cae823f5e --- /dev/null +++ b/src/os/win32/ngx_file.h @@ -0,0 +1,52 @@ +#ifndef _NGX_FILE_H_INCLUDED_ +#define _NGX_FILE_H_INCLUDED_ + + +#include <ngx_config.h> + + +/* INVALID_FILE_ATTRIBUTES specified but never defined at least in VC6SP2 */ +#ifndef INVALID_FILE_ATTRIBUTES +#define INVALID_FILE_ATTRIBUTES 0xFFFFFFFF +#endif + +typedef HANDLE ngx_file_t; +typedef BY_HANDLE_FILE_INFORMATION ngx_file_info_t; + + +#define ngx_open_file(name, flags) \ + CreateFile(name, flags, \ + FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, \ + NULL, OPEN_EXISTING, 0, NULL) + +#define ngx_open_file_n "CreateFile" + +#define NGX_FILE_RDONLY GENERIC_READ + + +int ngx_file_type(char *filename, ngx_file_info_t *fi); +#define ngx_file_type_n "GetFileAttributes" + +#define ngx_stat_fd(fd, fi) GetFileInformationByHandle(fd, fi) +#define ngx_stat_fd_n "GetFileInformationByHandle" + +#define ngx_is_dir(fi) (fi.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) + +#define ngx_file_size(fi) \ + fi.nFileSizeLow + +/* +#define ngx_file_size(fi) \ + ((off_t) fi.nFileSizeHigh << 32 & fi.nFileSizeLow) +*/ + +#define ngx_file_mtime(fi) fi.ftLastWriteTime + +/* +1970 - 1601: + 116444736000000000 + 19DB1DED53E8000 +*/ + + +#endif /* _NGX_FILE_H_INCLUDED_ */ diff --git a/src/os/win32/ngx_sendfile.c b/src/os/win32/ngx_sendfile.c index 922a4f1f5..d17df6436 100644 --- a/src/os/win32/ngx_sendfile.c +++ b/src/os/win32/ngx_sendfile.c @@ -1,6 +1,7 @@ #include <ngx_config.h> #include <ngx_types.h> +#include <ngx_socket.h> #include <ngx_errno.h> #include <ngx_log.h> #include <ngx_sendv.h> @@ -52,16 +53,22 @@ int ngx_sendfile(ngx_socket_t s, ptfb = NULL; } +#if 0 tfrc = TransmitFile(s, fd, nbytes, 0, &olp, ptfb, 0); +#else + tfrc = TransmitFile(s, fd, nbytes, 0, NULL, ptfb, 0); +#endif if (tfrc == 0) tf_err = ngx_socket_errno; /* set sent */ +#if 0 rc = WSAGetOverlappedResult(s, &olp, (unsigned long *) sent, 0, NULL); +#endif - ngx_log_debug(log, "ngx_sendfile: %d, @%qd %d:%qd" _ - tfrc _ offset _ nbytes _ *sent); + ngx_log_debug(log, "ngx_sendfile: %d, @%I64d %I64d:%d" _ + tfrc _ offset _ *sent _ nbytes); if (rc == 0) { err = ngx_socket_errno; @@ -77,7 +84,8 @@ int ngx_sendfile(ngx_socket_t s, } ngx_log_error(NGX_LOG_INFO, log, tf_err, - "ngx_sendfile: TransmitFile sent only %qd bytes", *sent); + "ngx_sendfile: TransmitFile sent only %I64d bytes", + *sent); } if (rc == 0) diff --git a/src/os/win32/ngx_sendfile.h b/src/os/win32/ngx_sendfile.h index 5bad2b926..053db8ec2 100644 --- a/src/os/win32/ngx_sendfile.h +++ b/src/os/win32/ngx_sendfile.h @@ -4,6 +4,7 @@ #include <ngx_config.h> #include <ngx_types.h> +#include <ngx_socket.h> #include <ngx_log.h> #include <ngx_sendv.h> diff --git a/src/os/win32/ngx_socket.c b/src/os/win32/ngx_socket.c index 590eb08e7..d0e547ca6 100644 --- a/src/os/win32/ngx_socket.c +++ b/src/os/win32/ngx_socket.c @@ -1,8 +1,8 @@ -#include <nxg_config.h> +#include <ngx_config.h> -#include <nxg_log.h> -#include <nxg_errno.h> -#include <nxg_socket.h> +#include <ngx_log.h> +#include <ngx_errno.h> +#include <ngx_socket.h> void ngx_init_sockets(ngx_log_t *log) @@ -12,6 +12,8 @@ void ngx_init_sockets(ngx_log_t *log) if (WSAStartup(MAKEWORD(2,2), &wsd) != 0) ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno, "ngx_init_sockets: WSAStartup failed"); + + /* get AcceptEx(), TransmitFile() functions */ } int ngx_nonblocking(ngx_socket_t s) @@ -20,3 +22,10 @@ int ngx_nonblocking(ngx_socket_t s) return ioctlsocket(s, FIONBIO, &nb); } + +int ngx_blocking(ngx_socket_t s) +{ + unsigned long nb = 0; + + return ioctlsocket(s, FIONBIO, &nb); +} diff --git a/src/os/win32/ngx_socket.h b/src/os/win32/ngx_socket.h index 36ed26f69..7002795a7 100644 --- a/src/os/win32/ngx_socket.h +++ b/src/os/win32/ngx_socket.h @@ -3,14 +3,17 @@ #include <ngx_config.h> +#include <ngx_log.h> -typedef SOCKET ngx_socket_t; +typedef SOCKET ngx_socket_t; void ngx_init_sockets(ngx_log_t *log); int ngx_nonblocking_n(s); -#define ngx_nonblocking_n "ioctlsocket (FIONBIO)" +#define ngx_nonblocking_n "ioctlsocket (FIONBIO)" +#define ngx_close_socket closesocket +#define ngx_close_socket_n "closesocket" #endif /* _NGX_SOCKET_H_INCLUDED_ */ diff --git a/src/os/win32/ngx_stat.c b/src/os/win32/ngx_stat.c index 5b1af3014..5c844b14f 100644 --- a/src/os/win32/ngx_stat.c +++ b/src/os/win32/ngx_stat.c @@ -3,6 +3,18 @@ #include <ngx_stat.h> +int ngx_file_type(char *file, ngx_file_info_t *sb) +{ + sb->dwFileAttributes = GetFileAttributes(file); + + if (sb->dwFileAttributes == INVALID_FILE_ATTRIBUTES) { + return -1; + } + + return 0; +} + +/* int ngx_stat(char *file, ngx_stat_t *sb) { *sb = GetFileAttributes(file); @@ -13,3 +25,4 @@ int ngx_stat(char *file, ngx_stat_t *sb) return 0; } +*/ diff --git a/src/os/win32/ngx_stat.h b/src/os/win32/ngx_stat.h index 600facd3e..6daf4e66e 100644 --- a/src/os/win32/ngx_stat.h +++ b/src/os/win32/ngx_stat.h @@ -4,15 +4,17 @@ #include <windows.h> -/* INVALID_FILE_ATTRIBUTES specified but never defined */ +/* INVALID_FILE_ATTRIBUTES specified but never defined at least in VC6SP2 */ #ifndef INVALID_FILE_ATTRIBUTES #define INVALID_FILE_ATTRIBUTES 0xFFFFFFFF #endif -typedef DWORD ngx_stat_t; +typedef BY_HANDLE_FILE_INFORMATION ngx_file_info_t; -#define ngx_is_dir(sb) (*sb & FILE_ATTRIBUTE_DIRECTORY) +#define ngx_file_type_n "GetFileAttributes" + +#define ngx_is_dir(fi) (fi.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) #define ngx_stat_n "GetFileAttributes" @@ -20,7 +22,9 @@ typedef DWORD ngx_stat_t; #define ngx_fstat_n "GetFileAttributes" +/* int ngx_stat(char *file, ngx_stat_t *sb); +*/ #endif /* _NGX_STAT_H_INCLUDED_ */ diff --git a/src/os/win32/ngx_time.h b/src/os/win32/ngx_time.h index 57915ac1a..be932445a 100644 --- a/src/os/win32/ngx_time.h +++ b/src/os/win32/ngx_time.h @@ -5,6 +5,7 @@ #include <windows.h> typedef SYSTEMTIME ngx_tm_t; +typedef FILETIME ngx_mtime_t; #define ngx_tm_sec wSecond #define ngx_tm_min wMinute @@ -14,6 +15,7 @@ typedef SYSTEMTIME ngx_tm_t; #define ngx_tm_year wYear #define ngx_tm_wday wDayOfWeek +#define ngx_msleep Sleep #define ngx_localtime GetLocalTime #define ngx_msec GetTickCount diff --git a/src/os/win32/ngx_types.h b/src/os/win32/ngx_types.h index 5715e3fc4..85a2c56d0 100644 --- a/src/os/win32/ngx_types.h +++ b/src/os/win32/ngx_types.h @@ -6,7 +6,6 @@ typedef HANDLE ngx_file_t; -typedef SOCKET ngx_socket_t; typedef long time_t; typedef unsigned __int64 off_t; |
