chiark / gitweb /
systemctl: also color filenames of drop-ins in cat
[elogind.git] / src / systemctl / systemctl.c
index d1f68754a91a5c957eb45c7ceb73ba8e838ae615..c20a82b8b45ad0c2938f1613341993418f711719 100644 (file)
@@ -3678,6 +3678,7 @@ static int get_unit_dbus_path_by_pid(
 
         _cleanup_bus_error_free_ sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_bus_message_unref_ sd_bus_message *reply = NULL;
+        char *u;
         int r;
 
         r = sd_bus_call_method(
@@ -3694,10 +3695,15 @@ static int get_unit_dbus_path_by_pid(
                 return r;
         }
 
-        r = sd_bus_message_read(reply, "o", unit);
+        r = sd_bus_message_read(reply, "o", &u);
         if (r < 0)
                 return bus_log_parse_error(r);
 
+        u = strdup(u);
+        if (!u)
+                return log_oom();
+
+        *unit = u;
         return 0;
 }
 
@@ -3817,9 +3823,11 @@ static int cat(sd_bus *bus, char **args) {
                 }
 
                 STRV_FOREACH(path, dropin_paths) {
-                        printf("%s%s\n",
+                        printf("%s%s# %s%s\n",
                                isempty(fragment_path) && path == dropin_paths ? "" : "\n",
-                               *path);
+                               ansi_highlight_blue(),
+                               *path,
+                               ansi_highlight_off());
                         fflush(stdout);
 
                         r = sendfile_full(STDOUT_FILENO, *path);
@@ -3880,8 +3888,10 @@ static int show(sd_bus *bus, char **args) {
                         } else {
                                 /* Interpret as PID */
                                 r = get_unit_dbus_path_by_pid(bus, id, &unit);
-                                if (r < 0)
+                                if (r < 0) {
                                         ret = r;
+                                        continue;
+                                }
                         }
 
                         show_one(args[0], bus, unit, show_properties, &new_line, &ellipsized);