guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

05/05: daemon: 'deletePath' uses 'statx' when available.


From: guix-commits
Subject: 05/05: daemon: 'deletePath' uses 'statx' when available.
Date: Tue, 26 Nov 2019 18:03:34 -0500 (EST)

civodul pushed a commit to branch master
in repository guix.

commit fbecb5cddb2d36cc1a29dac3751b017fa531383c
Author: Ludovic Courtès <address@hidden>
Date:   Tue Nov 26 23:51:11 2019 +0100

    daemon: 'deletePath' uses 'statx' when available.
    
    * nix/libutil/util.cc (_deletePath) [HAVE_STATX]: Use 'statx'.
---
 nix/libutil/util.cc | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/nix/libutil/util.cc b/nix/libutil/util.cc
index 9a83876..8093b4c 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);



reply via email to

[Prev in Thread] Current Thread [Next in Thread]