Then, use them in analyze and oomctl.
#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);
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) {
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))
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) {
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) {
#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;
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) {
"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;
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);
#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"
_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);
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[]) {
/* 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) {
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;
+}
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);