diff options
author | Igor Sysoev <igor@sysoev.ru> | 2002-09-02 14:48:24 +0000 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2002-09-02 14:48:24 +0000 |
commit | a58e3ca14300fce97b2124233afe140c8d59199f (patch) | |
tree | d24eff379cc7dfb5c6952f1bb15735cd63ba2179 /src/os/unix/ngx_files.c | |
parent | 016b85270268989d769bade2004a7c628a47d726 (diff) | |
download | nginx-a58e3ca14300fce97b2124233afe140c8d59199f.tar.gz nginx-a58e3ca14300fce97b2124233afe140c8d59199f.zip |
nginx-0.0.1-2002-09-02-18:48:24 import
Diffstat (limited to 'src/os/unix/ngx_files.c')
-rw-r--r-- | src/os/unix/ngx_files.c | 72 |
1 files changed, 72 insertions, 0 deletions
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 <ngx_core.h> +#include <ngx_file.h> + +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 |