diff options
author | Ludovic Courtès <ludo@gnu.org> | 2019-11-26 23:51:11 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2019-11-27 00:03:03 +0100 |
commit | fbecb5cddb2d36cc1a29dac3751b017fa531383c (patch) | |
tree | c850aa7e387e878f0c98b6849b03934fbcf78be2 | |
parent | 7738a72186583afb3bb2e0a866c8aba130372400 (diff) | |
download | guix-fbecb5cddb2d36cc1a29dac3751b017fa531383c.tar.gz guix-fbecb5cddb2d36cc1a29dac3751b017fa531383c.zip |
daemon: 'deletePath' uses 'statx' when available.
* nix/libutil/util.cc (_deletePath) [HAVE_STATX]: Use 'statx'.
-rw-r--r-- | nix/libutil/util.cc | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/nix/libutil/util.cc b/nix/libutil/util.cc index 9a83876013..8093b4c8b4 100644 --- a/nix/libutil/util.cc +++ b/nix/libutil/util.cc @@ -306,7 +306,18 @@ static void _deletePath(const Path & path, unsigned long long & bytesFreed) printMsg(lvlVomit, format("%1%") % path); +#ifdef HAVE_STATX +# define st_mode stx_mode +# define st_size stx_size +# define st_nlink stx_nlink + struct statx st; + if (statx(AT_FDCWD, path.c_str(), + AT_SYMLINK_NOFOLLOW, + STATX_SIZE | STATX_NLINK | STATX_MODE, &st) == -1) + throw SysError(format("getting status of `%1%'") % path); +#else struct stat st = lstat(path); +#endif if (!S_ISDIR(st.st_mode) && st.st_nlink == 1) bytesFreed += st.st_size; @@ -321,6 +332,9 @@ static void _deletePath(const Path & path, unsigned long long & bytesFreed) for (auto & i : readDirectory(path)) _deletePath(path + "/" + i.name, bytesFreed); } +#undef st_mode +#undef st_size +#undef st_nlink if (remove(path.c_str()) == -1) throw SysError(format("cannot unlink `%1%'") % path); |