symlinks: Only call stat_to_dir() once, impove manual
stat_to_dir() assumes that buf_dir is clean; calling it twice breaks that asumption.
Этот коммит содержится в:
родитель
74efdfaf97
Коммит
882a32613d
@ -172,10 +172,12 @@ displayed, but not their content, and they are not counted towards the disk
|
||||
usage statistics.
|
||||
See http://www.brynosaurus.com/cachedir/
|
||||
|
||||
=item -L,--follow-symlinks
|
||||
=item -L, --follow-symlinks
|
||||
|
||||
Follow symlinks (except to directories) 00and count the size of the file
|
||||
they point to. Symlink loops and directories will be ignored.
|
||||
Follow symlinks and count the size of the file they point to. As of ncdu 1.14,
|
||||
this option will not follow symlinks to directories and will count each
|
||||
symlinked file as a unique file (i.e. unlike how hard links are handled). This
|
||||
is subject to change in later versions.
|
||||
|
||||
=back
|
||||
|
||||
|
@ -185,7 +185,7 @@ static int dir_scan_recurse(const char *name) {
|
||||
* directory. Assumes we're chdir'ed in the directory in which this item
|
||||
* resides. */
|
||||
static int dir_scan_item(const char *name) {
|
||||
struct stat st;
|
||||
static struct stat st, stl;
|
||||
int fail = 0;
|
||||
|
||||
#ifdef __CYGWIN__
|
||||
@ -204,14 +204,12 @@ static int dir_scan_item(const char *name) {
|
||||
dir_setlasterr(dir_curpath);
|
||||
}
|
||||
|
||||
if(!(buf_dir->flags & (FF_ERR|FF_EXL)))
|
||||
stat_to_dir(&st);
|
||||
|
||||
if (!(buf_dir->flags & (FF_ERR|FF_EXL)) && follow_symlinks && S_ISLNK(st.st_mode))
|
||||
if (!stat(name, &st)) {
|
||||
if (!S_ISDIR(st.st_mode))
|
||||
stat_to_dir(&st);
|
||||
}
|
||||
if(!(buf_dir->flags & (FF_ERR|FF_EXL))) {
|
||||
if(follow_symlinks && S_ISLNK(st.st_mode) && !stat(name, &stl) && !S_ISDIR(stl.st_mode))
|
||||
stat_to_dir(&stl);
|
||||
else
|
||||
stat_to_dir(&st);
|
||||
}
|
||||
|
||||
if(cachedir_tags && (buf_dir->flags & FF_DIR) && !(buf_dir->flags & (FF_ERR|FF_EXL|FF_OTHFS)))
|
||||
if(has_cachedir_tag(buf_dir->name)) {
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user