diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2021-02-13 15:55:10 +0100 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2021-02-14 15:59:09 +0100 |
commit | 86beb21302082e9df0aa8576b89fd29c9e1a43be (patch) | |
tree | 3b2a7fce94d144978236b919fe12f311c383872b | |
parent | 76e5e267fcf4d5c8d1470769b97ad75a7c67394b (diff) | |
download | systemd-86beb21302082e9df0aa8576b89fd29c9e1a43be.tar.gz |
systemctl,loginctl,machinectl: use a shared helper for arg_signal
I seems frivolous to yet another two -util.[ch] files, but the helper
should be in shared/ and it doesn't seem to fit anywhere else.
-rw-r--r-- | man/machinectl.xml | 12 | ||||
-rw-r--r-- | man/standard-options.xml | 15 | ||||
-rw-r--r-- | man/systemctl.xml | 14 | ||||
-rw-r--r-- | src/login/loginctl.c | 12 | ||||
-rw-r--r-- | src/machine/machinectl.c | 13 | ||||
-rw-r--r-- | src/shared/meson.build | 2 | ||||
-rw-r--r-- | src/shared/parse-argument.c | 25 | ||||
-rw-r--r-- | src/shared/parse-argument.h | 4 | ||||
-rw-r--r-- | src/systemctl/systemctl.c | 14 |
9 files changed, 60 insertions, 51 deletions
diff --git a/man/machinectl.xml b/man/machinectl.xml index 9026849559..556fe309dc 100644 --- a/man/machinectl.xml +++ b/man/machinectl.xml @@ -699,17 +699,7 @@ <option>all</option>.</para></listitem> </varlistentry> - <varlistentry> - <term><option>-s</option></term> - <term><option>--signal=</option></term> - - <listitem><para>When used with <command>kill</command>, choose - which signal to send to selected processes. Must be one of the - well-known signal specifiers, such as - <constant>SIGTERM</constant>, <constant>SIGINT</constant> or - <constant>SIGSTOP</constant>. If omitted, defaults to - <constant>SIGTERM</constant>.</para></listitem> - </varlistentry> + <xi:include href="standard-options.xml" xpointer="signal" /> <varlistentry> <term><option>--uid=</option></term> diff --git a/man/standard-options.xml b/man/standard-options.xml index 8ba5b09df8..848439119e 100644 --- a/man/standard-options.xml +++ b/man/standard-options.xml @@ -61,4 +61,19 @@ (for a pretty version of the same, with indentation and line breaks) or <literal>off</literal> (to turn off JSON output, the default).</para></listitem> </varlistentry> + + <varlistentry id='signal'> + <term><option>-s</option></term> + <term><option>--signal=</option></term> + + <listitem> + <para>When used with <command>kill</command>, choose which signal to send to selected processes. Must + be one of the well-known signal specifiers such as <constant>SIGTERM</constant>, + <constant>SIGINT</constant> or <constant>SIGSTOP</constant>. If omitted, defaults to + <option>SIGTERM</option>.</para> + + <para>The special value <literal>help</literal> will list the known values and the program will exit + immediately.</para> + </listitem> + </varlistentry> </variablelist> diff --git a/man/systemctl.xml b/man/systemctl.xml index db4e2b2c65..2ed58eb33b 100644 --- a/man/systemctl.xml +++ b/man/systemctl.xml @@ -2067,21 +2067,9 @@ Jan 12 10:46:45 example.com bluetoothd[8900]: gatt-time-server: Input/output err is defined. If omitted, defaults to <option>all</option>.</para> </listitem> - </varlistentry> - <varlistentry> - <term><option>-s</option></term> - <term><option>--signal=</option></term> - - <listitem> - <para>When used with <command>kill</command>, choose which - signal to send to selected processes. Must be one of the - well-known signal specifiers such as <constant>SIGTERM</constant>, <constant>SIGINT</constant> or - <constant>SIGSTOP</constant>. If omitted, defaults to - <option>SIGTERM</option>.</para> - </listitem> - </varlistentry> + <xi:include href="standard-options.xml" xpointer="signal" /> <varlistentry> <term><option>--what=</option></term> diff --git a/src/login/loginctl.c b/src/login/loginctl.c index 918e05e1cd..3e135858a8 100644 --- a/src/login/loginctl.c +++ b/src/login/loginctl.c @@ -22,6 +22,7 @@ #include "main-func.h" #include "memory-util.h" #include "pager.h" +#include "parse-argument.h" #include "parse-util.h" #include "pretty-print.h" #include "process-util.h" @@ -1395,14 +1396,9 @@ static int parse_argv(int argc, char *argv[]) { break; case 's': - if (streq(optarg, "help")) { - DUMP_STRING_TABLE(signal, int, _NSIG); - return 0; - } - - arg_signal = signal_from_string(optarg); - if (arg_signal < 0) - return log_error_errno(arg_signal, "Failed to parse signal string %s.", optarg); + r = parse_signal_argument(optarg, &arg_signal); + if (r <= 0) + return r; break; case 'H': diff --git a/src/machine/machinectl.c b/src/machine/machinectl.c index 3d6048eaff..1ae10e5880 100644 --- a/src/machine/machinectl.c +++ b/src/machine/machinectl.c @@ -39,6 +39,7 @@ #include "mkdir.h" #include "nulstr-util.h" #include "pager.h" +#include "parse-argument.h" #include "parse-util.h" #include "path-util.h" #include "pretty-print.h" @@ -2715,15 +2716,9 @@ static int parse_argv(int argc, char *argv[]) { break; case 's': - if (streq(optarg, "help")) { - DUMP_STRING_TABLE(signal, int, _NSIG); - return 0; - } - - r = signal_from_string(optarg); - if (r < 0) - return log_error_errno(r, "Failed to parse signal string %s.", optarg); - arg_signal = r; + r = parse_signal_argument(optarg, &arg_signal); + if (r <= 0) + return r; break; case ARG_NO_ASK_PASSWORD: diff --git a/src/shared/meson.build b/src/shared/meson.build index 4e47e15c09..6d9a5c5b65 100644 --- a/src/shared/meson.build +++ b/src/shared/meson.build @@ -202,6 +202,8 @@ shared_sources = files(''' output-mode.h pager.c pager.h + parse-argument.c + parse-argument.h pe-header.h pkcs11-util.c pkcs11-util.h diff --git a/src/shared/parse-argument.c b/src/shared/parse-argument.c new file mode 100644 index 0000000000..a30d3adc13 --- /dev/null +++ b/src/shared/parse-argument.c @@ -0,0 +1,25 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ + +#include "parse-argument.h" +#include "signal-util.h" +#include "string-table.h" +#include "string-util.h" + +int parse_signal_argument(const char *s, int *ret) { + int r; + + assert(s); + assert(ret); + + if (streq(s, "help")) { + DUMP_STRING_TABLE(signal, int, _NSIG); + return 0; + } + + r = signal_from_string(s); + if (r < 0) + return log_error_errno(r, "Failed to parse signal string \"%s\".", s); + + *ret = r; + return 1; /* work to do */ +} diff --git a/src/shared/parse-argument.h b/src/shared/parse-argument.h new file mode 100644 index 0000000000..7a5419174d --- /dev/null +++ b/src/shared/parse-argument.h @@ -0,0 +1,4 @@ +/* SPDX-License-Identifier: LGPL-2.1-or-later */ +#pragma once + +int parse_signal_argument(const char *s, int *ret); diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c index 97a02ff035..0371ff355e 100644 --- a/src/systemctl/systemctl.c +++ b/src/systemctl/systemctl.c @@ -11,6 +11,7 @@ #include "main-func.h" #include "output-mode.h" #include "pager.h" +#include "parse-argument.h" #include "path-util.h" #include "pretty-print.h" #include "rlimit-util.h" @@ -673,16 +674,9 @@ static int systemctl_parse_argv(int argc, char *argv[]) { break; case 's': - if (streq(optarg, "help")) { - DUMP_STRING_TABLE(signal, int, _NSIG); - return 0; - } - - arg_signal = signal_from_string(optarg); - if (arg_signal < 0) - return log_error_errno(SYNTHETIC_ERRNO(EINVAL), - "Failed to parse signal string %s.", - optarg); + r = parse_signal_argument(optarg, &arg_signal); + if (r <= 0) + return r; break; case ARG_NO_ASK_PASSWORD: |