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.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2021-02-13 15:55:10 +01:00
parent 76e5e267fc
commit 86beb21302
9 changed files with 60 additions and 51 deletions

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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':

View file

@ -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:

View file

@ -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

View file

@ -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 */
}

View file

@ -0,0 +1,4 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#pragma once
int parse_signal_argument(const char *s, int *ret);

View file

@ -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: