diff options
author | Tom Gundersen <teg@jklm.no> | 2015-06-14 19:35:30 +0200 |
---|---|---|
committer | Tom Gundersen <teg@jklm.no> | 2015-06-14 19:35:30 +0200 |
commit | 83cb1438177497bd52430c314a6fa8e855863d7d (patch) | |
tree | 00c3b67bda28057cc1263ccbde4dc75dda6f2795 /src/timedate/timedatectl.c | |
parent | 7171ebcf2f10aa9a5ff4cff8a3f52a6ae12a01bb (diff) | |
parent | e7e55dbdc38f929805ab2407fbd50886043a9e7c (diff) |
Merge pull request #196 from dvdhrm/bus-map-props
tree-wide: fix memory leaks in users of bus_map_all_properties()
Diffstat (limited to 'src/timedate/timedatectl.c')
-rw-r--r-- | src/timedate/timedatectl.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/src/timedate/timedatectl.c b/src/timedate/timedatectl.c index 61b6e765c7..195d5f3892 100644 --- a/src/timedate/timedatectl.c +++ b/src/timedate/timedatectl.c @@ -73,6 +73,13 @@ typedef struct StatusInfo { bool ntp_synced; } StatusInfo; +static void status_info_clear(StatusInfo *info) { + if (info) { + free(info->timezone); + zero(*info); + } +} + static void print_status_info(const StatusInfo *i) { char a[FORMAT_TIMESTAMP_MAX]; struct tm tm; @@ -155,7 +162,7 @@ static void print_status_info(const StatusInfo *i) { } static int show_status(sd_bus *bus, char **args, unsigned n) { - StatusInfo info = {}; + _cleanup_(status_info_clear) StatusInfo info = {}; static const struct bus_properties_map map[] = { { "Timezone", "s", NULL, offsetof(StatusInfo, timezone) }, { "LocalRTC", "b", NULL, offsetof(StatusInfo, rtc_local) }, @@ -175,15 +182,11 @@ static int show_status(sd_bus *bus, char **args, unsigned n) { "/org/freedesktop/timedate1", map, &info); - if (r < 0) { - log_error_errno(r, "Failed to query server: %m"); - goto fail; - } + if (r < 0) + return log_error_errno(r, "Failed to query server: %m"); print_status_info(&info); -fail: - free(info.timezone); return r; } |