From 9c2fcf3aeae6cd112a1e5b5e8374a03cf5217c9b Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Mon, 20 Jul 2020 07:18:08 -0700 Subject: distat: bugfix: use lstat. * sysif.c (dirstat): Call lstat_wrap, rather than stat_wrap. This function must report about the directory entry itself, not about what that entry points to if it happens to be a symlink. The d-type member of the dirent structure representing a symlink must be set to dt-lnk. * txr.1: Updated. --- sysif.c | 2 +- txr.1 | 15 +++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/sysif.c b/sysif.c index 019b66a4..5830ffc0 100644 --- a/sysif.c +++ b/sysif.c @@ -2327,7 +2327,7 @@ static val dirstat(val dirent, val dir_path, val stat_opt) val self = lit("dirstat"); val name = slot(dirent, name_s); val path = if3(null_or_missing_p(dir_path), name, path_cat(dir_path, name)); - val stat = stat_wrap(path, stat_opt); + val stat = lstat_wrap(path, stat_opt); val mode = slot(stat, mode_s); if (mode) { diff --git a/txr.1 b/txr.1 index e1c82a75..a2cfd4e3 100644 --- a/txr.1 +++ b/txr.1 @@ -63148,7 +63148,7 @@ when the handle indicates that no more directory entries remain to be traversed. The .code dirstat function invokes -.code stat +.code lstat on the object represented by the .code dirent structure @@ -63158,13 +63158,13 @@ sets the slot of the .meta dirent-struct accordingly, and then returns the value that -.code stat +.code lstat returned. If the .meta struct argument is specified, it is passed to -.codn stat . +.codn lstat . The .meta dir-path @@ -63194,17 +63194,16 @@ using to form the effective path. The -.code stat +.code lstat function is invoked on the effective path, and if it succeeds, then type information is obtained from the resulting -.code stat structure to set the value of the .code type slot of .metn dirent-struct . -The -.code stat -structure is then returned. +The same structure that was returned by +.code lstat +is then returned. .SS* Unix Sockets -- cgit v1.2.3