diff src/os/unix/ngx_files.c @ 110:dad2fe8ecf08 NGINX_0_3_2

nginx 0.3.2 *) Feature: the Sun Studio 10 C compiler support. *) Feature: the "proxy_upstream_max_fails", "proxy_upstream_fail_timeout", "fastcgi_upstream_max_fails", and "fastcgi_upstream_fail_timeout" directives.
author Igor Sysoev <http://sysoev.ru>
date Wed, 12 Oct 2005 00:00:00 +0400
parents 72eb30262aac
children df17fbafec8f
line wrap: on
line diff
--- a/src/os/unix/ngx_files.c
+++ b/src/os/unix/ngx_files.c
@@ -8,9 +8,10 @@
 #include <ngx_core.h>
 
 
-ssize_t ngx_read_file(ngx_file_t *file, u_char *buf, size_t size, off_t offset)
+ssize_t
+ngx_read_file(ngx_file_t *file, u_char *buf, size_t size, off_t offset)
 {
-    ssize_t n;
+    ssize_t  n;
 
     ngx_log_debug4(NGX_LOG_DEBUG_CORE, file->log, 0,
                    "read: %d, %p, %uz, %O", file->fd, buf, size, offset);
@@ -53,9 +54,10 @@ ssize_t ngx_read_file(ngx_file_t *file, 
 }
 
 
-ssize_t ngx_write_file(ngx_file_t *file, u_char *buf, size_t size, off_t offset)
+ssize_t
+ngx_write_file(ngx_file_t *file, u_char *buf, size_t size, off_t offset)
 {
-    ssize_t n;
+    ssize_t  n;
 
     ngx_log_debug4(NGX_LOG_DEBUG_CORE, file->log, 0,
                    "write: %d, %p, %uz, %O", file->fd, buf, size, offset);
@@ -109,7 +111,8 @@ ssize_t ngx_write_file(ngx_file_t *file,
 }
 
 
-ngx_fd_t ngx_open_tempfile(u_char *name, ngx_uint_t persistent)
+ngx_fd_t
+ngx_open_tempfile(u_char *name, ngx_uint_t persistent)
 {
     ngx_fd_t  fd;
 
@@ -125,8 +128,9 @@ ngx_fd_t ngx_open_tempfile(u_char *name,
 
 #define NGX_IOVS  8
 
-ssize_t ngx_write_chain_to_file(ngx_file_t *file, ngx_chain_t *cl,
-                                off_t offset, ngx_pool_t *pool)
+ssize_t
+ngx_write_chain_to_file(ngx_file_t *file, ngx_chain_t *cl, off_t offset,
+    ngx_pool_t *pool)
 {
     u_char        *prev;
     size_t         size;
@@ -216,7 +220,8 @@ ssize_t ngx_write_chain_to_file(ngx_file
 }
 
 
-ngx_int_t ngx_open_dir(ngx_str_t *name, ngx_dir_t *dir)
+ngx_int_t
+ngx_open_dir(ngx_str_t *name, ngx_dir_t *dir)
 {
     dir->dir = opendir((const char *) name->data);
 
@@ -228,3 +233,61 @@ ngx_int_t ngx_open_dir(ngx_str_t *name, 
 
     return NGX_OK;
 }
+
+
+ngx_int_t
+ngx_lock_file(ngx_file_t *file)
+{
+    ngx_err_t     err;
+    struct flock  fl;
+
+    fl.l_whence = SEEK_SET;
+    fl.l_len = 0;
+    fl.l_pid = 0;
+    fl.l_type = F_WRLCK;
+    fl.l_start = 0;
+
+    if (fcntl(file->fd, F_SETLK, &fl) == -1) {
+        err = ngx_errno;
+
+        if (err == NGX_EAGAIN) {
+            return NGX_BUSY;
+        }
+
+        ngx_log_error(NGX_LOG_ALERT, file->log, err,
+                      "fcntl(%s, F_SETLK, F_WRLCK) failed", file->name.data);
+
+        return NGX_ERROR;
+    }
+
+    return NGX_OK;
+}
+
+
+ngx_int_t
+ngx_unlock_file(ngx_file_t *file)
+{
+    ngx_err_t     err;
+    struct flock  fl;
+
+    fl.l_whence = SEEK_SET;
+    fl.l_len = 0;
+    fl.l_pid = 0;
+    fl.l_type = F_UNLCK;
+    fl.l_start = 0;
+
+    if (fcntl(file->fd, F_SETLK, &fl) == -1) {
+        err = ngx_errno;
+
+        if (err == NGX_EAGAIN) {
+            return NGX_BUSY;
+        }
+
+        ngx_log_error(NGX_LOG_ALERT, file->log, err,
+                      "fcntl(%s, F_SETLK, F_UNLCK) failed", file->name.data);
+
+        return NGX_ERROR;
+    }
+
+    return NGX_OK;
+}