comparison src/os/unix/ngx_files.h @ 536:0dc162a5f3e8 NGINX_0_8_20

nginx 0.8.20 *) Change: now default SSL ciphers are "HIGH:!ADH:!MD5". *) Bugfix: the ngx_http_autoindex_module did not show the trailing slash in links to a directory; the bug had appeared in 0.7.15. *) Bugfix: nginx did not close a log file set by the --error-log-path configuration option; the bug had appeared in 0.7.53. *) Bugfix: nginx did not treat a comma as separator in the "Cache-Control" backend response header line. *) Bugfix: nginx/Windows might not create temporary file, a cache file, or "proxy/fastcgi_store"d file if a worker has no enough access rights for top level directories. *) Bugfix: the "Set-Cookie" and "P3P" FastCGI response header lines were not hidden while caching if no "fastcgi_hide_header" directives were used with any parameters. *) Bugfix: nginx counted incorrectly disk cache size.
author Igor Sysoev <http://sysoev.ru>
date Wed, 14 Oct 2009 00:00:00 +0400
parents f7ec98e3caeb
children c04fa65fe604
comparison
equal deleted inserted replaced
535:4584144e5de2 536:0dc162a5f3e8
22 struct dirent *de; 22 struct dirent *de;
23 struct stat info; 23 struct stat info;
24 24
25 unsigned type:8; 25 unsigned type:8;
26 unsigned valid_info:1; 26 unsigned valid_info:1;
27 unsigned valid_type:1;
28 } ngx_dir_t; 27 } ngx_dir_t;
29 28
30 29
31 typedef struct { 30 typedef struct {
32 size_t n; 31 size_t n;
198 #if (NGX_HAVE_D_NAMLEN) 197 #if (NGX_HAVE_D_NAMLEN)
199 #define ngx_de_namelen(dir) (dir)->de->d_namlen 198 #define ngx_de_namelen(dir) (dir)->de->d_namlen
200 #else 199 #else
201 #define ngx_de_namelen(dir) ngx_strlen((dir)->de->d_name) 200 #define ngx_de_namelen(dir) ngx_strlen((dir)->de->d_name)
202 #endif 201 #endif
203 #define ngx_de_info(name, dir) stat((const char *) name, &(dir)->info) 202
203 static ngx_inline ngx_int_t
204 ngx_de_info(u_char *name, ngx_dir_t *dir)
205 {
206 dir->type = 0;
207 return stat((const char *) name, &dir->info);
208 }
209
204 #define ngx_de_info_n "stat()" 210 #define ngx_de_info_n "stat()"
205 #define ngx_de_link_info(name, dir) lstat((const char *) name, &(dir)->info) 211 #define ngx_de_link_info(name, dir) lstat((const char *) name, &(dir)->info)
206 #define ngx_de_link_info_n "lstat()" 212 #define ngx_de_link_info_n "lstat()"
207 213
208 #if (NGX_HAVE_D_TYPE) 214 #if (NGX_HAVE_D_TYPE)
209 215
210 #if (NGX_LINUX) 216 /*
211 217 * some file systems (e.g. XFS on Linux and CD9660 on FreeBSD)
212 /* XFS on Linux does not set dirent.d_type */ 218 * do not set dirent.d_type
219 */
213 220
214 #define ngx_de_is_dir(dir) \ 221 #define ngx_de_is_dir(dir) \
215 (((dir)->type) ? ((dir)->type == DT_DIR) : (S_ISDIR((dir)->info.st_mode))) 222 (((dir)->type) ? ((dir)->type == DT_DIR) : (S_ISDIR((dir)->info.st_mode)))
216 #define ngx_de_is_file(dir) \ 223 #define ngx_de_is_file(dir) \
217 (((dir)->type) ? ((dir)->type == DT_REG) : (S_ISREG((dir)->info.st_mode))) 224 (((dir)->type) ? ((dir)->type == DT_REG) : (S_ISREG((dir)->info.st_mode)))
218 #define ngx_de_is_link(dir) \ 225 #define ngx_de_is_link(dir) \
219 (((dir)->type) ? ((dir)->type == DT_LINK) : (S_ISLNK((dir)->info.st_mode))) 226 (((dir)->type) ? ((dir)->type == DT_LNK) : (S_ISLNK((dir)->info.st_mode)))
220
221 #else
222
223 #define ngx_de_is_dir(dir) ((dir)->type == DT_DIR)
224 #define ngx_de_is_file(dir) ((dir)->type == DT_REG)
225 #define ngx_de_is_link(dir) ((dir)->type == DT_LINK)
226
227 #endif /* NGX_LINUX */
228 227
229 #else 228 #else
230 229
231 #define ngx_de_is_dir(dir) (S_ISDIR((dir)->info.st_mode)) 230 #define ngx_de_is_dir(dir) (S_ISDIR((dir)->info.st_mode))
232 #define ngx_de_is_file(dir) (S_ISREG((dir)->info.st_mode)) 231 #define ngx_de_is_file(dir) (S_ISREG((dir)->info.st_mode))