[libvirt PATCH 10/32] storage: remove use of stat-time.h headers

Daniel P. Berrangé posted 32 patches 6 years ago
[libvirt PATCH 10/32] storage: remove use of stat-time.h headers
Posted by Daniel P. Berrangé 6 years ago
The gnulib stat-time.h header provides wrapper functions
to hide the differences in 'struct stat' between various
platforms.

Linux and FreeBSD support the same names, except for
birthtime which Linux only provides in the new 'statx()'
syscall we're not using. macOS has completely different
naming. Since we only rely on this code in one place
we just use conditionals at time of need.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
 src/storage/storage_util.c | 21 ++++++++++++++++-----
 1 file changed, 16 insertions(+), 5 deletions(-)

diff --git a/src/storage/storage_util.c b/src/storage/storage_util.c
index 987d937b04..7bbcfde064 100644
--- a/src/storage/storage_util.c
+++ b/src/storage/storage_util.c
@@ -71,7 +71,6 @@
 #include "virfile.h"
 #include "virjson.h"
 #include "virqemu.h"
-#include "stat-time.h"
 #include "virstring.h"
 #include "virxml.h"
 #include "virfdstream.h"
@@ -1830,10 +1829,22 @@ virStorageBackendUpdateVolTargetInfoFD(virStorageSourcePtr target,
 
     if (!target->timestamps && VIR_ALLOC(target->timestamps) < 0)
         return -1;
-    target->timestamps->atime = get_stat_atime(sb);
-    target->timestamps->btime = get_stat_birthtime(sb);
-    target->timestamps->ctime = get_stat_ctime(sb);
-    target->timestamps->mtime = get_stat_mtime(sb);
+
+#ifdef __APPLE__
+    target->timestamps->atime = sb->st_atimespec;
+    target->timestamps->btime = sb->st_birthtimespec;
+    target->timestamps->ctime = sb->st_ctimespec;
+    target->timestamps->mtime = sb->st_mtimespec;
+#else /* ! __APPLE__ */
+    target->timestamps->atime = sb->st_atim;
+# ifdef __linux__
+    target->timestamps->btime = (struct timespec){0, 0};
+# else /* ! __linux__ */
+    target->timestamps->btime = sb->st_birthtim;
+# endif /* ! __linux__ */
+    target->timestamps->ctime = sb->st_ctim;
+    target->timestamps->mtime = sb->st_mtim;
+#endif /* ! __APPLE__ */
 
     target->type = VIR_STORAGE_TYPE_FILE;
 
-- 
2.24.1

Re: [libvirt PATCH 10/32] storage: remove use of stat-time.h headers
Posted by Pavel Hrdina 6 years ago
On Thu, Jan 23, 2020 at 11:43:03AM +0000, Daniel P. Berrangé wrote:
> The gnulib stat-time.h header provides wrapper functions
> to hide the differences in 'struct stat' between various
> platforms.
> 
> Linux and FreeBSD support the same names, except for
> birthtime which Linux only provides in the new 'statx()'
> syscall we're not using. macOS has completely different
> naming. Since we only rely on this code in one place
> we just use conditionals at time of need.
> 
> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
> ---
>  src/storage/storage_util.c | 21 ++++++++++++++++-----
>  1 file changed, 16 insertions(+), 5 deletions(-)

Reviewed-by: Pavel Hrdina <phrdina@redhat.com>