shared/verbs: turn verb argument specification into nulstr
Like the command-level CommandDescription.argspec, a verb's argspec is now a nulstr, so that a verb may declare multiple alternative usage lines. The verbs help table renders one synopsis line per nulstr entry in the synopsis cell. All verb argument specifications must gain an explicit NUL suffix. This is a lot of churn, but I think this needs to be done. For now, there'll be only one user of the new functionality (i.e. a verb with more than one argspec), but I think we'll eventually want to use this in other places too.
This commit is contained in:
+15
-15
@@ -881,7 +881,7 @@ invalid:
|
||||
"Invalid DNS URI: %s", name);
|
||||
}
|
||||
|
||||
VERB(verb_query, "query", "HOSTNAME|ADDRESS…", 2, VERB_ANY, 0,
|
||||
VERB(verb_query, "query", "HOSTNAME|ADDRESS…\0", 2, VERB_ANY, 0,
|
||||
"Resolve domain names, IPv4 and IPv6 addresses");
|
||||
static int verb_query(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
int ret = 0, r;
|
||||
@@ -1025,7 +1025,7 @@ static int resolve_service(const char *name, const char *type, const char *domai
|
||||
return 0;
|
||||
}
|
||||
|
||||
VERB(verb_service, "service", "[[NAME] TYPE] DOMAIN", 2, 4, 0,
|
||||
VERB(verb_service, "service", "[[NAME] TYPE] DOMAIN\0", 2, 4, 0,
|
||||
"Resolve service (SRV)");
|
||||
static int verb_service(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
uint64_t flags = arg_flags;
|
||||
@@ -1104,7 +1104,7 @@ static int resolve_openpgp(const char *address) {
|
||||
}
|
||||
#endif
|
||||
|
||||
VERB(verb_openpgp, "openpgp", "EMAIL@DOMAIN…", 2, VERB_ANY, 0,
|
||||
VERB(verb_openpgp, "openpgp", "EMAIL@DOMAIN…\0", 2, VERB_ANY, 0,
|
||||
"Query OpenPGP public key");
|
||||
static int verb_openpgp(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
#if HAVE_OPENSSL
|
||||
@@ -1157,7 +1157,7 @@ static bool service_family_is_valid(const char *s) {
|
||||
return STR_IN_SET(s, "tcp", "udp", "sctp");
|
||||
}
|
||||
|
||||
VERB(verb_tlsa, "tlsa", "DOMAIN[:PORT]…", 2, VERB_ANY, 0,
|
||||
VERB(verb_tlsa, "tlsa", "DOMAIN[:PORT]…\0", 2, VERB_ANY, 0,
|
||||
"Query TLS public key");
|
||||
static int verb_tlsa(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
const char *family = "tcp";
|
||||
@@ -1770,7 +1770,7 @@ static int status_ifindex(int ifindex, StatusMode mode) {
|
||||
return status_full(mode, STRV_MAKE(ifname));
|
||||
}
|
||||
|
||||
VERB(verb_status, "status", "[LINK…]", VERB_ANY, VERB_ANY, VERB_DEFAULT,
|
||||
VERB(verb_status, "status", "[LINK…]\0", VERB_ANY, VERB_ANY, VERB_DEFAULT,
|
||||
"Show link and server status");
|
||||
static int verb_status(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
return status_full(STATUS_ALL, strv_skip(argv, 1));
|
||||
@@ -2658,7 +2658,7 @@ static int verb_show_server_state(int argc, char *argv[], uintptr_t _data, void
|
||||
return sd_json_variant_dump(d, arg_json_format_flags, NULL, NULL);
|
||||
}
|
||||
|
||||
VERB(verb_dns, "dns", "[LINK [SERVER…]]", VERB_ANY, VERB_ANY, 0,
|
||||
VERB(verb_dns, "dns", "[LINK [SERVER…]]\0", VERB_ANY, VERB_ANY, 0,
|
||||
"Get/set per-interface DNS server address");
|
||||
static int verb_dns(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
|
||||
@@ -2745,7 +2745,7 @@ static int call_domain(sd_bus *bus, char **domain, const BusLocator *locator, sd
|
||||
return sd_bus_call(bus, req, 0, error, NULL);
|
||||
}
|
||||
|
||||
VERB(verb_domain, "domain", "[LINK [DOMAIN…]]", VERB_ANY, VERB_ANY, 0,
|
||||
VERB(verb_domain, "domain", "[LINK [DOMAIN…]]\0", VERB_ANY, VERB_ANY, 0,
|
||||
"Get/set per-interface search domain");
|
||||
static int verb_domain(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
|
||||
@@ -2786,7 +2786,7 @@ static int verb_domain(int argc, char *argv[], uintptr_t _data, void *userdata)
|
||||
return 0;
|
||||
}
|
||||
|
||||
VERB(verb_default_route, "default-route", "[LINK [BOOL]]", VERB_ANY, 3, 0,
|
||||
VERB(verb_default_route, "default-route", "[LINK [BOOL]]\0", VERB_ANY, 3, 0,
|
||||
"Get/set per-interface default route flag");
|
||||
static int verb_default_route(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
|
||||
@@ -2832,7 +2832,7 @@ static int verb_default_route(int argc, char *argv[], uintptr_t _data, void *use
|
||||
return 0;
|
||||
}
|
||||
|
||||
VERB(verb_llmnr, "llmnr", "[LINK [MODE]]", VERB_ANY, 3, 0,
|
||||
VERB(verb_llmnr, "llmnr", "[LINK [MODE]]\0", VERB_ANY, 3, 0,
|
||||
"Get/set per-interface LLMNR mode");
|
||||
static int verb_llmnr(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
|
||||
@@ -2892,7 +2892,7 @@ static int verb_llmnr(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
VERB(verb_mdns, "mdns", "[LINK [MODE]]", VERB_ANY, 3, 0,
|
||||
VERB(verb_mdns, "mdns", "[LINK [MODE]]\0", VERB_ANY, 3, 0,
|
||||
"Get/set per-interface MulticastDNS mode");
|
||||
static int verb_mdns(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
|
||||
@@ -2958,7 +2958,7 @@ static int verb_mdns(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
VERB(verb_dns_over_tls, "dnsovertls", "[LINK [MODE]]", VERB_ANY, 3, 0,
|
||||
VERB(verb_dns_over_tls, "dnsovertls", "[LINK [MODE]]\0", VERB_ANY, 3, 0,
|
||||
"Get/set per-interface DNS-over-TLS mode");
|
||||
static int verb_dns_over_tls(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
|
||||
@@ -3006,7 +3006,7 @@ static int verb_dns_over_tls(int argc, char *argv[], uintptr_t _data, void *user
|
||||
return 0;
|
||||
}
|
||||
|
||||
VERB(verb_dnssec, "dnssec", "[LINK [MODE]]", VERB_ANY, 3, 0,
|
||||
VERB(verb_dnssec, "dnssec", "[LINK [MODE]]\0", VERB_ANY, 3, 0,
|
||||
"Get/set per-interface DNSSEC mode");
|
||||
static int verb_dnssec(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
|
||||
@@ -3069,7 +3069,7 @@ static int call_nta(sd_bus *bus, char **nta, const BusLocator *locator, sd_bus_
|
||||
return sd_bus_call(bus, req, 0, error, NULL);
|
||||
}
|
||||
|
||||
VERB(verb_nta, "nta", "[LINK [DOMAIN…]]", VERB_ANY, VERB_ANY, 0,
|
||||
VERB(verb_nta, "nta", "[LINK [DOMAIN…]]\0", VERB_ANY, VERB_ANY, 0,
|
||||
"Get/set per-interface DNSSEC NTA");
|
||||
static int verb_nta(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
|
||||
@@ -3129,7 +3129,7 @@ static int verb_nta(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
VERB(verb_revert_link, "revert", "LINK", VERB_ANY, 2, 0,
|
||||
VERB(verb_revert_link, "revert", "LINK\0", VERB_ANY, 2, 0,
|
||||
"Revert per-interface configuration");
|
||||
static int verb_revert_link(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
_cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
|
||||
@@ -3168,7 +3168,7 @@ static int verb_revert_link(int argc, char *argv[], uintptr_t _data, void *userd
|
||||
return 0;
|
||||
}
|
||||
|
||||
VERB(verb_log_level, "log-level", "[LEVEL]", VERB_ANY, 2, 0,
|
||||
VERB(verb_log_level, "log-level", "[LEVEL]\0", VERB_ANY, 2, 0,
|
||||
"Get/set logging threshold for systemd-resolved");
|
||||
static int verb_log_level(int argc, char *argv[], uintptr_t _data, void *userdata) {
|
||||
int r;
|
||||
|
||||
Reference in New Issue
Block a user