From a58e3ca14300fce97b2124233afe140c8d59199f Mon Sep 17 00:00:00 2001 From: Igor Sysoev Date: Mon, 2 Sep 2002 14:48:24 +0000 Subject: nginx-0.0.1-2002-09-02-18:48:24 import --- src/os/unix/freebsd/ngx_sendfile.c | 11 ++---- src/os/unix/ngx_file.c | 61 -------------------------------- src/os/unix/ngx_file.h | 32 ----------------- src/os/unix/ngx_files.c | 72 ++++++++++++++++++++++++++++++++++++++ src/os/unix/ngx_files.h | 31 ++++++++++++++++ src/os/unix/ngx_sendfile.h | 2 +- src/os/unix/ngx_sendv.c | 9 +++-- src/os/unix/ngx_time.h | 4 ++- src/os/win32/ngx_errno.h | 6 ++-- src/os/win32/ngx_file.h | 54 ---------------------------- src/os/win32/ngx_files.c | 18 ++++++++++ src/os/win32/ngx_files.h | 57 ++++++++++++++++++++++++++++++ src/os/win32/ngx_sendfile.c | 24 +++++-------- src/os/win32/ngx_sendfile.h | 3 +- src/os/win32/ngx_socket.h | 6 +++- src/os/win32/ngx_time.h | 2 ++ src/os/win32/ngx_types.h | 1 + 17 files changed, 214 insertions(+), 179 deletions(-) delete mode 100644 src/os/unix/ngx_file.c delete mode 100644 src/os/unix/ngx_file.h create mode 100644 src/os/unix/ngx_files.c create mode 100644 src/os/unix/ngx_files.h delete mode 100644 src/os/win32/ngx_file.h create mode 100644 src/os/win32/ngx_files.c create mode 100644 src/os/win32/ngx_files.h (limited to 'src/os') diff --git a/src/os/unix/freebsd/ngx_sendfile.c b/src/os/unix/freebsd/ngx_sendfile.c index 1b6077409..ff577db7d 100644 --- a/src/os/unix/freebsd/ngx_sendfile.c +++ b/src/os/unix/freebsd/ngx_sendfile.c @@ -1,5 +1,6 @@ #include +#include #include #include #include @@ -14,12 +15,6 @@ check sent if errno == EINTR then should return right sent. */ -/* - returns - 0 done - -1 error -*/ - #if (HAVE_FREEBSD_SENDFILE) int ngx_sendfile(ngx_socket_t s, @@ -50,7 +45,7 @@ int ngx_sendfile(ngx_socket_t s, if (err != NGX_EAGAIN && err != NGX_EINTR) { ngx_log_error(NGX_LOG_ERR, log, err, "ngx_sendfile: sendfile failed"); - return -1; + return NGX_ERROR; } else { ngx_log_error(NGX_LOG_INFO, log, err, @@ -61,7 +56,7 @@ int ngx_sendfile(ngx_socket_t s, ngx_log_debug(log, "ngx_sendfile: %d, @%qd %qd:%d" _ rc _ offset _ *sent _ nbytes); - return 0; + return NGX_OK; } #endif diff --git a/src/os/unix/ngx_file.c b/src/os/unix/ngx_file.c deleted file mode 100644 index 69b69752e..000000000 --- a/src/os/unix/ngx_file.c +++ /dev/null @@ -1,61 +0,0 @@ - - -ssize_t ngx_read_file(ngx_file_t file, char *buf, size_t size, off_t offset) -{ - return pread(file->fd, buf, size, offset); -} - -#if 0 - -ssize_t ngx_read_file(ngx_file_t *file, char *buf, size_t size, off_t offset) -{ - if (!file->read->ready) { - - ngx_memzero(&file->iocb, sizeof(iocb)); - file->iocb.aio_fildes = file->fd; - file->iocb.aio_buf = buf; - file->iocb.aio_nbytes = size; - file->iocb.aio_offset = offset; -#if (USE_AIO_KQUEUE) - file->iocb.aio_sigevent.sigev_notify = SIGEV_KEVENT; - file->iocb.aio_sigevent.sigev_notify_kqueue = tid->kq; - file->iocb.aio_sigevent.sigev_value = (union sigval) file; -#endif -#if (USE_AIO_SIGNAL) - file->iocb.aio_sigevent.sigev_notify = SIGEV_SIGNAL; - file->iocb.aio_sigevent.sigev_signo = NGX_SIGAIO; -#ifndef __FreeBSD__ - file->iocb.aio_sigevent.sigev_value.sival_ptr = file; -#endif -#endif - - if (aio_read(&file->iocb) == -1) { - ngx_log_error(NGX_LOG_ERR, file->log, ngx_errno, - "aio_read() failed"); - return NGX_ERROR; - - n = aio_error(&file->iocb); - if (n == EINPROGRESS) - return NGX_AGAIN; - - if (n == -1) { - ngx_log_error(NGX_LOG_ERR, file->log, ngx_errno, - "aio_read() failed"); - return NGX_ERROR; - } - } - - ngx_assert(file->iocb.aio_buf == buf), return NGX_ERROR, - "ngx_aio_read_file: another buffer is passed"); - - n = aio_return(&file->iocb); - if (n == -1) { - ngx_log_error(NGX_LOG_ERR, file->log, ngx_errno, - "aio_read() failed"); - return NGX_ERROR; - } - - return n; -} - -#endif diff --git a/src/os/unix/ngx_file.h b/src/os/unix/ngx_file.h deleted file mode 100644 index 33ba6d8cb..000000000 --- a/src/os/unix/ngx_file.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef _NGX_FILE_H_INCLUDED_ -#define _NGX_FILE_H_INCLUDED_ - - -#include -#include - -typedef int ngx_fd_t; -typedef struct stat ngx_file_info_t; - - -#define ngx_open_file open -#define ngx_open_file_n "open()" - -#define ngx_read_file read -#define ngx_read_file_n "read()" - -#define NGX_FILE_RDONLY O_RDONLY - - -#define ngx_file_type(file, sb) stat(file, sb) -#define ngx_file_type_n "stat()" - -#define ngx_stat_fd(fd, sb) fstat(fd, sb) -#define ngx_stat_fd_n "fstat()" - -#define ngx_is_dir(sb) (S_ISDIR(sb.st_mode)) -#define ngx_file_size(sb) sb.st_size -#define ngx_file_mtime(sb) sb.st_mtime - - -#endif /* _NGX_FILE_H_INCLUDED_ */ diff --git a/src/os/unix/ngx_files.c b/src/os/unix/ngx_files.c new file mode 100644 index 000000000..a3dc36ddb --- /dev/null +++ b/src/os/unix/ngx_files.c @@ -0,0 +1,72 @@ + +#include +#include + +ssize_t ngx_read_file(ngx_file_t *file, char *buf, size_t size, off_t offset) +{ + ssize_t n; + + ngx_log_debug(file->log, "read: %x, %d, %qd" _ buf _ size _ offset); + + n = pread(file->fd, buf, size, offset); + + if (n == NGX_ERROR) + ngx_log_error(NGX_LOG_ERR, file->log, ngx_errno, "read() failed"); + + return n; +} + +#if 0 + +ssize_t ngx_read_file(ngx_file_t *file, char *buf, size_t size, off_t offset) +{ + if (!file->read->ready) { + + ngx_memzero(&file->iocb, sizeof(iocb)); + file->iocb.aio_fildes = file->fd; + file->iocb.aio_buf = buf; + file->iocb.aio_nbytes = size; + file->iocb.aio_offset = offset; +#if (USE_AIO_KQUEUE) + file->iocb.aio_sigevent.sigev_notify = SIGEV_KEVENT; + file->iocb.aio_sigevent.sigev_notify_kqueue = tid->kq; + file->iocb.aio_sigevent.sigev_value = (union sigval) file; +#endif +#if (USE_AIO_SIGNAL) + file->iocb.aio_sigevent.sigev_notify = SIGEV_SIGNAL; + file->iocb.aio_sigevent.sigev_signo = NGX_SIGAIO; +#ifndef __FreeBSD__ + file->iocb.aio_sigevent.sigev_value.sival_ptr = file; +#endif +#endif + + if (aio_read(&file->iocb) == -1) { + ngx_log_error(NGX_LOG_ERR, file->log, ngx_errno, + "aio_read() failed"); + return NGX_ERROR; + + n = aio_error(&file->iocb); + if (n == EINPROGRESS) + return NGX_AGAIN; + + if (n == -1) { + ngx_log_error(NGX_LOG_ERR, file->log, ngx_errno, + "aio_read() failed"); + return NGX_ERROR; + } + } + + ngx_assert(file->iocb.aio_buf == buf), return NGX_ERROR, + "ngx_aio_read_file: another buffer is passed"); + + n = aio_return(&file->iocb); + if (n == -1) { + ngx_log_error(NGX_LOG_ERR, file->log, ngx_errno, + "aio_read() failed"); + return NGX_ERROR; + } + + return n; +} + +#endif diff --git a/src/os/unix/ngx_files.h b/src/os/unix/ngx_files.h new file mode 100644 index 000000000..9369db055 --- /dev/null +++ b/src/os/unix/ngx_files.h @@ -0,0 +1,31 @@ +#ifndef _NGX_FILES_H_INCLUDED_ +#define _NGX_FILES_H_INCLUDED_ + + +#include +#include + +typedef int ngx_fd_t; +typedef struct stat ngx_file_info_t; + + +#define ngx_open_file open +#define ngx_open_file_n "open()" + +#define ngx_read_file_n "read()" + +#define NGX_FILE_RDONLY O_RDONLY + + +#define ngx_file_type(file, sb) stat(file, sb) +#define ngx_file_type_n "stat()" + +#define ngx_stat_fd(fd, sb) fstat(fd, sb) +#define ngx_stat_fd_n "fstat()" + +#define ngx_is_dir(sb) (S_ISDIR(sb.st_mode)) +#define ngx_file_size(sb) sb.st_size +#define ngx_file_mtime(sb) sb.st_mtime + + +#endif /* _NGX_FILES_H_INCLUDED_ */ diff --git a/src/os/unix/ngx_sendfile.h b/src/os/unix/ngx_sendfile.h index 768e23cf1..c9a59235f 100644 --- a/src/os/unix/ngx_sendfile.h +++ b/src/os/unix/ngx_sendfile.h @@ -3,7 +3,7 @@ #include -#include +#include #include #include #include diff --git a/src/os/unix/ngx_sendv.c b/src/os/unix/ngx_sendv.c index 22838c2bb..dec16a1bc 100644 --- a/src/os/unix/ngx_sendv.c +++ b/src/os/unix/ngx_sendv.c @@ -1,15 +1,18 @@ +#include #include #include #include ssize_t ngx_sendv(ngx_socket_t s, ngx_iovec_t *iovec, int n, size_t *sent) { - ssize_t rc = writev(s, iovec, n); + ssize_t rc; + + rc = writev(s, iovec, n); if (rc == -1) - return -1; + return NGX_ERROR; *sent = rc; - return 0; + return NGX_OK; } diff --git a/src/os/unix/ngx_time.h b/src/os/unix/ngx_time.h index f81ee4efc..42bb7167c 100644 --- a/src/os/unix/ngx_time.h +++ b/src/os/unix/ngx_time.h @@ -4,6 +4,8 @@ #include +typedef u_int ngx_msec_t; + typedef struct tm ngx_tm_t; #define ngx_tm_sec tm_sec @@ -18,7 +20,7 @@ typedef struct tm ngx_tm_t; void ngx_localtime(ngx_tm_t *tm); -u_int ngx_msec(void); +ngx_msec_t ngx_msec(void); #endif /* _NGX_TIME_H_INCLUDED_ */ diff --git a/src/os/win32/ngx_errno.h b/src/os/win32/ngx_errno.h index 5197fdd17..bd20ddf36 100644 --- a/src/os/win32/ngx_errno.h +++ b/src/os/win32/ngx_errno.h @@ -6,12 +6,14 @@ typedef DWORD ngx_err_t; -#define ngx_errno GetLastError() -#define ngx_socket_errno WSAGetLastError() +#define ngx_errno GetLastError() +#define ngx_socket_errno WSAGetLastError() +#define ngx_set_socket_errno(err) WSASetLastError(err) #define NGX_ENOENT ERROR_FILE_NOT_FOUND #define NGX_EAGAIN WSAEWOULDBLOCK #define NGX_EADDRINUSE WSAEADDRINUSE +#define NGX_ETIMEDOUT WSAETIMEDOUT 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 deleted file mode 100644 index aaae84bf6..000000000 --- a/src/os/win32/ngx_file.h +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef _NGX_FILE_H_INCLUDED_ -#define _NGX_FILE_H_INCLUDED_ - - -#include - - -/* INVALID_FILE_ATTRIBUTES specified but never defined at least in VC6SP2 */ -#ifndef INVALID_FILE_ATTRIBUTES -#define INVALID_FILE_ATTRIBUTES 0xFFFFFFFF -#endif - -typedef HANDLE ngx_fd_t; -typedef unsigned __int64 off_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_files.c b/src/os/win32/ngx_files.c new file mode 100644 index 000000000..8a919017c --- /dev/null +++ b/src/os/win32/ngx_files.c @@ -0,0 +1,18 @@ + +#include +#include +#include + +ssize_t ngx_read_file(ngx_file_t *file, char *buf, size_t size, off_t offset) +{ + size_t n; + + if (ReadFile(file->fd, buf, size, &n, NULL) == 0) { + ngx_log_error(NGX_LOG_ERR, file->log, ngx_errno, "ReadFile() failed"); + return NGX_ERROR; + } + + return n; +} + + diff --git a/src/os/win32/ngx_files.h b/src/os/win32/ngx_files.h new file mode 100644 index 000000000..bddfe0d54 --- /dev/null +++ b/src/os/win32/ngx_files.h @@ -0,0 +1,57 @@ +#ifndef _NGX_FILES_H_INCLUDED_ +#define _NGX_FILES_H_INCLUDED_ + + +#include + + +/* INVALID_FILE_ATTRIBUTES specified but never defined at least in VC6SP2 */ +#ifndef INVALID_FILE_ATTRIBUTES +#define INVALID_FILE_ATTRIBUTES 0xFFFFFFFF +#endif + +typedef HANDLE ngx_fd_t; +typedef unsigned __int64 off_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 +*/ + + +#define ngx_read_file_n "ReadFile()" + + +#endif /* _NGX_FILES_H_INCLUDED_ */ diff --git a/src/os/win32/ngx_sendfile.c b/src/os/win32/ngx_sendfile.c index c41b3b319..560f50f7b 100644 --- a/src/os/win32/ngx_sendfile.c +++ b/src/os/win32/ngx_sendfile.c @@ -1,6 +1,8 @@ #include +#include #include +#include #include #include #include @@ -13,17 +15,11 @@ TransmitPackets */ -/* - returns - 0 done - -1 error -*/ - #if (HAVE_WIN32_TRANSMITFILE) int ngx_sendfile(ngx_socket_t s, ngx_iovec_t *headers, int hdr_cnt, - ngx_file_t fd, off_t offset, size_t nbytes, + ngx_fd_t fd, off_t offset, size_t nbytes, ngx_iovec_t *trailers, int trl_cnt, off_t *sent, ngx_log_t *log) @@ -65,15 +61,13 @@ int ngx_sendfile(ngx_socket_t s, /* set sent */ #if 0 rc = WSAGetOverlappedResult(s, &olp, (unsigned long *) sent, 0, NULL); +#else + *sent = olp.InternalHigh; + rc = 1; #endif -#if 0 ngx_log_debug(log, "ngx_sendfile: %d, @%I64d %I64d:%d" _ tfrc _ offset _ *sent _ nbytes); -#else - ngx_log_debug(log, "ngx_sendfile: %d, @%I64d %d:%d" _ - tfrc _ offset _ olp.InternalHigh _ nbytes); -#endif if (rc == 0) { err = ngx_socket_errno; @@ -85,7 +79,7 @@ int ngx_sendfile(ngx_socket_t s, if (tf_err != NGX_EAGAIN) { ngx_log_error(NGX_LOG_ERR, log, tf_err, "ngx_sendfile: TransmitFile failed"); - return -1; + return NGX_ERROR; } ngx_log_error(NGX_LOG_INFO, log, tf_err, @@ -94,9 +88,9 @@ int ngx_sendfile(ngx_socket_t s, } if (rc == 0) - return -1; + return NGX_ERROR; - return 0; + return NGX_OK; } #endif diff --git a/src/os/win32/ngx_sendfile.h b/src/os/win32/ngx_sendfile.h index 053db8ec2..a80750bef 100644 --- a/src/os/win32/ngx_sendfile.h +++ b/src/os/win32/ngx_sendfile.h @@ -4,13 +4,14 @@ #include #include +#include #include #include #include int ngx_sendfile(ngx_socket_t s, ngx_iovec_t *headers, int hdr_cnt, - ngx_file_t fd, off_t offset, size_t nbytes, + ngx_fd_t fd, off_t offset, size_t nbytes, ngx_iovec_t *trailers, int trl_cnt, off_t *sent, ngx_log_t *log); diff --git a/src/os/win32/ngx_socket.h b/src/os/win32/ngx_socket.h index 2708b5f2f..95e427cb1 100644 --- a/src/os/win32/ngx_socket.h +++ b/src/os/win32/ngx_socket.h @@ -5,7 +5,10 @@ #include #include +#define INET_ADDRSTRLEN 16 + typedef SOCKET ngx_socket_t; +typedef int socklen_t; void ngx_init_sockets(ngx_log_t *log); @@ -13,11 +16,12 @@ void ngx_init_sockets(ngx_log_t *log); WSASocket(af, type, proto, NULL, 0, flags) #define ngx_socket_n "WSASocket()" -int ngx_nonblocking_n(s); +int ngx_nonblocking(ngx_socket_t s); #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_time.h b/src/os/win32/ngx_time.h index be932445a..a810c70aa 100644 --- a/src/os/win32/ngx_time.h +++ b/src/os/win32/ngx_time.h @@ -4,6 +4,8 @@ #include +typedef unsigned int ngx_msec_t; + typedef SYSTEMTIME ngx_tm_t; typedef FILETIME ngx_mtime_t; diff --git a/src/os/win32/ngx_types.h b/src/os/win32/ngx_types.h index fdf6ccd76..7521633fe 100644 --- a/src/os/win32/ngx_types.h +++ b/src/os/win32/ngx_types.h @@ -5,6 +5,7 @@ #include +typedef int ssize_t; typedef long time_t; -- cgit