From 1ad8138819ced49851e618c9c063aa0ffc86718c Mon Sep 17 00:00:00 2001
From: Rich Felker <dalias@aerifal.cx>
Date: Tue, 7 Aug 2018 22:15:04 -0400
Subject: fix sign of strftime %z output with offsets <1 hour west of UTC

the sign character produced came from the sign of tm_gmtoff/3600 as an
integer division, which is zero for negative offsets smaller in
magnitude than 3600. instead of printing the hours and minutes as
separate fields, print them as a single value of the form
hours*100+minutes, which naturally has the correct sign.
---
 src/time/strftime.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

(limited to 'src/time')

diff --git a/src/time/strftime.c b/src/time/strftime.c
index 0a256970..d3f2add9 100644
--- a/src/time/strftime.c
+++ b/src/time/strftime.c
@@ -181,9 +181,8 @@ const char *__strftime_fmt_1(char (*s)[100], size_t *l, int f, const struct tm *
 			*l = 0;
 			return "";
 		}
-		*l = snprintf(*s, sizeof *s, "%+.2ld%.2d",
-			(tm->__tm_gmtoff)/3600,
-			abs(tm->__tm_gmtoff%3600)/60);
+		*l = snprintf(*s, sizeof *s, "%+.4ld",
+			tm->__tm_gmtoff/3600*100 + tm->__tm_gmtoff%3600/60);
 		return *s;
 	case 'Z':
 		if (tm->tm_isdst < 0) {
-- 
cgit v1.2.3-70-g09d2