mirror of
https://github.com/nginx/nginx.git
synced 2024-12-28 09:51:04 -06:00
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
This commit is contained in:
parent
7ac9f3605c
commit
78c95de9da
@ -249,11 +249,6 @@ ngx_open_dir(ngx_str_t *name, ngx_dir_t *dir)
|
||||
}
|
||||
|
||||
dir->valid_info = 0;
|
||||
#if (NGX_HAVE_D_TYPE)
|
||||
dir->valid_type = 1;
|
||||
#else
|
||||
dir->valid_type = 0;
|
||||
#endif
|
||||
|
||||
return NGX_OK;
|
||||
}
|
||||
@ -267,6 +262,9 @@ ngx_read_dir(ngx_dir_t *dir)
|
||||
if (dir->de) {
|
||||
#if (NGX_HAVE_D_TYPE)
|
||||
dir->type = dir->de->d_type;
|
||||
dir->valid_type = dir->type ? 1 : 0;
|
||||
#else
|
||||
dir->valid_type = 0;
|
||||
#endif
|
||||
return NGX_OK;
|
||||
}
|
||||
|
@ -200,10 +200,25 @@ ngx_int_t ngx_read_dir(ngx_dir_t *dir);
|
||||
|
||||
#if (NGX_HAVE_D_TYPE)
|
||||
|
||||
#if (NGX_LINUX)
|
||||
|
||||
/* XFS on Linux does not set dirent.d_type */
|
||||
|
||||
#define ngx_de_is_dir(dir) \
|
||||
(((dir)->type) ? ((dir)->type == DT_DIR) : (S_ISDIR((dir)->info.st_mode)))
|
||||
#define ngx_de_is_file(dir) \
|
||||
(((dir)->type) ? ((dir)->type == DT_REG) : (S_ISREG((dir)->info.st_mode)))
|
||||
#define ngx_de_is_link(dir) \
|
||||
(((dir)->type) ? ((dir)->type == DT_LINK) : (S_ISLNK((dir)->info.st_mode)))
|
||||
|
||||
#else
|
||||
|
||||
#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)
|
||||
|
||||
#endif /* NGX_LINUX */
|
||||
|
||||
#else
|
||||
|
||||
#define ngx_de_is_dir(dir) (S_ISDIR((dir)->info.st_mode))
|
||||
|
Loading…
Reference in New Issue
Block a user