chiark / gitweb /
systemctl: properly initialize and free sd_bus_error in "systemctl cat"
authorLennart Poettering <lennart@poettering.net>
Mon, 16 Dec 2013 19:53:55 +0000 (20:53 +0100)
committerLennart Poettering <lennart@poettering.net>
Mon, 16 Dec 2013 20:06:57 +0000 (21:06 +0100)
We need to properly initialize all error structs before use and free
them after use.

Also, there's no point in flushing stdout if we output a \n anyway...

src/core/service.c
src/systemctl/systemctl.c

index 3b3f956..67cf630 100644 (file)
@@ -1254,8 +1254,7 @@ static int service_load(Unit *u) {
                         s->notify_access = NOTIFY_MAIN;
 
                 if (s->type == SERVICE_DBUS || s->bus_name) {
                         s->notify_access = NOTIFY_MAIN;
 
                 if (s->type == SERVICE_DBUS || s->bus_name) {
-                        r = unit_add_two_dependencies_by_name(u, UNIT_AFTER, UNIT_REQUIRES,
-                                                              SPECIAL_DBUS_SOCKET, NULL, true);
+                        r = unit_add_two_dependencies_by_name(u, UNIT_AFTER, UNIT_REQUIRES, SPECIAL_DBUS_SOCKET, NULL, true);
                         if (r < 0)
                                 return r;
                 }
                         if (r < 0)
                                 return r;
                 }
index 9a76349..3e6a688 100644 (file)
@@ -3743,20 +3743,19 @@ static int show_all(
 }
 
 static int cat(sd_bus *bus, char **args) {
 }
 
 static int cat(sd_bus *bus, char **args) {
+        _cleanup_free_ char *unit = NULL, *n = NULL;
         int r = 0;
         char **name;
 
         int r = 0;
         char **name;
 
-        _cleanup_free_ char *unit = NULL, *n = NULL;
-
         assert(bus);
         assert(args);
 
         pager_open_if_enabled();
 
         STRV_FOREACH(name, args+1) {
         assert(bus);
         assert(args);
 
         pager_open_if_enabled();
 
         STRV_FOREACH(name, args+1) {
-                _cleanup_free_ char *fragment_path = NULL;
+                _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
                 _cleanup_strv_free_ char **dropin_paths = NULL;
                 _cleanup_strv_free_ char **dropin_paths = NULL;
-                sd_bus_error error;
+                _cleanup_free_ char *fragment_path = NULL;
                 char **path;
 
                 n = unit_name_mangle(*name);
                 char **path;
 
                 n = unit_name_mangle(*name);
@@ -3800,6 +3799,7 @@ static int cat(sd_bus *bus, char **args) {
                 if (!isempty(fragment_path)) {
                         fprintf(stdout, "# %s\n", fragment_path);
                         fflush(stdout);
                 if (!isempty(fragment_path)) {
                         fprintf(stdout, "# %s\n", fragment_path);
                         fflush(stdout);
+
                         r = sendfile_full(STDOUT_FILENO, fragment_path);
                         if (r < 0) {
                                 log_warning("Failed to cat %s: %s", fragment_path, strerror(-r));
                         r = sendfile_full(STDOUT_FILENO, fragment_path);
                         if (r < 0) {
                                 log_warning("Failed to cat %s: %s", fragment_path, strerror(-r));
@@ -3812,6 +3812,7 @@ static int cat(sd_bus *bus, char **args) {
                                 isempty(fragment_path) && path == dropin_paths ? "" : "\n",
                                 *path);
                         fflush(stdout);
                                 isempty(fragment_path) && path == dropin_paths ? "" : "\n",
                                 *path);
                         fflush(stdout);
+
                         r = sendfile_full(STDOUT_FILENO, *path);
                         if (r < 0) {
                                 log_warning("Failed to cat %s: %s", *path, strerror(-r));
                         r = sendfile_full(STDOUT_FILENO, *path);
                         if (r < 0) {
                                 log_warning("Failed to cat %s: %s", *path, strerror(-r));