shithub: rgbds

Download patch

ref: e2e01e84faa8b60869e7f9d2a9ffba5e6566ca4e
parent: 93ee41756796733c5421f79ebe1d3264871194d7
author: ISSOtm <[email protected]>
date: Wed Jan 29 21:07:55 EST 2020

Fall back from failure in `time` a bit better

--- a/src/asm/symbol.c
+++ b/src/asm/symbol.c
@@ -716,7 +716,6 @@
 void sym_Init(void)
 {
 	int32_t i;
-	time_t now;
 
 	for (i = 0; i < MAXMACROARGS; i++) {
 		currentmacroargs[i] = NULL;
@@ -737,59 +736,41 @@
 
 	sym_AddSet("_RS", 0);
 
-	now = time(NULL);
-	if (now != (time_t)-1) {
-		const struct tm *time_local = localtime(&now);
+	time_t now = time(NULL);
 
-		strftime(SavedTIME, sizeof(SavedTIME), "\"%H:%M:%S\"",
-			 time_local);
-		strftime(SavedDATE, sizeof(SavedDATE), "\"%d %B %Y\"",
-			 time_local);
-		strftime(SavedTIMESTAMP_ISO8601_LOCAL,
-			 sizeof(SavedTIMESTAMP_ISO8601_LOCAL), "\"%Y-%m-%dT%H-%M-%S%z\"",
-			 time_local);
+	if (now == (time_t)-1) {
+		warn("Couldn't determine current time");
+		/* Fall back by pretending we are at the Epoch */
+		now = 0;
+	}
 
-		const struct tm *time_utc = gmtime(&now);
+	const struct tm *time_utc = gmtime(&now);
+	const struct tm *time_local = localtime(&now);
 
-		strftime(SavedTIMESTAMP_ISO8601_UTC,
-			 sizeof(SavedTIMESTAMP_ISO8601_UTC), "\"%Y-%m-%dT%H-%M-%SZ\"",
-			 time_utc);
+	strftime(SavedTIME, sizeof(SavedTIME), "\"%H:%M:%S\"",
+		 time_local);
+	strftime(SavedDATE, sizeof(SavedDATE), "\"%d %B %Y\"",
+		 time_local);
+	strftime(SavedTIMESTAMP_ISO8601_LOCAL,
+		 sizeof(SavedTIMESTAMP_ISO8601_LOCAL), "\"%Y-%m-%dT%H-%M-%S%z\"",
+		 time_local);
 
-		strftime(SavedDAY, sizeof(SavedDAY), "%d", time_utc);
-		strftime(SavedMONTH, sizeof(SavedMONTH), "%m", time_utc);
-		strftime(SavedYEAR, sizeof(SavedYEAR), "%Y", time_utc);
-		strftime(SavedHOUR, sizeof(SavedHOUR), "%H", time_utc);
-		strftime(SavedMINUTE, sizeof(SavedMINUTE), "%M", time_utc);
-		strftime(SavedSECOND, sizeof(SavedSECOND), "%S", time_utc);
+	strftime(SavedTIMESTAMP_ISO8601_UTC,
+		 sizeof(SavedTIMESTAMP_ISO8601_UTC), "\"%Y-%m-%dT%H-%M-%SZ\"",
+		 time_utc);
 
-		helper_RemoveLeadingZeros(SavedDAY);
-		helper_RemoveLeadingZeros(SavedMONTH);
-		helper_RemoveLeadingZeros(SavedHOUR);
-		helper_RemoveLeadingZeros(SavedMINUTE);
-		helper_RemoveLeadingZeros(SavedSECOND);
-	} else {
-		warnx("Couldn't determine current time.");
-		/*
-		 * The '?' have to be escaped or they will be treated as
-		 * trigraphs...
-		 */
-		snprintf(SavedTIME, sizeof(SavedTIME),
-			 "\"\?\?:\?\?:\?\?\"");
-		snprintf(SavedDATE, sizeof(SavedDATE),
-			 "\"\?\? \?\?\? \?\?\?\?\"");
-		snprintf(SavedTIMESTAMP_ISO8601_LOCAL,
-			 sizeof(SavedTIMESTAMP_ISO8601_LOCAL),
-			 "\"\?\?\?\?-\?\?-\?\?T\?\?:\?\?:\?\?+\?\?\?\?\"");
-		snprintf(SavedTIMESTAMP_ISO8601_UTC,
-			 sizeof(SavedTIMESTAMP_ISO8601_UTC),
-			 "\"\?\?\?\?-\?\?-\?\?T\?\?:\?\?:\?\?Z\"");
-		snprintf(SavedDAY, sizeof(SavedDAY), "1");
-		snprintf(SavedMONTH, sizeof(SavedMONTH), "1");
-		snprintf(SavedYEAR, sizeof(SavedYEAR), "1900");
-		snprintf(SavedHOUR, sizeof(SavedHOUR), "0");
-		snprintf(SavedMINUTE, sizeof(SavedMINUTE), "0");
-		snprintf(SavedSECOND, sizeof(SavedSECOND), "0");
-	}
+	strftime(SavedYEAR, sizeof(SavedYEAR), "%Y", time_utc);
+	/* This cannot start with zeros */
+	strftime(SavedMONTH, sizeof(SavedMONTH), "%m", time_utc);
+	helper_RemoveLeadingZeros(SavedMONTH);
+	strftime(SavedDAY, sizeof(SavedDAY), "%d", time_utc);
+	helper_RemoveLeadingZeros(SavedDAY);
+	strftime(SavedHOUR, sizeof(SavedHOUR), "%H", time_utc);
+	helper_RemoveLeadingZeros(SavedHOUR);
+	strftime(SavedMINUTE, sizeof(SavedMINUTE), "%M", time_utc);
+	helper_RemoveLeadingZeros(SavedMINUTE);
+	strftime(SavedSECOND, sizeof(SavedSECOND), "%S", time_utc);
+	helper_RemoveLeadingZeros(SavedSECOND);
 
 	sym_AddString("__TIME__", SavedTIME);
 	sym_AddString("__DATE__", SavedDATE);