Thread (5 messages) 5 messages, 4 authors, 2024-03-28

RE: [Outreachy][PATCH 1/2] date: refactor 64 bit prereq code into reusable functions

From: <hidden>
Date: 2024-02-05 17:34:20

On Monday, February 5, 2024 11:25 AM, Achu Luma wrote:
In a following commit we are going to port code from "t/helper/test-date.c"
and
"t/t0006-date.sh" to a new "t/unit-tests/t-date.c" file using the recently
added unit
test framework.

We cannot fully port all the code from "t/helper/test-date.c" though, as
the test-
tool date helper is still used by a number of "t/*.sh" tests.
The TIME_IS_64BIT and TIME_T_IS_64BIT prereqs are especially used by
"t5000-
tar-tree.sh", "t5318-commit-graph.sh" and
"t5328-commit-graph-64bit-time.sh"
while checking those prereqs will be required in the new
"t/unit-tests/t-date.c" file
too.

To avoid duplicating in both "t/helper/test-date.c" and
"t/unit-tests/t-date.c" the
small amount of code checking these prereqs, let's move it into inline
functions in
"date.h".

The names of these new inline functions contain "TIME_IS_64BIT" or
"TIME_T_IS_64BIT" as it will simplify the macros we will use when we will
port code
quoted hunk ↗ jump to hunk
to "t/unit-tests/t-date.c" in a following commit.

Mentored-by: Christian Couder [off-list ref]
Signed-off-by: Achu Luma <redacted>
---
date.h               | 6 ++++++
t/helper/test-date.c | 4 ++--
2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/date.h b/date.h
index 6136212a19..fb70490a51 100644
--- a/date.h
+++ b/date.h
@@ -70,4 +70,10 @@ void datestamp(struct strbuf *out);  timestamp_t
approxidate_careful(const char *, int *);  int date_overflows(timestamp_t
date);
quoted hunk ↗ jump to hunk
time_t tm_to_time_t(const struct tm *tm);
+static inline int check_prereq_TIME_IS_64BIT(void) {
+	return sizeof(timestamp_t) == 8;
+}
+static inline int check_prereq_TIME_T_IS_64BIT(void) {
+	return sizeof(time_t) == 8;
+}
#endif
diff --git a/t/helper/test-date.c b/t/helper/test-date.c index
0683d46574..be0b8679c3 100644
--- a/t/helper/test-date.c
+++ b/t/helper/test-date.c
@@ -126,9 +126,9 @@ int cmd__date(int argc UNUSED, const char **argv)
	else if (!strcmp(*argv, "getnanos"))
		getnanos(argv+1);
	else if (!strcmp(*argv, "is64bit"))
-		return sizeof(timestamp_t) == 8 ? 0 : 1;
+		return !check_prereq_TIME_IS_64BIT();
	else if (!strcmp(*argv, "time_t-is64bit"))
-		return sizeof(time_t) == 8 ? 0 : 1;
+		return !check_prereq_TIME_T_IS_64BIT();
	else
		usage(usage_msg);
	return 0;
--
2.43.0.windows.1
I would suggest that you also take into account whether time_t is signed or
not (more difficult perhaps). Some platforms use signed time_t to allow
representation of dates prior to 1970-01-01, while others make this signed.
Some other platforms (S/390 for example) have retained time_t as 32-bits but
have a time64_t for 64 bits. It might be useful to account for this.
--Randall
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help