logo

utils-std

Collection of commonly available Unix tools git clone https://anongit.hacktivis.me/git/utils-std.git/
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:

MMakefile5++++-
Mcmd/date.c5+++--
Mlib/absu.h6+++---
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)