shithub: scc

Download patch

ref: 1d263bb8b0a2b372050ec285a1306431c203542e
parent: 7e4b96f8949a4dc2e1da9a003b148ab0973123b0
author: Roberto E. Vargas Caballero <k0ga@shike2.com>
date: Tue May 17 09:21:48 EDT 2022

libc: Fix return value in strftime()

It must return 0 when there is truncation in the output buffer.

--- a/src/libc/time/strftime.c
+++ b/src/libc/time/strftime.c
@@ -169,9 +169,10 @@
 {
 	int ch, abrev, val, fill, width;
 	size_t n, inc;
-	char *tfmt;
+	char *tfmt, *begin;
 
-	for (n = --maxsize; (ch = *format++) && n > 0; s += inc, n -= inc) {
+	begin = s;
+	for (n = maxsize; (ch = *format++) && n > 0; s += inc, n -= inc) {
 		if (ch != '%') {
 			*s = ch;
 			inc = 1;
@@ -320,7 +321,11 @@
 			break;
 		}
 	}
+
+	n = s - begin;
+	if (n == maxsize)
+		return 0;
 	*s = '\0';
 
-	return maxsize - n;
+	return n;
 }