# HG changeset patch # User Igor Sysoev # Date 1220629414 0 # Node ID c7c319896bb45e20a09ca005e496f1387f1a3df4 # Parent f62751dab60dd97438aaae5b268c86716cd3c230 *) autoconfigure struct dirent capabilities *) move src/os/.../ngx_types.h's content into src/os/.../ngx_files.h and delete src/os/.../ngx_types.h diff --git a/auto/sources b/auto/sources --- a/auto/sources +++ b/auto/sources @@ -131,7 +131,6 @@ UNIX_INCS="$CORE_INCS $EVENT_INCS src/os UNIX_DEPS="$CORE_DEPS $EVENT_DEPS \ src/os/unix/ngx_time.h \ - src/os/unix/ngx_types.h \ src/os/unix/ngx_errno.h \ src/os/unix/ngx_alloc.h \ src/os/unix/ngx_files.h \ @@ -208,7 +207,6 @@ WIN32_INCS="$CORE_INCS $EVENT_INCS src/o WIN32_DEPS="$CORE_DEPS $EVENT_DEPS \ src/os/win32/ngx_win32_config.h \ src/os/win32/ngx_time.h \ - src/os/win32/ngx_types.h \ src/os/win32/ngx_errno.h \ src/os/win32/ngx_alloc.h \ src/os/win32/ngx_files.h \ diff --git a/auto/unix b/auto/unix --- a/auto/unix +++ b/auto/unix @@ -229,3 +229,23 @@ ngx_feature_path= ngx_feature_libs= ngx_feature_test="struct tm tm; tm.tm_gmtoff = 0" . auto/feature + + +ngx_feature="struct dirent.d_namlen" +ngx_feature_name="NGX_HAVE_D_NAMLEN" +ngx_feature_run=no +ngx_feature_incs="#include " +ngx_feature_path= +ngx_feature_libs= +ngx_feature_test="struct dirent dir; dir.d_namlen = 0" +. auto/feature + + +ngx_feature="struct dirent.d_type" +ngx_feature_name="NGX_HAVE_D_TYPE" +ngx_feature_run=no +ngx_feature_incs="#include " +ngx_feature_path= +ngx_feature_libs= +ngx_feature_test="struct dirent dir; dir.d_type = DT_REG" +. auto/feature diff --git a/src/core/ngx_core.h b/src/core/ngx_core.h --- a/src/core/ngx_core.h +++ b/src/core/ngx_core.h @@ -40,11 +40,11 @@ typedef void (*ngx_connection_handler_pt #include #include #include -#include +#include +#include #include #include #include -#include #include #include #include @@ -55,7 +55,6 @@ typedef void (*ngx_connection_handler_pt #include #include #include -#include #include #include #if (NGX_PCRE) diff --git a/src/os/unix/ngx_files.c b/src/os/unix/ngx_files.c --- a/src/os/unix/ngx_files.c +++ b/src/os/unix/ngx_files.c @@ -249,12 +249,33 @@ ngx_open_dir(ngx_str_t *name, ngx_dir_t } dir->valid_info = 0; +#if (NGX_HAVE_D_TYPE) + dir->valid_type = 1; +#else + dir->valid_type = 0; +#endif return NGX_OK; } ngx_int_t +ngx_read_dir(ngx_dir_t *dir) +{ + dir->de = readdir(dir->dir); + + if (dir->de) { +#if (NGX_HAVE_D_TYPE) + dir->type = dir->de->d_type; +#endif + return NGX_OK; + } + + return NGX_ERROR; +} + + +ngx_int_t ngx_open_glob(ngx_glob_t *gl) { int n; diff --git a/src/os/unix/ngx_files.h b/src/os/unix/ngx_files.h --- a/src/os/unix/ngx_files.h +++ b/src/os/unix/ngx_files.h @@ -12,6 +12,31 @@ #include +typedef int ngx_fd_t; +typedef struct stat ngx_file_info_t; +typedef ino_t ngx_file_uniq_t; + + +typedef struct { + DIR *dir; + struct dirent *de; + struct stat info; + + unsigned type:8; + unsigned valid_info:1; + unsigned valid_type:1; +} ngx_dir_t; + + +typedef struct { + size_t n; + glob_t pglob; + u_char *pattern; + ngx_log_t *log; + ngx_uint_t test; +} ngx_glob_t; + + #define NGX_INVALID_FILE -1 #define NGX_FILE_ERROR -1 @@ -135,8 +160,7 @@ ngx_int_t ngx_open_dir(ngx_str_t *name, #define ngx_close_dir_n "closedir()" -#define ngx_read_dir(d) \ - (((d)->de = readdir((d)->dir)) ? NGX_OK : NGX_ERROR) +ngx_int_t ngx_read_dir(ngx_dir_t *dir); #define ngx_read_dir_n "readdir()" @@ -152,7 +176,7 @@ ngx_int_t ngx_open_dir(ngx_str_t *name, #define ngx_de_name(dir) ((u_char *) (dir)->de->d_name) -#if (NGX_FREEBSD) +#if (NGX_HAVE_D_NAMLEN) #define ngx_de_namelen(dir) (dir)->de->d_namlen #else #define ngx_de_namelen(dir) ngx_strlen((dir)->de->d_name) @@ -161,23 +185,26 @@ ngx_int_t ngx_open_dir(ngx_str_t *name, #define ngx_de_info_n "stat()" #define ngx_de_link_info(name, dir) lstat((const char *) name, &(dir)->info) #define ngx_de_link_info_n "lstat()" + +#if (NGX_HAVE_D_TYPE) + +#define ngx_de_is_dir(dir) ((dir)->type == DT_DIR) +#define ngx_de_is_file(dir) ((dir)->type == DT_REG) +#define ngx_de_is_link(dir) ((dir)->type == DT_LINK) + +#else + #define ngx_de_is_dir(dir) (S_ISDIR((dir)->info.st_mode)) #define ngx_de_is_file(dir) (S_ISREG((dir)->info.st_mode)) #define ngx_de_is_link(dir) (S_ISLNK((dir)->info.st_mode)) + +#endif + #define ngx_de_access(dir) (((dir)->info.st_mode) & 0777) #define ngx_de_size(dir) (dir)->info.st_size #define ngx_de_mtime(dir) (dir)->info.st_mtime -typedef struct { - size_t n; - glob_t pglob; - u_char *pattern; - ngx_log_t *log; - ngx_uint_t test; -} ngx_glob_t; - - ngx_int_t ngx_open_glob(ngx_glob_t *gl); #define ngx_open_glob_n "glob()" ngx_int_t ngx_read_glob(ngx_glob_t *gl, ngx_str_t *name); diff --git a/src/os/unix/ngx_types.h b/src/os/unix/ngx_types.h deleted file mode 100644 --- a/src/os/unix/ngx_types.h +++ /dev/null @@ -1,27 +0,0 @@ - -/* - * Copyright (C) Igor Sysoev - */ - - -#ifndef _NGX_TYPES_H_INCLUDED_ -#define _NGX_TYPES_H_INCLUDED_ - - -#include - - -typedef int ngx_fd_t; -typedef struct stat ngx_file_info_t; -typedef ino_t ngx_file_uniq_t; - -typedef struct { - DIR *dir; - struct dirent *de; - struct stat info; - - ngx_uint_t valid_info:1; /* unsigned valid_info:1; */ -} ngx_dir_t; - - -#endif /* _NGX_TYPES_H_INCLUDED_ */ diff --git a/src/os/win32/ngx_files.c b/src/os/win32/ngx_files.c --- a/src/os/win32/ngx_files.c +++ b/src/os/win32/ngx_files.c @@ -330,6 +330,7 @@ ngx_open_dir(ngx_str_t *name, ngx_dir_t } dir->valid_info = 1; + dir->valid_type = 1; dir->ready = 1; return NGX_OK; diff --git a/src/os/win32/ngx_files.h b/src/os/win32/ngx_files.h --- a/src/os/win32/ngx_files.h +++ b/src/os/win32/ngx_files.h @@ -12,6 +12,36 @@ #include +typedef HANDLE ngx_fd_t; +typedef BY_HANDLE_FILE_INFORMATION ngx_file_info_t; +typedef uint64_t ngx_file_uniq_t; + +typedef struct { + HANDLE dir; + WIN32_FIND_DATA finddata; + + unsigned valid_info:1; + unsigned valid_type:1; + unsigned ready:1; +} ngx_dir_t; + + +typedef struct { + HANDLE dir; + WIN32_FIND_DATA finddata; + + unsigned ready:1; + unsigned test:1; + unsigned no_match:1; + + u_char *pattern; + ngx_str_t name; + size_t last; + ngx_log_t *log; +} ngx_glob_t; + + + /* INVALID_FILE_ATTRIBUTES is specified but not defined at least in MSVC6SP2 */ #ifndef INVALID_FILE_ATTRIBUTES #define INVALID_FILE_ATTRIBUTES 0xffffffff @@ -184,20 +214,6 @@ ngx_int_t ngx_de_link_info(u_char *name, | (dir)->finddata.ftLastWriteTime.dwLowDateTime) \ - 116444736000000000) / 10000000) -typedef struct { - HANDLE dir; - WIN32_FIND_DATA finddata; - - unsigned ready:1; - unsigned test:1; - unsigned no_match:1; - - u_char *pattern; - ngx_str_t name; - size_t last; - ngx_log_t *log; -} ngx_glob_t; - ngx_int_t ngx_open_glob(ngx_glob_t *gl); #define ngx_open_glob_n "FindFirstFile()" diff --git a/src/os/win32/ngx_types.h b/src/os/win32/ngx_types.h deleted file mode 100644 --- a/src/os/win32/ngx_types.h +++ /dev/null @@ -1,28 +0,0 @@ - -/* - * Copyright (C) Igor Sysoev - */ - - -#ifndef _NGX_TYPES_H_INCLUDED_ -#define _NGX_TYPES_H_INCLUDED_ - - -#include -#include - - -typedef HANDLE ngx_fd_t; -typedef BY_HANDLE_FILE_INFORMATION ngx_file_info_t; -typedef uint64_t ngx_file_uniq_t; - -typedef struct { - HANDLE dir; - WIN32_FIND_DATA finddata; - - unsigned valid_info:1; - unsigned ready:1; -} ngx_dir_t; - - -#endif /* _NGX_TYPES_H_INCLUDED_ */