aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libutil/args.cc2
-rw-r--r--src/libutil/util.cc9
-rw-r--r--src/libutil/util.hh1
3 files changed, 11 insertions, 1 deletions
diff --git a/src/libutil/args.cc b/src/libutil/args.cc
index 38c748be0..b60c609a6 100644
--- a/src/libutil/args.cc
+++ b/src/libutil/args.cc
@@ -290,7 +290,7 @@ static void _completePath(std::string_view prefix, bool onlyDirs)
if (glob((std::string(prefix) + "*").c_str(), flags, nullptr, &globbuf) == 0) {
for (size_t i = 0; i < globbuf.gl_pathc; ++i) {
if (onlyDirs) {
- auto st = lstat(globbuf.gl_pathv[i]);
+ auto st = stat(globbuf.gl_pathv[i]);
if (!S_ISDIR(st.st_mode)) continue;
}
completions->add(globbuf.gl_pathv[i]);
diff --git a/src/libutil/util.cc b/src/libutil/util.cc
index b833038a9..deaa17a7f 100644
--- a/src/libutil/util.cc
+++ b/src/libutil/util.cc
@@ -215,6 +215,15 @@ bool isDirOrInDir(std::string_view path, std::string_view dir)
}
+struct stat stat(const Path & path)
+{
+ struct stat st;
+ if (stat(path.c_str(), &st))
+ throw SysError("getting status of '%1%'", path);
+ return st;
+}
+
+
struct stat lstat(const Path & path)
{
struct stat st;
diff --git a/src/libutil/util.hh b/src/libutil/util.hh
index 20591952d..94ae8ab7d 100644
--- a/src/libutil/util.hh
+++ b/src/libutil/util.hh
@@ -77,6 +77,7 @@ bool isInDir(std::string_view path, std::string_view dir);
bool isDirOrInDir(std::string_view path, std::string_view dir);
/* Get status of `path'. */
+struct stat stat(const Path & path);
struct stat lstat(const Path & path);
/* Return true iff the given path exists. */