]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
bus-message-util: introduce bus_message_dump_fd() and _string() 34743/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 12 Oct 2024 00:49:23 +0000 (09:49 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 12 Oct 2024 20:44:19 +0000 (05:44 +0900)
Then, use them in analyze and oomctl.

src/analyze/analyze-dump.c
src/analyze/analyze-malloc.c
src/analyze/analyze.c
src/analyze/analyze.h
src/oom/oomctl.c
src/shared/bus-message-util.c
src/shared/bus-message-util.h

index f1bcb5b13c519c6f1dd95ee381f296e1df5b0478..4ca6278d6acc43281411d13f8b387be24d3c0817 100644 (file)
@@ -6,13 +6,12 @@
 #include "analyze.h"
 #include "bus-error.h"
 #include "bus-locator.h"
+#include "bus-message-util.h"
 #include "bus-util.h"
-#include "copy.h"
 
 static int dump_string(sd_bus *bus) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
-        const char *text;
         int r;
 
         assert(bus);
@@ -21,12 +20,7 @@ static int dump_string(sd_bus *bus) {
         if (r < 0)
                 return log_error_errno(r, "Failed to call Dump: %s", bus_error_message(&error, r));
 
-        r = sd_bus_message_read(reply, "s", &text);
-        if (r < 0)
-                return bus_log_parse_error(r);
-
-        fputs(text, stdout);
-        return 0;
+        return bus_message_dump_string(reply);
 }
 
 static int dump_fd(sd_bus *bus) {
@@ -43,13 +37,12 @@ static int dump_fd(sd_bus *bus) {
                 return log_error_errno(r, "Failed to call DumpByFileDescriptor: %s",
                                        bus_error_message(&error, r));
 
-        return dump_fd_reply(reply);
+        return bus_message_dump_fd(reply);
 }
 
 static int dump_patterns_string(sd_bus *bus, char **patterns) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL, *m = NULL;
-        const char *text;
         int r;
 
         if (strv_isempty(patterns))
@@ -68,12 +61,7 @@ static int dump_patterns_string(sd_bus *bus, char **patterns) {
                 return log_error_errno(r, "Failed to call DumpUnitsMatchingPatterns: %s",
                                        bus_error_message(&error, r));
 
-        r = sd_bus_message_read(reply, "s", &text);
-        if (r < 0)
-                return bus_log_parse_error(r);
-
-        fputs(text, stdout);
-        return 0;
+        return bus_message_dump_string(reply);
 }
 
 static int dump_patterns_fd(sd_bus *bus, char **patterns) {
@@ -97,7 +85,7 @@ static int dump_patterns_fd(sd_bus *bus, char **patterns) {
                 return log_error_errno(r, "Failed to call DumpUnitsMatchingPatternsByFileDescriptor: %s",
                                        bus_error_message(&error, r));
 
-        return dump_fd_reply(reply);
+        return bus_message_dump_fd(reply);
 }
 
 static int mangle_patterns(char **args, char ***ret) {
index 514526d14256a190e40a00b528d9f27d0c3452b9..9eb234e6690edfdcfa1bd4bc7c1a62504a69eaf1 100644 (file)
@@ -6,6 +6,7 @@
 #include "analyze.h"
 #include "bus-error.h"
 #include "bus-internal.h"
+#include "bus-message-util.h"
 
 static int dump_malloc_info(sd_bus *bus, char *service) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
@@ -26,7 +27,7 @@ static int dump_malloc_info(sd_bus *bus, char *service) {
         if (r < 0)
                 return log_error_errno(r, "Failed to call GetMallocInfo on '%s': %s", service, bus_error_message(&error, r));
 
-        return dump_fd_reply(reply);
+        return bus_message_dump_fd(reply);
 }
 
 int verb_malloc(int argc, char *argv[], void *userdata) {
index 24188311ff49c87ab263d5682a5a26de729f519b..5aba273ca6ce926de52c6392f46cde5a6873e3d0 100644 (file)
@@ -179,23 +179,6 @@ void time_parsing_hint(const char *p, bool calendar, bool timestamp, bool timesp
                            "Use 'systemd-analyze timespan \"%s\"' instead?", p);
 }
 
-int dump_fd_reply(sd_bus_message *message) {
-        int fd, r;
-
-        assert(message);
-
-        r = sd_bus_message_read(message, "h", &fd);
-        if (r < 0)
-                return bus_log_parse_error(r);
-
-        fflush(stdout);
-        r = copy_bytes(fd, STDOUT_FILENO, UINT64_MAX, 0);
-        if (r < 0)
-                return r;
-
-        return 1;  /* Success */
-}
-
 static int help(int argc, char *argv[], void *userdata) {
         _cleanup_free_ char *link = NULL, *dot_link = NULL;
         int r;
index 48d9fabbd0461d22c469918069dcf775ff6b577a..959b8a1b8508324ed567883da556a4401127fab9 100644 (file)
@@ -57,5 +57,3 @@ int acquire_bus(sd_bus **bus, bool *use_full_bus);
 int bus_get_unit_property_strv(sd_bus *bus, const char *path, const char *property, char ***strv);
 
 void time_parsing_hint(const char *p, bool calendar, bool timestamp, bool timespan);
-
-int dump_fd_reply(sd_bus_message *message);
index 00914f35df4af4b1b965de4e47e3b5c1b727f06a..b206a78c3dac87cfe35395574b5617bed87ef8cc 100644 (file)
@@ -6,7 +6,7 @@
 #include "build.h"
 #include "bus-error.h"
 #include "bus-locator.h"
-#include "copy.h"
+#include "bus-message-util.h"
 #include "main-func.h"
 #include "pretty-print.h"
 #include "terminal-util.h"
@@ -47,7 +47,6 @@ static int dump_state(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
-        int fd = -EBADF;
         int r;
 
         r = sd_bus_open_system(&bus);
@@ -60,12 +59,7 @@ static int dump_state(int argc, char *argv[], void *userdata) {
         if (r < 0)
                 return log_error_errno(r, "Failed to dump context: %s", bus_error_message(&error, r));
 
-        r = sd_bus_message_read(reply, "h", &fd);
-        if (r < 0)
-                return bus_log_parse_error(r);
-
-        fflush(stdout);
-        return copy_bytes(fd, STDOUT_FILENO, UINT64_MAX, 0);
+        return bus_message_dump_fd(reply);
 }
 
 static int parse_argv(int argc, char *argv[]) {
index 53f63508ebc93a60a4c5d4e60026c8849604cc4a..d8c483ef62ba8fa51aeb25f758b8e2129225121c 100644 (file)
@@ -1,7 +1,10 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
-#include "bus-message-util.h"
+#include <unistd.h>
 
+#include "bus-message-util.h"
+#include "bus-util.h"
+#include "copy.h"
 #include "resolve-util.h"
 
 int bus_message_read_ifindex(sd_bus_message *message, sd_bus_error *error, int *ret) {
@@ -183,3 +186,34 @@ clear:
 
         return r;
 }
+
+int bus_message_dump_string(sd_bus_message *message) {
+        const char *s;
+        int r;
+
+        assert(message);
+
+        r = sd_bus_message_read(message, "s", &s);
+        if (r < 0)
+                return bus_log_parse_error(r);
+
+        fputs(s, stdout);
+        return 0;
+}
+
+int bus_message_dump_fd(sd_bus_message *message) {
+        int fd, r;
+
+        assert(message);
+
+        r = sd_bus_message_read(message, "h", &fd);
+        if (r < 0)
+                return bus_log_parse_error(r);
+
+        fflush(stdout);
+        r = copy_bytes(fd, STDOUT_FILENO, UINT64_MAX, 0);
+        if (r < 0)
+                return log_error_errno(r, "Failed to dump contents in received file descriptor: %m");
+
+        return 0;
+}
index b82c0830a0718ecf51c4c2411676bae55c91585b..50025766c2ee8003229e27fea5aeb9f38c9b47a2 100644 (file)
@@ -16,3 +16,6 @@ int bus_message_read_dns_servers(
                         bool extended,
                         struct in_addr_full ***ret_dns,
                         size_t *ret_n_dns);
+
+int bus_message_dump_string(sd_bus_message *message);
+int bus_message_dump_fd(sd_bus_message *message);