nginx-0.0.1-2002-08-23-20:14:30 import
diff --git a/src/os/unix/ngx_errno.h b/src/os/unix/ngx_errno.h
index 2649fe9..dd66db2 100644
--- a/src/os/unix/ngx_errno.h
+++ b/src/os/unix/ngx_errno.h
@@ -12,8 +12,9 @@
 #define NGX_EAGAIN        EWOULDBLOCK
 #define NGX_EADDRINUSE    EADDRINUSE
 
-#define ngx_errno         errno
-#define ngx_socket_errno  errno
+#define ngx_errno                  errno
+#define ngx_socket_errno           errno
+#define ngx_set_socket_errno(err)  errno = err
 
 #define ngx_strerror_r(err, errstr, size)  \
              ngx_cpystrn(errstr, strerror(err), size) - (errstr)
diff --git a/src/os/unix/ngx_file.c b/src/os/unix/ngx_file.c
new file mode 100644
index 0000000..1b05b92
--- /dev/null
+++ b/src/os/unix/ngx_file.c
@@ -0,0 +1,61 @@
+
+
+ssize_t ngx_read_file(ngx_file_t file, char *buf, size_t size)
+{
+    read();
+}
+
+#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
index 0e05b84..5fda896 100644
--- a/src/os/unix/ngx_file.h
+++ b/src/os/unix/ngx_file.h
@@ -10,16 +10,19 @@
 
 
 #define ngx_open_file            open
-#define ngx_open_file_n          "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_file_type_n          "stat()"
 
 #define ngx_stat_fd(fd, sb)      fstat(fd, sb)
-#define ngx_stat_fd_n            "fstat"
+#define ngx_stat_fd_n            "fstat()"
 
 #define ngx_is_dir(sb)           (S_ISDIR(sb.st_mode))
 #define ngx_file_size(sb)        sb.st_size