hwclock-util: the struct tm parameter is not a pure return parameter, it's also an input parameter
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user