X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Ftimedate%2Ftimedated.c;h=cdb6e5b16cfeffdceba63778a3b46377c3a6acbd;hb=d0af76e68a5bab2e4fd9674b1c64a9f38d7afe97;hp=1d4d73911e20362b5674160333a0e797fa8ef5bb;hpb=4dd1de72e8e7ece77e8831e77eea650de404af75;p=elogind.git diff --git a/src/timedate/timedated.c b/src/timedate/timedated.c index 1d4d73911..cdb6e5b16 100644 --- a/src/timedate/timedated.c +++ b/src/timedate/timedated.c @@ -90,6 +90,8 @@ typedef struct TZ { } TZ; static TZ tz = { + .zone = NULL, + .local_rtc = false, .can_ntp = -1, .use_ntp = -1, }; @@ -216,7 +218,7 @@ static int write_data_timezone(void) { static int write_data_local_rtc(void) { int r; - char *s, *w; + _cleanup_free_ char *s = NULL, *w = NULL; r = read_full_file("/etc/adjtime", &s, NULL); if (r < 0) { @@ -234,55 +236,42 @@ static int write_data_local_rtc(void) { size_t a, b; p = strchr(s, '\n'); - if (!p) { - free(s); + if (!p) return -EIO; - } p = strchr(p+1, '\n'); - if (!p) { - free(s); + if (!p) return -EIO; - } p++; e = strchr(p, '\n'); - if (!e) { - free(s); + if (!e) return -EIO; - } a = p - s; b = strlen(e); w = new(char, a + (tz.local_rtc ? 5 : 3) + b + 1); - if (!w) { - free(s); + if (!w) return -ENOMEM; - } *(char*) mempcpy(stpcpy(mempcpy(w, s, a), tz.local_rtc ? "LOCAL" : "UTC"), e, b) = 0; if (streq(w, NULL_ADJTIME_UTC)) { - free(w); - - if (unlink("/etc/adjtime") < 0) { + if (unlink("/etc/adjtime") < 0) if (errno != ENOENT) return -errno; - } return 0; } } label_init("/etc"); - r = write_one_line_file_atomic_label("/etc/adjtime", w); - free(w); - - return r; + return write_string_file_atomic_label("/etc/adjtime", w); } static char** get_ntp_services(void) { - char **r = NULL, **files, **i; + _cleanup_strv_free_ char **r = NULL, **files; + char **i; int k; k = conf_files_list(&files, ".list", NULL, @@ -295,14 +284,14 @@ static char** get_ntp_services(void) { return NULL; STRV_FOREACH(i, files) { - FILE *f; + _cleanup_fclose_ FILE *f; f = fopen(*i, "re"); if (!f) continue; for (;;) { - char line[PATH_MAX], *l, **q; + char line[PATH_MAX], *l; if (!fgets(line, sizeof(line), f)) { @@ -316,22 +305,17 @@ static char** get_ntp_services(void) { if (l[0] == 0 || l[0] == '#') continue; - q = strv_append(r, l); - if (!q) { + if (strv_extend(&r, l) < 0) { log_oom(); - break; + return NULL; } - - strv_free(r); - r = q; } - - fclose(f); } - strv_free(files); + i = r; + r = NULL; /* avoid cleanup */ - return strv_uniq(r); + return strv_uniq(i); } static int read_ntp(DBusConnection *bus) {