From 8722b297e5f71387a7f35a94a20a22af6ff64270 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 7 Apr 2020 09:39:46 +0200 Subject: [PATCH 1/4] busctl: use the pager everywhere There is no reason to assume that the user doesn't want the pager even if they are looking at xml output or such. --- src/busctl/busctl.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/busctl/busctl.c b/src/busctl/busctl.c index 3d03eb37a63..043aa5717f0 100644 --- a/src/busctl/busctl.c +++ b/src/busctl/busctl.c @@ -354,8 +354,7 @@ static int list_bus_names(int argc, char **argv, void *userdata) { return log_error_errno(r, "Failed to fill line: %m"); } - if (IN_SET(arg_json, JSON_OFF, JSON_PRETTY)) - (void) pager_open(arg_pager_flags); + (void) pager_open(arg_pager_flags); if (arg_json) r = table_print_json(table, stdout, (arg_json == JSON_PRETTY ? JSON_FORMAT_PRETTY : JSON_FORMAT_NEWLINE) | JSON_FORMAT_COLOR_AUTO); @@ -1004,6 +1003,7 @@ static int introspect(int argc, char **argv, void *userdata) { if (arg_xml_interface) { /* Just dump the received XML and finish */ + (void) pager_open(arg_pager_flags); puts(xml); return 0; } @@ -1088,17 +1088,14 @@ static int introspect(int argc, char **argv, void *userdata) { return bus_log_parse_error(r); } - (void) pager_open(arg_pager_flags); - - name_width = STRLEN("NAME"); - type_width = STRLEN("TYPE"); - signature_width = STRLEN("SIGNATURE"); - result_width = STRLEN("RESULT/VALUE"); + name_width = strlen("NAME"); + type_width = strlen("TYPE"); + signature_width = strlen("SIGNATURE"); + result_width = strlen("RESULT/VALUE"); sorted = newa(Member*, set_size(members)); SET_FOREACH(m, members, i) { - if (argv[3] && !streq(argv[3], m->interface)) continue; @@ -1123,6 +1120,8 @@ static int introspect(int argc, char **argv, void *userdata) { typesafe_qsort(sorted, k, member_compare_funcp); + (void) pager_open(arg_pager_flags); + if (arg_legend) { printf("%-*s %-*s %-*s %-*s %s\n", (int) name_width, "NAME", @@ -1375,6 +1374,8 @@ static int status(int argc, char **argv, void *userdata) { if (r < 0) return r; + (void) pager_open(arg_pager_flags); + if (!isempty(argv[1])) { r = parse_pid(argv[1], &pid); if (r < 0) From 16c347b3b6447c7d476bf71ad145423503ae5c82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 7 Apr 2020 11:17:34 +0200 Subject: [PATCH 2/4] busctl: wrap long lines --- src/busctl/busctl.c | 105 +++++++++++++++++++++++++++++--------------- 1 file changed, 69 insertions(+), 36 deletions(-) diff --git a/src/busctl/busctl.c b/src/busctl/busctl.c index 043aa5717f0..4fb5a8cedcd 100644 --- a/src/busctl/busctl.c +++ b/src/busctl/busctl.c @@ -101,7 +101,8 @@ static int acquire_bus(bool set_monitor, sd_bus **ret) { r = sd_bus_set_watch_bind(bus, arg_watch_bind); if (r < 0) - return log_error_errno(r, "Failed to set watch-bind setting to '%s': %m", yes_no(arg_watch_bind)); + return log_error_errno(r, "Failed to set watch-bind setting to '%s': %m", + yes_no(arg_watch_bind)); if (arg_address) r = sd_bus_set_address(bus, arg_address); @@ -172,7 +173,9 @@ static int list_bus_names(int argc, char **argv, void *userdata) { if (r < 0) return r; - r = sd_bus_list_names(bus, (arg_acquired || arg_unique) ? &acquired : NULL, arg_activatable ? &activatable : NULL); + r = sd_bus_list_names(bus, + (arg_acquired || arg_unique) ? &acquired : NULL, + arg_activatable ? &activatable : NULL); if (r < 0) return log_error_errno(r, "Failed to list names: %m"); @@ -192,7 +195,16 @@ static int list_bus_names(int argc, char **argv, void *userdata) { return log_error_errno(r, "Failed to add to hashmap: %m"); } - table = table_new("activatable", "name", "pid", "process", "user", "connection", "unit", "session", "description", "machine"); + table = table_new("activatable", + "name", + "pid", + "process", + "user", + "connection", + "unit", + "session", + "description", + "machine"); if (!table) return log_oom(); @@ -357,7 +369,8 @@ static int list_bus_names(int argc, char **argv, void *userdata) { (void) pager_open(arg_pager_flags); if (arg_json) - r = table_print_json(table, stdout, (arg_json == JSON_PRETTY ? JSON_FORMAT_PRETTY : JSON_FORMAT_NEWLINE) | JSON_FORMAT_COLOR_AUTO); + r = table_print_json(table, stdout, + (arg_json == JSON_PRETTY ? JSON_FORMAT_PRETTY : JSON_FORMAT_NEWLINE) | JSON_FORMAT_COLOR_AUTO); else r = table_print(table, stdout); if (r < 0) @@ -404,7 +417,10 @@ static void print_subtree(const char *prefix, const char *path, char **l) { n++; } - printf("%s%s%s\n", prefix, special_glyph(has_more ? SPECIAL_GLYPH_TREE_BRANCH : SPECIAL_GLYPH_TREE_RIGHT), *l); + printf("%s%s%s\n", + prefix, + special_glyph(has_more ? SPECIAL_GLYPH_TREE_BRANCH : SPECIAL_GLYPH_TREE_RIGHT), + *l); print_subtree(has_more ? vertical : space, *l, l); l = n; @@ -459,12 +475,16 @@ static int find_nodes(sd_bus *bus, const char *service, const char *path, Set *p const char *xml; int r; - r = sd_bus_call_method(bus, service, path, "org.freedesktop.DBus.Introspectable", "Introspect", &error, &reply, ""); + r = sd_bus_call_method(bus, service, path, + "org.freedesktop.DBus.Introspectable", "Introspect", + &error, &reply, ""); if (r < 0) { if (many) - printf("Failed to introspect object %s of service %s: %s\n", path, service, bus_error_message(&error, r)); + printf("Failed to introspect object %s of service %s: %s\n", + path, service, bus_error_message(&error, r)); else - log_error_errno(r, "Failed to introspect object %s of service %s: %s", path, service, bus_error_message(&error, r)); + log_error_errno(r, "Failed to introspect object %s of service %s: %s", + path, service, bus_error_message(&error, r)); return r; } @@ -993,9 +1013,12 @@ static int introspect(int argc, char **argv, void *userdata) { if (!members) return log_oom(); - r = sd_bus_call_method(bus, argv[1], argv[2], "org.freedesktop.DBus.Introspectable", "Introspect", &error, &reply_xml, ""); + r = sd_bus_call_method(bus, argv[1], argv[2], + "org.freedesktop.DBus.Introspectable", "Introspect", + &error, &reply_xml, ""); if (r < 0) - return log_error_errno(r, "Failed to introspect object %s of service %s: %s", argv[2], argv[1], bus_error_message(&error, r)); + return log_error_errno(r, "Failed to introspect object %s of service %s: %s", + argv[2], argv[1], bus_error_message(&error, r)); r = sd_bus_message_read(reply_xml, "s", &xml); if (r < 0) @@ -1026,7 +1049,9 @@ static int introspect(int argc, char **argv, void *userdata) { if (argv[3] && !streq(argv[3], m->interface)) continue; - r = sd_bus_call_method(bus, argv[1], argv[2], "org.freedesktop.DBus.Properties", "GetAll", &error, &reply, "s", m->interface); + r = sd_bus_call_method(bus, argv[1], argv[2], + "org.freedesktop.DBus.Properties", "GetAll", + &error, &reply, "s", m->interface); if (r < 0) return log_error_errno(r, "Failed to get all properties on interface %s: %s", m->interface, bus_error_message(&error, r)); @@ -1158,7 +1183,8 @@ static int introspect(int argc, char **argv, void *userdata) { printf("%s%s%-*s%s %-*s %-*s %-*s%s%s%s%s%s%s\n", is_interface ? ansi_highlight() : "", is_interface ? "" : ".", - - !is_interface + (int) name_width, empty_to_dash(streq_ptr(m->type, "interface") ? m->interface : m->name), + - !is_interface + (int) name_width, + empty_to_dash(streq_ptr(m->type, "interface") ? m->interface : m->name), is_interface ? ansi_normal() : "", (int) type_width, empty_to_dash(m->type), (int) signature_width, empty_to_dash(m->signature), @@ -1195,22 +1221,22 @@ static int message_json(sd_bus_message *m, FILE *f) { e[1] = 0; r = json_build(&w, JSON_BUILD_OBJECT( - JSON_BUILD_PAIR("type", JSON_BUILD_STRING(bus_message_type_to_string(m->header->type))), - JSON_BUILD_PAIR("endian", JSON_BUILD_STRING(e)), - JSON_BUILD_PAIR("flags", JSON_BUILD_INTEGER(m->header->flags)), - JSON_BUILD_PAIR("version", JSON_BUILD_INTEGER(m->header->version)), - JSON_BUILD_PAIR("cookie", JSON_BUILD_INTEGER(BUS_MESSAGE_COOKIE(m))), - JSON_BUILD_PAIR_CONDITION(m->reply_cookie != 0, "reply_cookie", JSON_BUILD_INTEGER(m->reply_cookie)), - JSON_BUILD_PAIR_CONDITION(m->sender, "sender", JSON_BUILD_STRING(m->sender)), - JSON_BUILD_PAIR_CONDITION(m->destination, "destination", JSON_BUILD_STRING(m->destination)), - JSON_BUILD_PAIR_CONDITION(m->path, "path", JSON_BUILD_STRING(m->path)), - JSON_BUILD_PAIR_CONDITION(m->interface, "interface", JSON_BUILD_STRING(m->interface)), - JSON_BUILD_PAIR_CONDITION(m->member, "member", JSON_BUILD_STRING(m->member)), - JSON_BUILD_PAIR_CONDITION(m->monotonic != 0, "monotonic", JSON_BUILD_INTEGER(m->monotonic)), - JSON_BUILD_PAIR_CONDITION(m->realtime != 0, "realtime", JSON_BUILD_INTEGER(m->realtime)), - JSON_BUILD_PAIR_CONDITION(m->seqnum != 0, "seqnum", JSON_BUILD_INTEGER(m->seqnum)), - JSON_BUILD_PAIR_CONDITION(m->error.name, "error_name", JSON_BUILD_STRING(m->error.name)), - JSON_BUILD_PAIR("payload", JSON_BUILD_VARIANT(v)))); + JSON_BUILD_PAIR("type", JSON_BUILD_STRING(bus_message_type_to_string(m->header->type))), + JSON_BUILD_PAIR("endian", JSON_BUILD_STRING(e)), + JSON_BUILD_PAIR("flags", JSON_BUILD_INTEGER(m->header->flags)), + JSON_BUILD_PAIR("version", JSON_BUILD_INTEGER(m->header->version)), + JSON_BUILD_PAIR("cookie", JSON_BUILD_INTEGER(BUS_MESSAGE_COOKIE(m))), + JSON_BUILD_PAIR_CONDITION(m->reply_cookie != 0, "reply_cookie", JSON_BUILD_INTEGER(m->reply_cookie)), + JSON_BUILD_PAIR_CONDITION(m->sender, "sender", JSON_BUILD_STRING(m->sender)), + JSON_BUILD_PAIR_CONDITION(m->destination, "destination", JSON_BUILD_STRING(m->destination)), + JSON_BUILD_PAIR_CONDITION(m->path, "path", JSON_BUILD_STRING(m->path)), + JSON_BUILD_PAIR_CONDITION(m->interface, "interface", JSON_BUILD_STRING(m->interface)), + JSON_BUILD_PAIR_CONDITION(m->member, "member", JSON_BUILD_STRING(m->member)), + JSON_BUILD_PAIR_CONDITION(m->monotonic != 0, "monotonic", JSON_BUILD_INTEGER(m->monotonic)), + JSON_BUILD_PAIR_CONDITION(m->realtime != 0, "realtime", JSON_BUILD_INTEGER(m->realtime)), + JSON_BUILD_PAIR_CONDITION(m->seqnum != 0, "seqnum", JSON_BUILD_INTEGER(m->seqnum)), + JSON_BUILD_PAIR_CONDITION(m->error.name, "error_name", JSON_BUILD_STRING(m->error.name)), + JSON_BUILD_PAIR("payload", JSON_BUILD_VARIANT(v)))); if (r < 0) return log_error_errno(r, "Failed to build JSON object: %m"); @@ -1403,7 +1429,8 @@ static int status(int argc, char **argv, void *userdata) { r = sd_bus_get_bus_id(bus, &bus_id); if (r >= 0) - printf("BusID=%s" SD_ID128_FORMAT_STR "%s\n", ansi_highlight(), SD_ID128_FORMAT_VAL(bus_id), ansi_normal()); + printf("BusID=%s" SD_ID128_FORMAT_STR "%s\n", + ansi_highlight(), SD_ID128_FORMAT_VAL(bus_id), ansi_normal()); r = sd_bus_get_owner_creds( bus, @@ -1563,7 +1590,6 @@ static int message_append_cmdline(sd_bus_message *m, const char *signature, char return log_error_errno(r, "Invalid array signature: %m"); { - unsigned i; char s[k + 1]; memcpy(s, signature, k); s[k] = 0; @@ -1572,7 +1598,7 @@ static int message_append_cmdline(sd_bus_message *m, const char *signature, char if (r < 0) return bus_log_create_error(r); - for (i = 0; i < n; i++) { + for (unsigned i = 0; i < n; i++) { r = message_append_cmdline(m, s, &p); if (r < 0) return r; @@ -1613,7 +1639,9 @@ static int message_append_cmdline(sd_bus_message *m, const char *signature, char memcpy(s, signature + 1, k - 2); s[k - 2] = 0; - r = sd_bus_message_open_container(m, t == SD_BUS_TYPE_STRUCT_BEGIN ? SD_BUS_TYPE_STRUCT : SD_BUS_TYPE_DICT_ENTRY, s); + const char ctype = t == SD_BUS_TYPE_STRUCT_BEGIN ? + SD_BUS_TYPE_STRUCT : SD_BUS_TYPE_DICT_ENTRY; + r = sd_bus_message_open_container(m, ctype, s); if (r < 0) return bus_log_create_error(r); @@ -2034,7 +2062,8 @@ static int call(int argc, char **argv, void *userdata) { return r; if (*p) - return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Too many parameters for signature."); + return log_error_errno(SYNTHETIC_ERRNO(EINVAL), + "Too many parameters for signature."); } if (!arg_expect_reply) { @@ -2122,7 +2151,8 @@ static int emit_signal(int argc, char **argv, void *userdata) { return r; if (*p) - return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Too many parameters for signature."); + return log_error_errno(SYNTHETIC_ERRNO(EINVAL), + "Too many parameters for signature."); } r = sd_bus_send(bus, m, NULL); @@ -2147,7 +2177,9 @@ static int get_property(int argc, char **argv, void *userdata) { const char *contents = NULL; char type; - r = sd_bus_call_method(bus, argv[1], argv[2], "org.freedesktop.DBus.Properties", "Get", &error, &reply, "ss", argv[3], *i); + r = sd_bus_call_method(bus, argv[1], argv[2], + "org.freedesktop.DBus.Properties", "Get", + &error, &reply, "ss", argv[3], *i); if (r < 0) return log_error_errno(r, "Failed to get property %s on interface %s: %s", *i, argv[3], @@ -2209,7 +2241,8 @@ static int set_property(int argc, char **argv, void *userdata) { if (r < 0) return r; - r = sd_bus_message_new_method_call(bus, &m, argv[1], argv[2], "org.freedesktop.DBus.Properties", "Set"); + r = sd_bus_message_new_method_call(bus, &m, argv[1], argv[2], + "org.freedesktop.DBus.Properties", "Set"); if (r < 0) return bus_log_create_error(r); From 7d6342e4012339bebecf5ed9bed774659a6f74d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Wed, 8 Apr 2020 23:46:49 +0200 Subject: [PATCH 3/4] man: fix garbled paragraph in systemd.network(3) The following message was emitted: "Element term in namespace encountered in para, but no template matches." --- man/systemd.network.xml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/man/systemd.network.xml b/man/systemd.network.xml index d2cdb59f461..70f4304e0ce 100644 --- a/man/systemd.network.xml +++ b/man/systemd.network.xml @@ -1929,10 +1929,9 @@ POP3Servers= - Similar to the DNS= settings described above, these - settings configure whether and what POP3 server information shall be emitted as part of - the DHCP lease. The same syntax, propagation semantics and defaults apply as for - SMTPServers= + Similar to the DNS= setting described above, this setting + configures whether and what POP3 server information shall be emitted as part of the DHCP lease. The + same syntax, propagation semantics and defaults apply as for DNS=. From 0da965037e2ce817031bb98f3ee6c0f5fcc145f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Thu, 9 Apr 2020 14:24:11 +0200 Subject: [PATCH 4/4] Add yet another tiny helper to manipulate flags --- src/basic/btrfs-util.c | 6 +----- src/basic/fd-util.c | 12 ++---------- src/basic/macro.h | 4 +++- src/shared/efi-loader.c | 5 +---- 4 files changed, 7 insertions(+), 20 deletions(-) diff --git a/src/basic/btrfs-util.c b/src/basic/btrfs-util.c index 18a72177579..b48e7371f6c 100644 --- a/src/basic/btrfs-util.c +++ b/src/basic/btrfs-util.c @@ -175,11 +175,7 @@ int btrfs_subvol_set_read_only_fd(int fd, bool b) { if (ioctl(fd, BTRFS_IOC_SUBVOL_GETFLAGS, &flags) < 0) return -errno; - if (b) - nflags = flags | BTRFS_SUBVOL_RDONLY; - else - nflags = flags & ~BTRFS_SUBVOL_RDONLY; - + nflags = UPDATE_FLAG(flags, BTRFS_SUBVOL_RDONLY, b); if (flags == nflags) return 0; diff --git a/src/basic/fd-util.c b/src/basic/fd-util.c index 4be876e24c8..a3dced441a0 100644 --- a/src/basic/fd-util.c +++ b/src/basic/fd-util.c @@ -144,11 +144,7 @@ int fd_nonblock(int fd, bool nonblock) { if (flags < 0) return -errno; - if (nonblock) - nflags = flags | O_NONBLOCK; - else - nflags = flags & ~O_NONBLOCK; - + nflags = UPDATE_FLAG(flags, O_NONBLOCK, nonblock); if (nflags == flags) return 0; @@ -167,11 +163,7 @@ int fd_cloexec(int fd, bool cloexec) { if (flags < 0) return -errno; - if (cloexec) - nflags = flags | FD_CLOEXEC; - else - nflags = flags & ~FD_CLOEXEC; - + nflags = UPDATE_FLAG(flags, FD_CLOEXEC, cloexec); if (nflags == flags) return 0; diff --git a/src/basic/macro.h b/src/basic/macro.h index 5aa7f59c0ba..79530132e30 100644 --- a/src/basic/macro.h +++ b/src/basic/macro.h @@ -451,8 +451,10 @@ static inline int __coverity_check_and_return__(int condition) { ans; \ }) +#define UPDATE_FLAG(orig, flag, b) \ + ((b) ? ((orig) | (flag)) : ((orig) & ~(flag))) #define SET_FLAG(v, flag, b) \ - (v) = (b) ? ((v) | (flag)) : ((v) & ~(flag)) + (v) = UPDATE_FLAG(v, flag, b) #define FLAGS_SET(v, flags) \ ((~(v) & (flags)) == 0) diff --git a/src/shared/efi-loader.c b/src/shared/efi-loader.c index b05dc91ecf7..34196537b78 100644 --- a/src/shared/efi-loader.c +++ b/src/shared/efi-loader.c @@ -135,10 +135,7 @@ int efi_set_reboot_to_firmware(bool value) { if (r < 0) return r; - if (value) - b_new = b | EFI_OS_INDICATIONS_BOOT_TO_FW_UI; - else - b_new = b & ~EFI_OS_INDICATIONS_BOOT_TO_FW_UI; + b_new = UPDATE_FLAG(b, EFI_OS_INDICATIONS_BOOT_TO_FW_UI, value); /* Avoid writing to efi vars store if we can due to firmware bugs. */ if (b != b_new)