hwclock-util: the struct tm parameter is not a pure return parameter, it's also an input parameter

This commit is contained in:
Lennart Poettering
2024-09-05 17:19:14 +02:00
parent 41902bacc3
commit 9640db13f0
2 changed files with 6 additions and 7 deletions
+5 -6
View File
@@ -9,24 +9,23 @@
#include "fd-util.h"
#include "hwclock-util.h"
int hwclock_get(struct tm *ret) {
int hwclock_get(struct tm *tm /* input + output! */) {
_cleanup_close_ int fd = -EBADF;
assert(ret);
assert(tm);
fd = open("/dev/rtc", O_RDONLY|O_CLOEXEC);
if (fd < 0)
return -errno;
/* This leaves the timezone fields of struct ret uninitialized! */
if (ioctl(fd, RTC_RD_TIME, ret) < 0)
if (ioctl(fd, RTC_RD_TIME, tm) < 0)
/* Some drivers return -EINVAL in case the time could not be kept, i.e. power loss
* happened. Let's turn that into a clearly recognizable error */
return errno == EINVAL ? -ENODATA : -errno;
/* We don't know daylight saving, so we reset this in order not
* to confuse mktime(). */
ret->tm_isdst = -1;
/* We don't know daylight saving, so we reset this in order not to confuse mktime(). */
tm->tm_isdst = -1;
return 0;
}
+1 -1
View File
@@ -3,5 +3,5 @@
#include <time.h>
int hwclock_get(struct tm *ret);
int hwclock_get(struct tm *tm);
int hwclock_set(const struct tm *tm);