commit: b70ff3710668d454106d5c47ce92a3f8e69dcfe4
parent 4649c65422512b7e5539e1d957990a0c48c69d1e
Author: Haelwenn (lanodan) Monnier <contact@hacktivis.me>
Date: Sat, 20 Dec 2025 17:24:53 +0100
cmd/date: Fix %:z formatting of sub-hour western timezones
Diffstat:
3 files changed, 10 insertions(+), 6 deletions(-)
diff --git a/Makefile b/Makefile
@@ -114,13 +114,16 @@ cmd/getconf: cmd/getconf.c build/getconf_vars.h libutils/libutils.a
$(RM) -f ${<:=.gcov} ${@:=.gcda} ${@:=.gcno}
$(CC) -std=c99 $(CPPFLAGS) $(CFLAGS) -I./build/ -o cmd/getconf cmd/getconf.c libutils/libutils.a $(LDFLAGS) $(LDSTATIC)
+cmd/date: cmd/date.c libutils/libutils.a lib/absu.h
+ $(RM) -f ${<:=.gcov} ${@:=.gcda} ${@:=.gcno}
+ $(CC) -std=c99 $(CPPFLAGS) $(CFLAGS) -I./build/ -o cmd/date cmd/date.c libutils/libutils.a $(LDFLAGS) $(LDSTATIC)
+
cmd/base64: cmd/base64.c libutils/libutils.a
cmd/basename: cmd/basename.c libutils/libutils.a
cmd/chmod: cmd/chmod.c libutils/libutils.a
cmd/chown: cmd/chown.c libutils/libutils.a
cmd/cmp: cmd/cmp.c libutils/libutils.a
cmd/cut: cmd/cut.c libutils/libutils.a
-cmd/date: cmd/date.c libutils/libutils.a
cmd/df: cmd/df.c libutils/libutils.a
cmd/env: cmd/env.c libutils/libutils.a
cmd/head: cmd/head.c libutils/libutils.a
diff --git a/cmd/date.c b/cmd/date.c
@@ -7,6 +7,7 @@
#define _XOPEN_SOURCE 700 // strptime is in XSI
#include "../config.h"
+#include "../lib/absu.h"
#include "../libutils/datetime_parse.h" /* datetime_parse */
#include "../libutils/getopt_nolong.h"
@@ -73,8 +74,8 @@ date_strftime(char *restrict buf,
if(fmt_buf[0] == '%' && fmt_buf[1] == ':' && fmt_buf[2] == 'z')
{
- size_t got =
- snprintf(buf, buflen, "%+.2ld:%.2ld", tm->tm_gmtoff / 3600, tm->tm_gmtoff % 3600 / 60);
+ size_t got = snprintf(
+ buf, buflen, "%+.2ld:%.2u", tm->tm_gmtoff / 3600, absu(tm->tm_gmtoff % 3600 / 60));
if(got == 0) return got;
buf += got;
diff --git a/lib/absu.h b/lib/absu.h
@@ -8,7 +8,7 @@
//
// Sadly the abs() family of functions in <stdint.h> is misdesigned
-extern unsigned int
+static inline unsigned int
absu(int a)
{
if(a >= 0)
@@ -17,7 +17,7 @@ absu(int a)
return (unsigned int)-a;
}
-extern long unsigned int
+static inline long unsigned int
labsu(long int a)
{
if(a >= 0)
@@ -26,7 +26,7 @@ labsu(long int a)
return (long unsigned int)-a;
}
-extern long long unsigned int
+static inline long long unsigned int
llabsu(long long int a)
{
if(a >= 0)