chiark / gitweb /
build-sys: add a makefile target to run all tests through valgrind
[elogind.git] / src / timedate / timedated.c
index e068724903f57bd85758c77f919cdd3e95b1e079..525c72e497728b9e1b15864f8ad4a8904dba31fc 100644 (file)
@@ -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_string_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) {
@@ -678,7 +662,7 @@ static DBusHandlerResult timedate_message_handler(
                                 return bus_send_error_reply(connection, message, NULL, r);
                         }
 
-                        /* 2. Tell the kernel our time zone */
+                        /* 2. Tell the kernel our timezone */
                         hwclock_set_timezone(NULL);
 
                         if (tz.local_rtc) {
@@ -735,7 +719,7 @@ static DBusHandlerResult timedate_message_handler(
                                 return bus_send_error_reply(connection, message, NULL, r);
                         }
 
-                        /* 2. Tell the kernel our time zone */
+                        /* 2. Tell the kernel our timezone */
                         hwclock_set_timezone(NULL);
 
                         /* 3. Synchronize clocks */