plugins:rtc.c: drop some invalid condition checks

There are some invalid condition checks in rtc.c, when rtc_file is
missing, it should not consider that as a error and return, otherwise,
it can lead to the case that time_set wont be called at all.

With this fix, when both RTC and file restore fail, it will fall back
to call time_set(NULL) and restore time from rtc_timestamp, this
ensures the OS has a valid time at the very first boot.

Signed-off-by: Ming Liu <liu.ming50@gmail.com>
This commit is contained in:
Ming Liu
2025-10-14 15:38:56 +02:00
parent 6f6267f3b3
commit 13a8f56b46
+21 -13
View File
@@ -170,16 +170,18 @@ static void file_save(void *arg)
static void file_restore(void *arg)
{
struct tm tm = { 0 };
int rc = 1;
int rc = 0;
FILE *fp;
char msg[120];
if (!rtc_file) {
logit(LOG_NOTICE, "System has no RTC (missing driver?), skipping restore.");
snprintf(msg, sizeof(msg), "Resetting system clock to kernel default, %s.", rtc_timestamp);
print_desc(NULL, msg);
rc = time_set(NULL);
print(rc, NULL);
return;
}
print_desc(NULL, "Restoring system clock from backup");
fp = fopen(rtc_file, "r");
if (fp) {
char buf[32];
@@ -187,18 +189,25 @@ static void file_restore(void *arg)
if (fgets(buf, sizeof(buf), fp)) {
chomp(buf);
strptime(buf, RTC_FMT, &tm);
rc = time_set(&tm);
if (!strptime(buf, RTC_FMT, &tm))
rc = 1;
}
fclose(fp);
} else
logit(LOG_WARNING, "Missing %s", rtc_file);
}
rc = 1;
if (rc) {
time_set(NULL);
rc = 2;
print_desc(NULL, "Failed to restore system clock from restore file");
print(2, NULL);
snprintf(msg, sizeof(msg), "Resetting system clock to kernel default, %s.", rtc_timestamp);
print_desc(NULL, msg);
rc = time_set(NULL);
print(rc, NULL);
} else {
print_desc(NULL, "Restoring system clock from restore file");
rc = time_set(&tm);
print(rc, NULL);
}
print(rc, NULL);
}
static int rtc_open(void)
@@ -292,8 +301,7 @@ static void rtc_restore(void *arg)
print(2, NULL);
/* Try restoring from last save game */
if (rtc_file)
file_restore(arg);
file_restore(arg);
} else
print(0, NULL);