diff --git a/rtc.c b/rtc.c index 90828d0..e559813 100644 --- a/rtc.c +++ b/rtc.c @@ -42,7 +42,7 @@ static int driver_initialised = 0; static struct { int (*init)(void); void (*fini)(void); - void (*time_pre_init)(void); + int (*time_pre_init)(void); void (*time_init)(void (*after_hook)(void*), void *anything); void (*start_measurements)(void); int (*write_parameters)(void); diff --git a/rtc_linux.c b/rtc_linux.c index 66d35e9..613c509 100644 --- a/rtc_linux.c +++ b/rtc_linux.c @@ -973,7 +973,7 @@ RTC_Linux_WriteParameters(void) etc in this case, since we have fewer requirements regarding the RTC behaviour than we do for the rest of the module. */ -void +int RTC_Linux_TimePreInit(void) { int fd, status; @@ -991,7 +991,7 @@ RTC_Linux_TimePreInit(void) fd = open(CNF_GetRtcDevice(), O_RDONLY); if (fd < 0) { - return; /* Can't open it, and won't be able to later */ + return 0; /* Can't open it, and won't be able to later */ } /* Retry reading the rtc until both read attempts give the same sec value. @@ -1007,6 +1007,8 @@ RTC_Linux_TimePreInit(void) /* Read system clock */ LCL_ReadCookedTime(&old_sys_time, NULL); + close(fd); + if (status >= 0) { /* Convert to seconds since 1970 */ rtc_tm.tm_sec = rtc_raw.tm_sec; @@ -1047,10 +1049,11 @@ RTC_Linux_TimePreInit(void) } } else { LOG(LOGS_WARN, LOGF_RtcLinux, "Could not convert RTC reading to seconds since 1/1/1970"); + return 0; } } - close(fd); + return 1; } /* ================================================== */ diff --git a/rtc_linux.h b/rtc_linux.h index 4ac13e1..8cf23a6 100644 --- a/rtc_linux.h +++ b/rtc_linux.h @@ -30,7 +30,7 @@ extern int RTC_Linux_Initialise(void); extern void RTC_Linux_Finalise(void); -extern void RTC_Linux_TimePreInit(void); +extern int RTC_Linux_TimePreInit(void); extern void RTC_Linux_TimeInit(void (*after_hook)(void *), void *anything); extern void RTC_Linux_StartMeasurements(void);