richardphibel / rpms / librepo

Forked from rpms/librepo 2 years ago
Clone
Lukáš Hrázký 0a765d
From e6f48ae9bff7b5dc8027d043aa1bffa53d507a42 Mon Sep 17 00:00:00 2001
Lukáš Hrázký 0a765d
From: =?UTF-8?q?Ale=C5=A1=20Mat=C4=9Bj?= <amatej@redhat.com>
Lukáš Hrázký 0a765d
Date: Thu, 5 May 2022 12:44:27 +0200
Lukáš Hrázký 0a765d
Subject: [PATCH] Use nanosec precision for timestamp of checksum cache
Lukáš Hrázký 0a765d
 (RhBug:2077864)
Lukáš Hrázký 0a765d
Lukáš Hrázký 0a765d
= changelog =
Lukáš Hrázký 0a765d
msg: Use nanosec precision for timestamp of checksum cache
Lukáš Hrázký 0a765d
type: bugfix
Lukáš Hrázký 0a765d
resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2077864
Lukáš Hrázký 0a765d
---
Lukáš Hrázký 0a765d
 librepo/checksum.c    | 7 +++++--
Lukáš Hrázký 0a765d
 tests/test_checksum.c | 6 +++++-
Lukáš Hrázký 0a765d
 2 files changed, 10 insertions(+), 3 deletions(-)
Lukáš Hrázký 0a765d
Lukáš Hrázký 0a765d
diff --git a/librepo/checksum.c b/librepo/checksum.c
Lukáš Hrázký 0a765d
index 6bba53c..d82cb5c 100644
Lukáš Hrázký 0a765d
--- a/librepo/checksum.c
Lukáš Hrázký 0a765d
+++ b/librepo/checksum.c
Lukáš Hrázký 0a765d
@@ -18,6 +18,7 @@
Lukáš Hrázký 0a765d
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Lukáš Hrázký 0a765d
  */
Lukáš Hrázký 0a765d
 
Lukáš Hrázký 0a765d
+#define _POSIX_C_SOURCE 200809L
Lukáš Hrázký 0a765d
 #include <glib.h>
Lukáš Hrázký 0a765d
 #include <glib/gprintf.h>
Lukáš Hrázký 0a765d
 #include <assert.h>
Lukáš Hrázký 0a765d
@@ -217,16 +218,18 @@ lr_checksum_fd_compare(LrChecksumType type,
Lukáš Hrázký 0a765d
         return FALSE;
Lukáš Hrázký 0a765d
     }
Lukáš Hrázký 0a765d
 
Lukáš Hrázký 0a765d
-    time_t timestamp = -1;
Lukáš Hrázký 0a765d
+    long long timestamp = -1;
Lukáš Hrázký 0a765d
 
Lukáš Hrázký 0a765d
     if (caching) {
Lukáš Hrázký 0a765d
         struct stat st;
Lukáš Hrázký 0a765d
         if (fstat(fd, &st) == 0) {
Lukáš Hrázký 0a765d
             timestamp = st.st_mtime;
Lukáš Hrázký 0a765d
+            timestamp *= 1000000000; //convert sec timestamp to nanosec timestamp
Lukáš Hrázký 0a765d
+            timestamp += st.st_mtim.tv_nsec;
Lukáš Hrázký 0a765d
         }
Lukáš Hrázký 0a765d
     }
Lukáš Hrázký 0a765d
 
Lukáš Hrázký 0a765d
-    _cleanup_free_ gchar *timestamp_str = g_strdup_printf("%lli", (long long)timestamp);
Lukáš Hrázký 0a765d
+    _cleanup_free_ gchar *timestamp_str = g_strdup_printf("%lli", timestamp);
Lukáš Hrázký 0a765d
     const char *type_str = lr_checksum_type_to_str(type);
Lukáš Hrázký 0a765d
     _cleanup_free_ gchar *timestamp_key = g_strconcat(XATTR_CHKSUM_PREFIX, "mtime", NULL);
Lukáš Hrázký 0a765d
     _cleanup_free_ gchar *checksum_key = g_strconcat(XATTR_CHKSUM_PREFIX, type_str, NULL);
Lukáš Hrázký 0a765d
diff --git a/tests/test_checksum.c b/tests/test_checksum.c
Lukáš Hrázký 0a765d
index cd28cd1..548f588 100644
Lukáš Hrázký 0a765d
--- a/tests/test_checksum.c
Lukáš Hrázký 0a765d
+++ b/tests/test_checksum.c
Lukáš Hrázký 0a765d
@@ -1,3 +1,4 @@
Lukáš Hrázký 0a765d
+#define _POSIX_C_SOURCE 200809L
Lukáš Hrázký 0a765d
 #define _GNU_SOURCE
Lukáš Hrázký 0a765d
 #include <errno.h>
Lukáš Hrázký 0a765d
 #include <stdlib.h>
Lukáš Hrázký 0a765d
@@ -150,7 +151,10 @@ START_TEST(test_cached_checksum_matches)
Lukáš Hrázký 0a765d
     // stored timestamp matches the file mtime
Lukáš Hrázký 0a765d
     ret = stat(filename, &st);
Lukáš Hrázký 0a765d
     ck_assert_int_eq(ret, 0);
Lukáš Hrázký 0a765d
-    mtime_str = g_strdup_printf("%lli", (long long) st.st_mtime);
Lukáš Hrázký 0a765d
+    long long timestamp = st.st_mtime;
Lukáš Hrázký 0a765d
+    timestamp *= 1000000000; //convert sec timestamp to nanosec timestamp
Lukáš Hrázký 0a765d
+    timestamp += st.st_mtim.tv_nsec;
Lukáš Hrázký 0a765d
+    mtime_str = g_strdup_printf("%lli", timestamp);
Lukáš Hrázký 0a765d
     attr_ret = GETXATTR(filename, timestamp_key, &buf, sizeof(buf)-1);
Lukáš Hrázký 0a765d
     ck_assert(attr_ret != -1);
Lukáš Hrázký 0a765d
     buf[attr_ret] = 0;
Lukáš Hrázký 0a765d
-- 
Lukáš Hrázký 0a765d
2.36.1
Lukáš Hrázký 0a765d