Răsfoiți Sursa

fix strftime field widths with %F format and zero year

the code to strip initial sign and leading zeros inadvertently
stripped all the zeros and the subsequent '-' separating the month.
instead, only strip sign characters from the very first position, and
only strip zeros when they are followed by another digit.

based on testing by Dennis Wölfing.
Rich Felker 7 ani în urmă
părinte
comite
596207aa38
1 a modificat fișierele cu 2 adăugiri și 1 ștergeri
  1. 2 1
      src/time/strftime.c

+ 2 - 1
src/time/strftime.c

@@ -251,7 +251,8 @@ size_t __strftime_l(char *restrict s, size_t n, const char *restrict f, const st
 		t = __strftime_fmt_1(&buf, &k, *f, tm, loc, pad);
 		if (!t) break;
 		if (width) {
-			for (; *t=='+' || *t=='-' || (*t=='0'&&t[1]); t++, k--);
+			if (*t=='+' || *t=='-') t++, k--;
+			for (; *t=='0' && t[1]-'0'<10U; t++, k--);
 			width--;
 			if (plus && tm->tm_year >= 10000-1900)
 				s[l++] = '+';