Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nginx/nginx.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2009-03-30 11:43:06 +0400
committerIgor Sysoev <igor@sysoev.ru>2009-03-30 11:43:06 +0400
commit1be7419d10a4c2226783f280af9e2aa7ff48b738 (patch)
treeab1c63ea9b9edb9c1eddcc93c5c572230694ce4e
parenta1e9bfbc859490e25f4fff07ddc5441c9a91abcc (diff)
ngx_fs_bsize()
-rw-r--r--auto/headers12
-rw-r--r--auto/os/features24
-rw-r--r--auto/os/linux3
-rw-r--r--src/os/unix/ngx_files.c47
-rw-r--r--src/os/unix/ngx_files.h3
-rw-r--r--src/os/unix/ngx_freebsd_config.h1
-rw-r--r--src/os/unix/ngx_linux_config.h1
-rw-r--r--src/os/unix/ngx_posix_config.h6
-rw-r--r--src/os/unix/ngx_solaris_config.h1
-rw-r--r--src/os/win32/ngx_files.c20
-rw-r--r--src/os/win32/ngx_files.h2
11 files changed, 115 insertions, 5 deletions
diff --git a/auto/headers b/auto/headers
index 542b757c1..cdd5d294b 100644
--- a/auto/headers
+++ b/auto/headers
@@ -2,8 +2,10 @@
# Copyright (C) Igor Sysoev
-ngx_include="unistd.h"; . auto/include
-ngx_include="inttypes.h"; . auto/include
-ngx_include="limits.h"; . auto/include
-ngx_include="sys/filio.h"; . auto/include
-ngx_include="crypt.h"; . auto/include
+ngx_include="unistd.h"; . auto/include
+ngx_include="inttypes.h"; . auto/include
+ngx_include="limits.h"; . auto/include
+ngx_include="sys/filio.h"; . auto/include
+ngx_include="sys/mount.h"; . auto/include
+ngx_include="sys/statvfs.h"; . auto/include
+ngx_include="crypt.h"; . auto/include
diff --git a/auto/os/features b/auto/os/features
index ecb210da6..f00663c88 100644
--- a/auto/os/features
+++ b/auto/os/features
@@ -205,3 +205,27 @@ ngx_feature_path=
ngx_feature_libs=
ngx_feature_test="directio(0, DIRECTIO_ON);"
. auto/feature
+
+
+ngx_feature="statfs()"
+ngx_feature_name="NGX_HAVE_STATFS"
+ngx_feature_run=no
+ngx_feature_incs="$NGX_INCLUDE_SYS_MOUNT_H
+ $NGX_INCLUDE_SYS_VFS_H"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="struct statfs fs;
+ statfs(NULL, &fs);"
+. auto/feature
+
+
+ngx_feature="statvfs()"
+ngx_feature_name="NGX_HAVE_STATVFS"
+ngx_feature_run=no
+ngx_feature_incs="#include <sys/types.h>
+ #include <sys/statvfs.h>"
+ngx_feature_path=
+ngx_feature_libs=
+ngx_feature_test="struct statvfs fs;
+ statvfs(NULL, &fs);"
+. auto/feature
diff --git a/auto/os/linux b/auto/os/linux
index 698886fa8..43ff3c9e2 100644
--- a/auto/os/linux
+++ b/auto/os/linux
@@ -124,4 +124,7 @@ ngx_feature_test="long mask = 0;
. auto/feature
+ngx_include="sys/vfs.h"; . auto/include
+
+
CC_AUX_FLAGS=$cc_aux_flags
diff --git a/src/os/unix/ngx_files.c b/src/os/unix/ngx_files.c
index 1203989b6..98ed08229 100644
--- a/src/os/unix/ngx_files.c
+++ b/src/os/unix/ngx_files.c
@@ -416,3 +416,50 @@ ngx_directio_off(ngx_fd_t fd)
}
#endif
+
+
+#if (NGX_HAVE_STATFS)
+
+size_t
+ngx_fs_bsize(u_char *name)
+{
+ struct statfs fs;
+
+ if (statfs((char *) name, &fs) == -1) {
+ return 512;
+ }
+
+ if ((fs.f_bsize % 512) != 0) {
+ return 512;
+ }
+
+ return (size_t) fs.f_bsize;
+}
+
+#elif (NGX_HAVE_STATVFS)
+
+size_t
+ngx_fs_bsize(u_char *name)
+{
+ struct statvfs fs;
+
+ if (statvfs((char *) name, &fs) == -1) {
+ return 512;
+ }
+
+ if ((fs.f_frsize % 512) != 0) {
+ return 512;
+ }
+
+ return (size_t) fs.f_frsize;
+}
+
+#else
+
+size_t
+ngx_fs_bsize(u_char *name)
+{
+ return 512;
+}
+
+#endif
diff --git a/src/os/unix/ngx_files.h b/src/os/unix/ngx_files.h
index 21e5ff45c..dcd14c35f 100644
--- a/src/os/unix/ngx_files.h
+++ b/src/os/unix/ngx_files.h
@@ -274,4 +274,7 @@ ngx_int_t ngx_directio_off(ngx_fd_t fd);
#endif
+size_t ngx_fs_bsize(u_char *name);
+
+
#endif /* _NGX_FILES_H_INCLUDED_ */
diff --git a/src/os/unix/ngx_freebsd_config.h b/src/os/unix/ngx_freebsd_config.h
index 24dcdcb46..377148602 100644
--- a/src/os/unix/ngx_freebsd_config.h
+++ b/src/os/unix/ngx_freebsd_config.h
@@ -22,6 +22,7 @@
#include <grp.h>
#include <dirent.h>
#include <glob.h>
+#include <sys/mount.h> /* statfs() */
#include <sys/filio.h> /* FIONBIO */
#include <sys/uio.h>
diff --git a/src/os/unix/ngx_linux_config.h b/src/os/unix/ngx_linux_config.h
index bf2eae892..abeda08af 100644
--- a/src/os/unix/ngx_linux_config.h
+++ b/src/os/unix/ngx_linux_config.h
@@ -28,6 +28,7 @@
#include <grp.h>
#include <dirent.h>
#include <glob.h>
+#include <sys/vfs.h> /* statfs() */
#include <sys/uio.h>
#include <sys/stat.h>
diff --git a/src/os/unix/ngx_posix_config.h b/src/os/unix/ngx_posix_config.h
index ec7ee944f..152e23238 100644
--- a/src/os/unix/ngx_posix_config.h
+++ b/src/os/unix/ngx_posix_config.h
@@ -44,6 +44,12 @@
#include <grp.h>
#include <dirent.h>
#include <glob.h>
+#if (NGX_HAVE_SYS_MOUNT_H)
+#include <sys/mount.h> /* statfs() */
+#endif
+#if (NGX_HAVE_SYS_STATVFS_H)
+#include <sys/statvfs.h> /* statvfs() */
+#endif
#if (NGX_HAVE_SYS_FILIO_H)
#include <sys/filio.h> /* FIONBIO */
diff --git a/src/os/unix/ngx_solaris_config.h b/src/os/unix/ngx_solaris_config.h
index 989a30e2c..663f26570 100644
--- a/src/os/unix/ngx_solaris_config.h
+++ b/src/os/unix/ngx_solaris_config.h
@@ -28,6 +28,7 @@
#include <grp.h>
#include <dirent.h>
#include <glob.h>
+#include <sys/statvfs.h> /* statvfs() */
#include <sys/filio.h> /* FIONBIO */
#include <sys/uio.h>
diff --git a/src/os/win32/ngx_files.c b/src/os/win32/ngx_files.c
index eff843ab7..afe31b9a0 100644
--- a/src/os/win32/ngx_files.c
+++ b/src/os/win32/ngx_files.c
@@ -504,8 +504,28 @@ ngx_directio_on(ngx_fd_t fd)
return 0;
}
+
ngx_int_t
ngx_directio_off(ngx_fd_t fd)
{
return 0;
}
+
+
+size_t
+ngx_fs_bsize(u_char *name)
+{
+ u_char root[4];
+ u_long sc, bs, nfree, ncl;
+
+ if (name[2] == ':') {
+ ngx_cpystrn(root, name, 4);
+ name = root;
+ }
+
+ if (GetDiskFreeSpace((const char *) name, &sc, &bs, &nfree, &ncl) == 0) {
+ return 512;
+ }
+
+ return sc * bs;
+}
diff --git a/src/os/win32/ngx_files.h b/src/os/win32/ngx_files.h
index b8487920f..47a76611b 100644
--- a/src/os/win32/ngx_files.h
+++ b/src/os/win32/ngx_files.h
@@ -243,5 +243,7 @@ ngx_int_t ngx_directio_on(ngx_fd_t fd);
ngx_int_t ngx_directio_off(ngx_fd_t fd);
#define ngx_directio_off_n "ngx_directio_off_n"
+size_t ngx_fs_bsize(u_char *name);
+
#endif /* _NGX_FILES_H_INCLUDED_ */