Copyright 2010-2013 Lennart Poettering
Copyright 2013 Simon Peeters
-
- systemd is free software; you can redistribute it and/or modify it
- under the terms of the GNU Lesser General Public License as published by
- the Free Software Foundation; either version 2.1 of the License, or
- (at your option) any later version.
-
- systemd is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public License
- along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
#include <getopt.h>
char *architecture;
};
-static int acquire_bus(bool need_full_bus, sd_bus **bus) {
+
+static int acquire_systemd_bus(sd_bus **bus) {
+ bool user = arg_scope != UNIT_FILE_SYSTEM;
+
+ return bus_connect_transport_systemd(arg_transport, arg_host, user, bus);
+}
+
+static int acquire_full_bus(bool *use_full_bus, sd_bus **bus) {
bool user = arg_scope != UNIT_FILE_SYSTEM;
- if (need_full_bus)
- return bus_connect_transport(arg_transport, arg_host, user, bus);
- else
- return bus_connect_transport_systemd(arg_transport, arg_host, user, bus);
+ if (*use_full_bus) {
+ if (bus_connect_transport(arg_transport, arg_host, user, bus) == 0)
+ return 0;
+
+ *use_full_bus = false;
+ }
+
+ return acquire_systemd_bus(bus);
}
static int bus_get_uint64_property(sd_bus *bus, const char *path, const char *interface, const char *property, uint64_t *val) {
return -EIO;
if (times.finish_time <= 0) {
- log_error("Bootup is not yet finished. Please try again later.");
+ log_error("Bootup is not yet finished (org.freedesktop.systemd1.Manager.FinishTimestampMonotonic=%"PRIu64").\n"
+ "Please try again later.\n"
+ "Hint: Use 'systemctl%s list-jobs' to see active jobs",
+ times.finish_time,
+ arg_scope == UNIT_FILE_SYSTEM ? "" : " --user");
return -EINPROGRESS;
}
"org.freedesktop.hostname1",
"/org/freedesktop/hostname1",
hostname_map,
+ BUS_MAP_STRDUP,
&error,
+ NULL,
host);
if (r < 0)
log_debug_errno(r, "Failed to get host information from systemd-hostnamed: %s", bus_error_message(&error, r));
"org.freedesktop.systemd1",
"/org/freedesktop/systemd1",
manager_map,
+ BUS_MAP_STRDUP,
&error,
+ NULL,
host);
if (r < 0)
return log_error_errno(r, "Failed to get host information from systemd: %s", bus_error_message(&error, r));
- *hi = host;
- host = NULL;
+ *hi = TAKE_PTR(host);
return 0;
}
struct unit_times *times;
struct boot_times *boot;
int n, m = 1, y = 0, r;
+ bool use_full_bus = true;
double width;
_cleanup_free_ char *pretty_times = NULL;
struct unit_times *u;
- r = acquire_bus(true, &bus);
+ r = acquire_full_bus(&use_full_bus, &bus);
if (r < 0)
return log_error_errno(r, "Failed to create bus connection: %m");
if (n < 0)
return n;
- n = acquire_host_info(bus, &host);
- if (n < 0)
- return n;
+ if (use_full_bus) {
+ n = acquire_host_info(bus, &host);
+ if (n < 0)
+ return n;
+ }
n = acquire_time_data(bus, ×);
if (n <= 0)
svg("<rect class=\"background\" width=\"100%%\" height=\"100%%\" />\n");
svg("<text x=\"20\" y=\"50\">%s</text>", pretty_times);
- svg("<text x=\"20\" y=\"30\">%s %s (%s %s %s) %s %s</text>",
- isempty(host->os_pretty_name) ? "Linux" : host->os_pretty_name,
- strempty(host->hostname),
- strempty(host->kernel_name),
- strempty(host->kernel_release),
- strempty(host->kernel_version),
- strempty(host->architecture),
- strempty(host->virtualization));
+ if (use_full_bus)
+ svg("<text x=\"20\" y=\"30\">%s %s (%s %s %s) %s %s</text>",
+ isempty(host->os_pretty_name) ? "Linux" : host->os_pretty_name,
+ strempty(host->hostname),
+ strempty(host->kernel_name),
+ strempty(host->kernel_release),
+ strempty(host->kernel_version),
+ strempty(host->architecture),
+ strempty(host->virtualization));
svg("<g transform=\"translate(%.3f,100)\">\n", 20.0 + (SCALE_X * boot->firmware_time));
svg_graph_box(m, -(double) boot->firmware_time, boot->finish_time);
Hashmap *h;
int n, r;
- r = acquire_bus(false, &bus);
+ r = acquire_systemd_bus(&bus);
if (r < 0)
return log_error_errno(r, "Failed to create bus connection: %m");
}
unit_times_hashmap = h;
- pager_open(arg_no_pager, false);
+ (void) pager_open(arg_no_pager, false);
puts("The time after the unit is active or started is printed after the \"@\" character.\n"
"The time the unit takes to start is printed after the \"+\" character.\n");
unsigned i;
int n, r;
- r = acquire_bus(false, &bus);
+ r = acquire_systemd_bus(&bus);
if (r < 0)
return log_error_errno(r, "Failed to create bus connection: %m");
qsort(times, n, sizeof(struct unit_times), compare_unit_time);
- pager_open(arg_no_pager, false);
+ (void) pager_open(arg_no_pager, false);
for (i = 0; i < (unsigned) n; i++) {
char ts[FORMAT_TIMESPAN_MAX];
_cleanup_free_ char *buf = NULL;
int r;
- r = acquire_bus(false, &bus);
+ r = acquire_systemd_bus(&bus);
if (r < 0)
return log_error_errno(r, "Failed to create bus connection: %m");
int r;
UnitInfo u;
- r = acquire_bus(false, &bus);
+ r = acquire_systemd_bus(&bus);
if (r < 0)
return log_error_errno(r, "Failed to create bus connection: %m");
const char *text = NULL;
int r;
- r = acquire_bus(false, &bus);
+ r = acquire_systemd_bus(&bus);
if (r < 0)
return log_error_errno(r, "Failed to create bus connection: %m");
- pager_open(arg_no_pager, false);
+ (void) pager_open(arg_no_pager, false);
r = sd_bus_call_method(
bus,
&reply,
NULL);
if (r < 0)
- return log_error_errno(r, "Failed issue method call: %s", bus_error_message(&error, r));
+ return log_error_errno(r, "Failed to issue method call: %s", bus_error_message(&error, r));
r = sd_bus_message_read(reply, "s", &text);
if (r < 0)
assert(argc == 2);
assert(argv);
- r = acquire_bus(false, &bus);
+ r = acquire_systemd_bus(&bus);
if (r < 0)
return log_error_errno(r, "Failed to create bus connection: %m");
_cleanup_free_ char *level = NULL;
int r;
- r = acquire_bus(false, &bus);
+ r = acquire_systemd_bus(&bus);
if (r < 0)
return log_error_errno(r, "Failed to create bus connection: %m");
assert(argc == 2);
assert(argv);
- r = acquire_bus(false, &bus);
+ r = acquire_systemd_bus(&bus);
if (r < 0)
return log_error_errno(r, "Failed to create bus connection: %m");
_cleanup_free_ char *target = NULL;
int r;
- r = acquire_bus(false, &bus);
+ r = acquire_systemd_bus(&bus);
if (r < 0)
return log_error_errno(r, "Failed to create bus connection: %m");
static int dump_syscall_filters(int argc, char *argv[], void *userdata) {
bool first = true;
- pager_open(arg_no_pager, false);
+ (void) pager_open(arg_no_pager, false);
if (strv_isempty(strv_skip(argv, 1))) {
int i;
r = calendar_spec_to_string(spec, &t);
if (r < 0) {
- ret = log_error_errno(r, "Failed to fomat calendar specification '%s': %m", *p);
+ ret = log_error_errno(r, "Failed to format calendar specification '%s': %m", *p);
continue;
}
assert(IN_SET(argc, 1, 2));
assert(argv);
- r = acquire_bus(false, &bus);
+ r = acquire_systemd_bus(&bus);
if (r < 0)
return log_error_errno(r, "Failed to create bus connection: %m");
static int help(int argc, char *argv[], void *userdata) {
- pager_open(arg_no_pager, false);
+ (void) pager_open(arg_no_pager, false);
printf("%s [OPTIONS...] {COMMAND} ...\n\n"
"Profile systemd, show unit dependencies, check unit files.\n\n"