Mercurial > hg > nginx
comparison src/os/unix/ngx_files.h @ 2550:5e87ddb4764f
XFS on Linux does not set dirent.d_type,
therefore fallback to stat() if dirent.d_type is not set,
this fixes slash after directory name in ngx_http_autoindex_module;
the issue has been introduced in r2235
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Fri, 06 Mar 2009 13:01:21 +0000 |
parents | 2abf14c952a2 |
children | 3a8a53c0c42f |
comparison
equal
deleted
inserted
replaced
2549:2d34fba7cf06 | 2550:5e87ddb4764f |
---|---|
198 #define ngx_de_link_info(name, dir) lstat((const char *) name, &(dir)->info) | 198 #define ngx_de_link_info(name, dir) lstat((const char *) name, &(dir)->info) |
199 #define ngx_de_link_info_n "lstat()" | 199 #define ngx_de_link_info_n "lstat()" |
200 | 200 |
201 #if (NGX_HAVE_D_TYPE) | 201 #if (NGX_HAVE_D_TYPE) |
202 | 202 |
203 #if (NGX_LINUX) | |
204 | |
205 /* XFS on Linux does not set dirent.d_type */ | |
206 | |
207 #define ngx_de_is_dir(dir) \ | |
208 (((dir)->type) ? ((dir)->type == DT_DIR) : (S_ISDIR((dir)->info.st_mode))) | |
209 #define ngx_de_is_file(dir) \ | |
210 (((dir)->type) ? ((dir)->type == DT_REG) : (S_ISREG((dir)->info.st_mode))) | |
211 #define ngx_de_is_link(dir) \ | |
212 (((dir)->type) ? ((dir)->type == DT_LINK) : (S_ISLNK((dir)->info.st_mode))) | |
213 | |
214 #else | |
215 | |
203 #define ngx_de_is_dir(dir) ((dir)->type == DT_DIR) | 216 #define ngx_de_is_dir(dir) ((dir)->type == DT_DIR) |
204 #define ngx_de_is_file(dir) ((dir)->type == DT_REG) | 217 #define ngx_de_is_file(dir) ((dir)->type == DT_REG) |
205 #define ngx_de_is_link(dir) ((dir)->type == DT_LINK) | 218 #define ngx_de_is_link(dir) ((dir)->type == DT_LINK) |
219 | |
220 #endif /* NGX_LINUX */ | |
206 | 221 |
207 #else | 222 #else |
208 | 223 |
209 #define ngx_de_is_dir(dir) (S_ISDIR((dir)->info.st_mode)) | 224 #define ngx_de_is_dir(dir) (S_ISDIR((dir)->info.st_mode)) |
210 #define ngx_de_is_file(dir) (S_ISREG((dir)->info.st_mode)) | 225 #define ngx_de_is_file(dir) (S_ISREG((dir)->info.st_mode)) |