1
0
mirror of https://github.com/systemd/systemd synced 2025-09-30 09:14:46 +02:00

Compare commits

..

No commits in common. "01131684ac66e82faae18e40e110089003d7c536" and "8dfc2beb571f0e0ad780d628c743eac68faf5186" have entirely different histories.

214 changed files with 720 additions and 1681 deletions

View File

@ -43,5 +43,3 @@ jobs:
- fedora-rawhide-aarch64 - fedora-rawhide-aarch64
- fedora-rawhide-i386 - fedora-rawhide-i386
- fedora-rawhide-x86_64 - fedora-rawhide-x86_64
- fedora-eln-aarch64
- fedora-eln-x86_64

View File

@ -279,9 +279,3 @@ systemd-sysext:
specify API file systems such as `/proc/` or `/sys/` here, or hierarchies specify API file systems such as `/proc/` or `/sys/` here, or hierarchies
that have them as submounts. In particular, do not specify the root directory that have them as submounts. In particular, do not specify the root directory
`/` here. `/` here.
systemd-tmpfiles:
* `SYSTEMD_TMPFILES_FORCE_SUBVOL` - if unset, v/q/Q lines will create subvolumes only if the
OS itself is installed into a subvolume. If set to 1 (or another true value), these lines will always create
subvolumes (if the backing filesystem supports them). If set to 0, these lines will always create directories.

View File

@ -154,22 +154,20 @@
<xi:include href="standard-options.xml" xpointer="help" /> <xi:include href="standard-options.xml" xpointer="help" />
<xi:include href="standard-options.xml" xpointer="version" /> <xi:include href="standard-options.xml" xpointer="version" />
<varlistentry>
<term><option>--no-legend</option></term>
<listitem><para>Do not print column headers.</para></listitem>
</varlistentry>
<xi:include href="standard-options.xml" xpointer="no-pager" /> <xi:include href="standard-options.xml" xpointer="no-pager" />
<xi:include href="standard-options.xml" xpointer="no-legend" />
<xi:include href="standard-options.xml" xpointer="json" />
<varlistentry> <varlistentry>
<term><option>-1</option></term> <term><option>-1</option></term>
<listitem><para>Show information of the most recent core dump only, instead of listing all known core <listitem><para>Show information of a single core dump only, instead of listing
dumps. (Equivalent to <option>--reverse -n 1</option></para></listitem> all known core dumps.</para></listitem>
</varlistentry>
<varlistentry>
<term><option>-n</option> <replaceable>INT</replaceable></term>
<listitem><para>Show at most the specified number of entries. The specified parameter must be an
integer greater or equal to 1.</para></listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>

View File

@ -155,20 +155,6 @@
to be used in case the unit names do not match the image name as described in the <command>attach</command>.</para> to be used in case the unit names do not match the image name as described in the <command>attach</command>.</para>
</varlistentry> </varlistentry>
<varlistentry>
<term><command>reattach</command> <replaceable>IMAGE</replaceable> [<replaceable>PREFIX…</replaceable>]</term>
<listitem><para>Detaches an existing portable service image from the host, and immediately attaches it again.
This is useful in case the image was replaced. Running units are not stopped during the process. Partial matching,
to allow for different versions in the image name, is allowed: only the part before the first <literal>_</literal>
character has to match. If the new image doesn't exist, the existing one will not be detached. The parameters
follow the same syntax as the <command>attach</command> command.</para></listitem>
<para>If <option>--now</option> and/or <option>--enable</option> are passed, the portable service(s) are
immediately stopped if removed, started and/or enabled if added, or restarted if updated. Prefixes are also
accepted, in the same way as described in the <command>attach</command> case.</para>
</varlistentry>
<varlistentry> <varlistentry>
<term><command>inspect</command> <replaceable>IMAGE</replaceable> [<replaceable>PREFIX…</replaceable>]</term> <term><command>inspect</command> <replaceable>IMAGE</replaceable> [<replaceable>PREFIX…</replaceable>]</term>
@ -342,8 +328,7 @@
<varlistentry> <varlistentry>
<term><option>--now</option></term> <term><option>--now</option></term>
<listitem><para>Immediately start/stop/restart the portable service after attaching/before <listitem><para>Immediately start/stop the portable service after attaching/before detaching.</para></listitem>
detaching/after upgrading.</para></listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>

View File

@ -11,7 +11,7 @@ msgstr ""
"Project-Id-Version: systemd master\n" "Project-Id-Version: systemd master\n"
"Report-Msgid-Bugs-To: \n" "Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-01-08 17:48+0100\n" "POT-Creation-Date: 2021-01-08 17:48+0100\n"
"PO-Revision-Date: 2021-02-10 15:40+0000\n" "PO-Revision-Date: 2021-02-05 20:40+0000\n"
"Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n" "Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n"
"Language-Team: Swedish <https://translate.fedoraproject.org/projects/systemd/" "Language-Team: Swedish <https://translate.fedoraproject.org/projects/systemd/"
"master/sv/>\n" "master/sv/>\n"
@ -532,7 +532,7 @@ msgstr "Autentisering krävs för att ställa in ”orsaken” för omstart i k
#: src/login/org.freedesktop.login1.policy:363 #: src/login/org.freedesktop.login1.policy:363
msgid "Indicate to the firmware to boot to setup interface" msgid "Indicate to the firmware to boot to setup interface"
msgstr "" msgstr ""
"Indikera till den fasta programvaran att starta upp till " "Indikera till den fasta programvaran att starta upp i "
"inställningsgränssnittet" "inställningsgränssnittet"
#: src/login/org.freedesktop.login1.policy:364 #: src/login/org.freedesktop.login1.policy:364
@ -540,12 +540,12 @@ msgid ""
"Authentication is required to indicate to the firmware to boot to setup " "Authentication is required to indicate to the firmware to boot to setup "
"interface." "interface."
msgstr "" msgstr ""
"Autentisering krävs för att indikera till den fasta programvaran att starta " "Autentisering krävs för att indikera till firmware att starta upp till "
"upp till inställningsgränssnitt." "inställningsgränssnitt."
#: src/login/org.freedesktop.login1.policy:374 #: src/login/org.freedesktop.login1.policy:374
msgid "Indicate to the boot loader to boot to the boot loader menu" msgid "Indicate to the boot loader to boot to the boot loader menu"
msgstr "Indikera till startprogrammet att starta upp i uppstartsladdmenyn" msgstr "Indikera till den startprogrammet att starta upp i uppstartsladdmenyn"
#: src/login/org.freedesktop.login1.policy:375 #: src/login/org.freedesktop.login1.policy:375
msgid "" msgid ""
@ -899,7 +899,7 @@ msgstr "Autentisering krävs för att stoppa \"$(unit)\"."
#: src/core/dbus-unit.c:361 #: src/core/dbus-unit.c:361
msgid "Authentication is required to reload '$(unit)'." msgid "Authentication is required to reload '$(unit)'."
msgstr "Autentisering krävs för att läsa om \"$(unit)\"." msgstr "Autentisering krävs för att läsa om tillståndet för \"$(unit)\"."
#: src/core/dbus-unit.c:362 src/core/dbus-unit.c:363 #: src/core/dbus-unit.c:362 src/core/dbus-unit.c:363
msgid "Authentication is required to restart '$(unit)'." msgid "Authentication is required to restart '$(unit)'."

View File

@ -40,7 +40,7 @@ _coredumpctl() {
local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]} local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
local OPTS='-h --help --version --no-pager --no-legend -o --output -F --field -1 local OPTS='-h --help --version --no-pager --no-legend -o --output -F --field -1
-r --reverse -S --since -U --until -D --directory -q --quiet --debugger -r --reverse -S --since -U --until -D --directory -q --quiet --debugger
-A --debugger-arguments --json -n' -A --debugger-arguments'
local -A VERBS=( local -A VERBS=(
[LIST]='list info' [LIST]='list info'
@ -58,8 +58,6 @@ _coredumpctl() {
compopt -o filenames compopt -o filenames
elif __contains_word "$prev" '--field -F'; then elif __contains_word "$prev" '--field -F'; then
comps=$( compgen -W '${__journal_fields[*]}' -- "$cur" ) comps=$( compgen -W '${__journal_fields[*]}' -- "$cur" )
elif __contains_word "$prev" '--json'; then
comps=$( compgen -W 'pretty short off' -- "$cur" )
elif [[ $cur = -* ]]; then elif [[ $cur = -* ]]; then
comps=${OPTS} comps=${OPTS}
elif __contains_word "$prev" ${VERBS[*]} && elif __contains_word "$prev" ${VERBS[*]} &&

View File

@ -43,7 +43,7 @@ _loginctl () {
[STANDALONE]='--all -a --help -h --no-pager --version [STANDALONE]='--all -a --help -h --no-pager --version
--no-legend --no-ask-password -l --full --value' --no-legend --no-ask-password -l --full --value'
[ARG]='--host -H --kill-who --property -p --signal -s -M --machine [ARG]='--host -H --kill-who --property -p --signal -s -M --machine
-n --lines -o --output -P' -n --lines -o --output'
) )
if __contains_word "$prev" ${OPTS[ARG]}; then if __contains_word "$prev" ${OPTS[ARG]}; then
@ -61,7 +61,7 @@ _loginctl () {
--machine|-M) --machine|-M)
comps=$( __get_machines ) comps=$( __get_machines )
;; ;;
--property|-p|-P) --property|-p)
comps='' comps=''
;; ;;
--output|-o) --output|-o)

View File

@ -40,7 +40,7 @@ _portablectl() {
local -A VERBS=( local -A VERBS=(
[STANDALONE]='list' [STANDALONE]='list'
[IMAGE]='attach detach reattach inspect is-attached set-limit' [IMAGE]='attach detach inspect is-attached set-limit'
[IMAGES]='remove' [IMAGES]='remove'
[IMAGE_WITH_BOOL]='read-only' [IMAGE_WITH_BOOL]='read-only'
) )

View File

@ -1574,7 +1574,7 @@ static int dump_exit_status(int argc, char *argv[], void *userdata) {
status = exit_status_from_string(argv[i]); status = exit_status_from_string(argv[i]);
if (status < 0) if (status < 0)
return log_error_errno(status, "Invalid exit status \"%s\".", argv[i]); return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Invalid exit status \"%s\".", argv[i]);
assert(status >= 0 && (size_t) status < ELEMENTSOF(exit_status_mappings)); assert(status >= 0 && (size_t) status < ELEMENTSOF(exit_status_mappings));
r = table_add_many(table, r = table_add_many(table,

View File

@ -45,7 +45,7 @@ enum {
ARCHITECTURE_ARC, ARCHITECTURE_ARC,
ARCHITECTURE_ARC_BE, ARCHITECTURE_ARC_BE,
_ARCHITECTURE_MAX, _ARCHITECTURE_MAX,
_ARCHITECTURE_INVALID = -EINVAL, _ARCHITECTURE_INVALID = -1
}; };
int uname_architecture(void); int uname_architecture(void);

View File

@ -32,7 +32,7 @@ typedef enum CGroupController {
CGROUP_CONTROLLER_BPF_DEVICES, CGROUP_CONTROLLER_BPF_DEVICES,
_CGROUP_CONTROLLER_MAX, _CGROUP_CONTROLLER_MAX,
_CGROUP_CONTROLLER_INVALID = -EINVAL, _CGROUP_CONTROLLER_INVALID = -1,
} CGroupController; } CGroupController;
#define CGROUP_CONTROLLER_TO_MASK(c) (1U << (c)) #define CGROUP_CONTROLLER_TO_MASK(c) (1U << (c))
@ -97,7 +97,7 @@ typedef enum CGroupIOLimitType {
CGROUP_IO_WIOPS_MAX, CGROUP_IO_WIOPS_MAX,
_CGROUP_IO_LIMIT_TYPE_MAX, _CGROUP_IO_LIMIT_TYPE_MAX,
_CGROUP_IO_LIMIT_TYPE_INVALID = -EINVAL, _CGROUP_IO_LIMIT_TYPE_INVALID = -1
} CGroupIOLimitType; } CGroupIOLimitType;
extern const uint64_t cgroup_io_limit_defaults[_CGROUP_IO_LIMIT_TYPE_MAX]; extern const uint64_t cgroup_io_limit_defaults[_CGROUP_IO_LIMIT_TYPE_MAX];
@ -283,7 +283,7 @@ typedef enum ManagedOOMMode {
MANAGED_OOM_AUTO, MANAGED_OOM_AUTO,
MANAGED_OOM_KILL, MANAGED_OOM_KILL,
_MANAGED_OOM_MODE_MAX, _MANAGED_OOM_MODE_MAX,
_MANAGED_OOM_MODE_INVALID = -EINVAL, _MANAGED_OOM_MODE_INVALID = -1,
} ManagedOOMMode; } ManagedOOMMode;
const char* managed_oom_mode_to_string(ManagedOOMMode m) _const_; const char* managed_oom_mode_to_string(ManagedOOMMode m) _const_;

View File

@ -26,7 +26,7 @@ typedef enum LocaleVariable {
VARIABLE_LC_MEASUREMENT, VARIABLE_LC_MEASUREMENT,
VARIABLE_LC_IDENTIFICATION, VARIABLE_LC_IDENTIFICATION,
_VARIABLE_LC_MAX, _VARIABLE_LC_MAX,
_VARIABLE_LC_INVALID = -EINVAL, _VARIABLE_LC_INVALID = -1
} LocaleVariable; } LocaleVariable;
int get_locales(char ***l); int get_locales(char ***l);

View File

@ -1085,7 +1085,7 @@ int log_set_target_from_string(const char *e) {
t = log_target_from_string(e); t = log_target_from_string(e);
if (t < 0) if (t < 0)
return t; return -EINVAL;
log_set_target(t); log_set_target(t);
return 0; return 0;
@ -1096,7 +1096,7 @@ int log_set_max_level_from_string(const char *e) {
t = log_level_from_string(e); t = log_level_from_string(e);
if (t < 0) if (t < 0)
return t; return -EINVAL;
log_set_max_level(t); log_set_max_level(t);
return 0; return 0;

View File

@ -23,7 +23,7 @@ typedef enum LogTarget{
LOG_TARGET_AUTO, /* console if stderr is not journal, JOURNAL_OR_KMSG otherwise */ LOG_TARGET_AUTO, /* console if stderr is not journal, JOURNAL_OR_KMSG otherwise */
LOG_TARGET_NULL, LOG_TARGET_NULL,
_LOG_TARGET_MAX, _LOG_TARGET_MAX,
_LOG_TARGET_INVALID = -EINVAL, _LOG_TARGET_INVALID = -1
} LogTarget; } LogTarget;
/* Note to readers: << and >> have lower precedence than & and | */ /* Note to readers: << and >> have lower precedence than & and | */

View File

@ -24,7 +24,7 @@ typedef enum SmackAttr {
SMACK_ATTR_IPIN, SMACK_ATTR_IPIN,
SMACK_ATTR_IPOUT, SMACK_ATTR_IPOUT,
_SMACK_ATTR_MAX, _SMACK_ATTR_MAX,
_SMACK_ATTR_INVALID = -EINVAL, _SMACK_ATTR_INVALID = -1,
} SmackAttr; } SmackAttr;
bool mac_smack_use(void); bool mac_smack_use(void);

View File

@ -63,7 +63,7 @@ typedef enum SocketAddressBindIPv6Only {
SOCKET_ADDRESS_BOTH, SOCKET_ADDRESS_BOTH,
SOCKET_ADDRESS_IPV6_ONLY, SOCKET_ADDRESS_IPV6_ONLY,
_SOCKET_ADDRESS_BIND_IPV6_ONLY_MAX, _SOCKET_ADDRESS_BIND_IPV6_ONLY_MAX,
_SOCKET_ADDRESS_BIND_IPV6_ONLY_INVALID = -EINVAL, _SOCKET_ADDRESS_BIND_IPV6_ONLY_INVALID = -1
} SocketAddressBindIPv6Only; } SocketAddressBindIPv6Only;
#define socket_address_family(a) ((a)->sockaddr.sa.sa_family) #define socket_address_family(a) ((a)->sockaddr.sa.sa_family)

View File

@ -5,11 +5,11 @@
ssize_t string_table_lookup(const char * const *table, size_t len, const char *key) { ssize_t string_table_lookup(const char * const *table, size_t len, const char *key) {
if (!key) if (!key)
return -EINVAL; return -1;
for (size_t i = 0; i < len; ++i) for (size_t i = 0; i < len; ++i)
if (streq_ptr(table[i], key)) if (streq_ptr(table[i], key))
return (ssize_t) i; return (ssize_t) i;
return -EINVAL; return -1;
} }

View File

@ -29,7 +29,7 @@ ssize_t string_table_lookup(const char * const *table, size_t len, const char *k
#define _DEFINE_STRING_TABLE_LOOKUP_FROM_STRING_WITH_BOOLEAN(name,type,yes,scope) \ #define _DEFINE_STRING_TABLE_LOOKUP_FROM_STRING_WITH_BOOLEAN(name,type,yes,scope) \
scope type name##_from_string(const char *s) { \ scope type name##_from_string(const char *s) { \
if (!s) \ if (!s) \
return -EINVAL; \ return -1; \
int b = parse_boolean(s); \ int b = parse_boolean(s); \
if (b == 0) \ if (b == 0) \
return (type) 0; \ return (type) 0; \
@ -60,16 +60,14 @@ ssize_t string_table_lookup(const char * const *table, size_t len, const char *k
unsigned u = 0; \ unsigned u = 0; \
type i; \ type i; \
if (!s) \ if (!s) \
return -EINVAL; \ return (type) -1; \
i = (type) string_table_lookup(name##_table, ELEMENTSOF(name##_table), s); \ i = (type) string_table_lookup(name##_table, ELEMENTSOF(name##_table), s); \
if (i >= 0) \ if (i >= 0) \
return i; \ return i; \
if (safe_atou(s, &u) < 0) \ if (safe_atou(s, &u) >= 0 && u <= max) \
return -EINVAL; \ return (type) u; \
if (u > max) \ return (type) -1; \
return -EINVAL; \ } \
return (type) u; \
}
#define _DEFINE_STRING_TABLE_LOOKUP(name,type,scope) \ #define _DEFINE_STRING_TABLE_LOOKUP(name,type,scope) \
_DEFINE_STRING_TABLE_LOOKUP_TO_STRING(name,type,scope) \ _DEFINE_STRING_TABLE_LOOKUP_TO_STRING(name,type,scope) \

View File

@ -111,7 +111,7 @@ typedef enum ColorMode {
/* Only 256 colors. */ /* Only 256 colors. */
COLOR_256 = 256, COLOR_256 = 256,
_COLOR_INVALID = -EINVAL, _COLOR_INVALID = -1,
} ColorMode; } ColorMode;
int acquire_terminal(const char *name, AcquireTerminalFlags flags, usec_t timeout); int acquire_terminal(const char *name, AcquireTerminalFlags flags, usec_t timeout);

View File

@ -35,7 +35,7 @@ typedef enum TimestampStyle {
TIMESTAMP_UTC, TIMESTAMP_UTC,
TIMESTAMP_US_UTC, TIMESTAMP_US_UTC,
_TIMESTAMP_STYLE_MAX, _TIMESTAMP_STYLE_MAX,
_TIMESTAMP_STYLE_INVALID = -EINVAL, _TIMESTAMP_STYLE_INVALID = -1,
} TimestampStyle; } TimestampStyle;
#define USEC_INFINITY ((usec_t) UINT64_MAX) #define USEC_INFINITY ((usec_t) UINT64_MAX)

View File

@ -22,7 +22,7 @@ typedef enum UnitType {
UNIT_SLICE, UNIT_SLICE,
UNIT_SCOPE, UNIT_SCOPE,
_UNIT_TYPE_MAX, _UNIT_TYPE_MAX,
_UNIT_TYPE_INVALID = -EINVAL, _UNIT_TYPE_INVALID = -1
} UnitType; } UnitType;
typedef enum UnitLoadState { typedef enum UnitLoadState {
@ -34,7 +34,7 @@ typedef enum UnitLoadState {
UNIT_MERGED, UNIT_MERGED,
UNIT_MASKED, UNIT_MASKED,
_UNIT_LOAD_STATE_MAX, _UNIT_LOAD_STATE_MAX,
_UNIT_LOAD_STATE_INVALID = -EINVAL, _UNIT_LOAD_STATE_INVALID = -1
} UnitLoadState; } UnitLoadState;
typedef enum UnitActiveState { typedef enum UnitActiveState {
@ -46,7 +46,7 @@ typedef enum UnitActiveState {
UNIT_DEACTIVATING, UNIT_DEACTIVATING,
UNIT_MAINTENANCE, UNIT_MAINTENANCE,
_UNIT_ACTIVE_STATE_MAX, _UNIT_ACTIVE_STATE_MAX,
_UNIT_ACTIVE_STATE_INVALID = -EINVAL, _UNIT_ACTIVE_STATE_INVALID = -1
} UnitActiveState; } UnitActiveState;
typedef enum FreezerState { typedef enum FreezerState {
@ -55,7 +55,7 @@ typedef enum FreezerState {
FREEZER_FROZEN, FREEZER_FROZEN,
FREEZER_THAWING, FREEZER_THAWING,
_FREEZER_STATE_MAX, _FREEZER_STATE_MAX,
_FREEZER_STATE_INVALID = -EINVAL, _FREEZER_STATE_INVALID = -1
} FreezerState; } FreezerState;
typedef enum AutomountState { typedef enum AutomountState {
@ -64,7 +64,7 @@ typedef enum AutomountState {
AUTOMOUNT_RUNNING, AUTOMOUNT_RUNNING,
AUTOMOUNT_FAILED, AUTOMOUNT_FAILED,
_AUTOMOUNT_STATE_MAX, _AUTOMOUNT_STATE_MAX,
_AUTOMOUNT_STATE_INVALID = -EINVAL, _AUTOMOUNT_STATE_INVALID = -1
} AutomountState; } AutomountState;
/* We simply watch devices, we cannot plug/unplug them. That /* We simply watch devices, we cannot plug/unplug them. That
@ -74,7 +74,7 @@ typedef enum DeviceState {
DEVICE_TENTATIVE, /* mounted or swapped, but not (yet) announced by udev */ DEVICE_TENTATIVE, /* mounted or swapped, but not (yet) announced by udev */
DEVICE_PLUGGED, /* announced by udev */ DEVICE_PLUGGED, /* announced by udev */
_DEVICE_STATE_MAX, _DEVICE_STATE_MAX,
_DEVICE_STATE_INVALID = -EINVAL, _DEVICE_STATE_INVALID = -1
} DeviceState; } DeviceState;
typedef enum MountState { typedef enum MountState {
@ -91,7 +91,7 @@ typedef enum MountState {
MOUNT_FAILED, MOUNT_FAILED,
MOUNT_CLEANING, MOUNT_CLEANING,
_MOUNT_STATE_MAX, _MOUNT_STATE_MAX,
_MOUNT_STATE_INVALID = -EINVAL, _MOUNT_STATE_INVALID = -1
} MountState; } MountState;
typedef enum PathState { typedef enum PathState {
@ -100,7 +100,7 @@ typedef enum PathState {
PATH_RUNNING, PATH_RUNNING,
PATH_FAILED, PATH_FAILED,
_PATH_STATE_MAX, _PATH_STATE_MAX,
_PATH_STATE_INVALID = -EINVAL, _PATH_STATE_INVALID = -1
} PathState; } PathState;
typedef enum ScopeState { typedef enum ScopeState {
@ -111,7 +111,7 @@ typedef enum ScopeState {
SCOPE_STOP_SIGKILL, SCOPE_STOP_SIGKILL,
SCOPE_FAILED, SCOPE_FAILED,
_SCOPE_STATE_MAX, _SCOPE_STATE_MAX,
_SCOPE_STATE_INVALID = -EINVAL, _SCOPE_STATE_INVALID = -1
} ScopeState; } ScopeState;
typedef enum ServiceState { typedef enum ServiceState {
@ -135,14 +135,14 @@ typedef enum ServiceState {
SERVICE_AUTO_RESTART, SERVICE_AUTO_RESTART,
SERVICE_CLEANING, SERVICE_CLEANING,
_SERVICE_STATE_MAX, _SERVICE_STATE_MAX,
_SERVICE_STATE_INVALID = -EINVAL, _SERVICE_STATE_INVALID = -1
} ServiceState; } ServiceState;
typedef enum SliceState { typedef enum SliceState {
SLICE_DEAD, SLICE_DEAD,
SLICE_ACTIVE, SLICE_ACTIVE,
_SLICE_STATE_MAX, _SLICE_STATE_MAX,
_SLICE_STATE_INVALID = -EINVAL, _SLICE_STATE_INVALID = -1
} SliceState; } SliceState;
typedef enum SocketState { typedef enum SocketState {
@ -161,7 +161,7 @@ typedef enum SocketState {
SOCKET_FAILED, SOCKET_FAILED,
SOCKET_CLEANING, SOCKET_CLEANING,
_SOCKET_STATE_MAX, _SOCKET_STATE_MAX,
_SOCKET_STATE_INVALID = -EINVAL, _SOCKET_STATE_INVALID = -1
} SocketState; } SocketState;
typedef enum SwapState { typedef enum SwapState {
@ -175,14 +175,14 @@ typedef enum SwapState {
SWAP_FAILED, SWAP_FAILED,
SWAP_CLEANING, SWAP_CLEANING,
_SWAP_STATE_MAX, _SWAP_STATE_MAX,
_SWAP_STATE_INVALID = -EINVAL, _SWAP_STATE_INVALID = -1
} SwapState; } SwapState;
typedef enum TargetState { typedef enum TargetState {
TARGET_DEAD, TARGET_DEAD,
TARGET_ACTIVE, TARGET_ACTIVE,
_TARGET_STATE_MAX, _TARGET_STATE_MAX,
_TARGET_STATE_INVALID = -EINVAL, _TARGET_STATE_INVALID = -1
} TargetState; } TargetState;
typedef enum TimerState { typedef enum TimerState {
@ -192,7 +192,7 @@ typedef enum TimerState {
TIMER_ELAPSED, TIMER_ELAPSED,
TIMER_FAILED, TIMER_FAILED,
_TIMER_STATE_MAX, _TIMER_STATE_MAX,
_TIMER_STATE_INVALID = -EINVAL, _TIMER_STATE_INVALID = -1
} TimerState; } TimerState;
typedef enum UnitDependency { typedef enum UnitDependency {
@ -237,7 +237,7 @@ typedef enum UnitDependency {
UNIT_REFERENCED_BY, UNIT_REFERENCED_BY,
_UNIT_DEPENDENCY_MAX, _UNIT_DEPENDENCY_MAX,
_UNIT_DEPENDENCY_INVALID = -EINVAL, _UNIT_DEPENDENCY_INVALID = -1
} UnitDependency; } UnitDependency;
typedef enum NotifyAccess { typedef enum NotifyAccess {
@ -246,7 +246,7 @@ typedef enum NotifyAccess {
NOTIFY_MAIN, NOTIFY_MAIN,
NOTIFY_EXEC, NOTIFY_EXEC,
_NOTIFY_ACCESS_MAX, _NOTIFY_ACCESS_MAX,
_NOTIFY_ACCESS_INVALID = -EINVAL, _NOTIFY_ACCESS_INVALID = -1
} NotifyAccess; } NotifyAccess;
char *unit_dbus_path_from_name(const char *name); char *unit_dbus_path_from_name(const char *name);

View File

@ -26,7 +26,7 @@ enum UnitFileState {
UNIT_FILE_TRANSIENT, UNIT_FILE_TRANSIENT,
UNIT_FILE_BAD, UNIT_FILE_BAD,
_UNIT_FILE_STATE_MAX, _UNIT_FILE_STATE_MAX,
_UNIT_FILE_STATE_INVALID = -EINVAL, _UNIT_FILE_STATE_INVALID = -1
}; };
enum UnitFileScope { enum UnitFileScope {
@ -34,7 +34,7 @@ enum UnitFileScope {
UNIT_FILE_GLOBAL, UNIT_FILE_GLOBAL,
UNIT_FILE_USER, UNIT_FILE_USER,
_UNIT_FILE_SCOPE_MAX, _UNIT_FILE_SCOPE_MAX,
_UNIT_FILE_SCOPE_INVALID = -EINVAL, _UNIT_FILE_SCOPE_INVALID = -1
}; };
bool unit_type_may_alias(UnitType type) _const_; bool unit_type_may_alias(UnitType type) _const_;

View File

@ -252,7 +252,7 @@ int unit_name_build(const char *prefix, const char *instance, const char *suffix
type = unit_type_from_string(suffix + 1); type = unit_type_from_string(suffix + 1);
if (type < 0) if (type < 0)
return type; return -EINVAL;
return unit_name_build_from_type(prefix, instance, type, ret); return unit_name_build_from_type(prefix, instance, type, ret);
} }

View File

@ -13,7 +13,7 @@ typedef enum UnitNameFlags {
UNIT_NAME_TEMPLATE = 1 << 1, /* Allow foo@.service */ UNIT_NAME_TEMPLATE = 1 << 1, /* Allow foo@.service */
UNIT_NAME_INSTANCE = 1 << 2, /* Allow foo@bar.service */ UNIT_NAME_INSTANCE = 1 << 2, /* Allow foo@bar.service */
UNIT_NAME_ANY = UNIT_NAME_PLAIN|UNIT_NAME_TEMPLATE|UNIT_NAME_INSTANCE, UNIT_NAME_ANY = UNIT_NAME_PLAIN|UNIT_NAME_TEMPLATE|UNIT_NAME_INSTANCE,
_UNIT_NAME_INVALID = -EINVAL, _UNIT_NAME_INVALID = -1,
} UnitNameFlags; } UnitNameFlags;
bool unit_name_is_valid(const char *n, UnitNameFlags flags) _pure_; bool unit_name_is_valid(const char *n, UnitNameFlags flags) _pure_;

View File

@ -41,7 +41,7 @@ enum {
VIRTUALIZATION_CONTAINER_LAST = VIRTUALIZATION_CONTAINER_OTHER, VIRTUALIZATION_CONTAINER_LAST = VIRTUALIZATION_CONTAINER_OTHER,
_VIRTUALIZATION_MAX, _VIRTUALIZATION_MAX,
_VIRTUALIZATION_INVALID = -EINVAL, _VIRTUALIZATION_INVALID = -1
}; };
static inline bool VIRTUALIZATION_IS_VM(int x) { static inline bool VIRTUALIZATION_IS_VM(int x) {

View File

@ -2,14 +2,13 @@
#pragma once #pragma once
#include <efi.h> #include <efi.h>
#include <errno.h>
typedef enum RandomSeedMode { typedef enum RandomSeedMode {
RANDOM_SEED_OFF, RANDOM_SEED_OFF,
RANDOM_SEED_WITH_SYSTEM_TOKEN, RANDOM_SEED_WITH_SYSTEM_TOKEN,
RANDOM_SEED_ALWAYS, RANDOM_SEED_ALWAYS,
_RANDOM_SEED_MODE_MAX, _RANDOM_SEED_MODE_MAX,
_RANDOM_SEED_MODE_INVALID = -EINVAL, _RANDOM_SEED_MODE_INVALID = -1,
} RandomSeedMode; } RandomSeedMode;
EFI_STATUS process_random_seed(EFI_FILE *root_dir, RandomSeedMode mode); EFI_STATUS process_random_seed(EFI_FILE *root_dir, RandomSeedMode mode);

View File

@ -12,7 +12,7 @@ typedef enum AutomountResult {
AUTOMOUNT_FAILURE_START_LIMIT_HIT, AUTOMOUNT_FAILURE_START_LIMIT_HIT,
AUTOMOUNT_FAILURE_MOUNT_START_LIMIT_HIT, AUTOMOUNT_FAILURE_MOUNT_START_LIMIT_HIT,
_AUTOMOUNT_RESULT_MAX, _AUTOMOUNT_RESULT_MAX,
_AUTOMOUNT_RESULT_INVALID = -EINVAL, _AUTOMOUNT_RESULT_INVALID = -1
} AutomountResult; } AutomountResult;
struct Automount { struct Automount {

View File

@ -44,7 +44,7 @@ typedef enum CGroupDevicePolicy {
CGROUP_DEVICE_POLICY_STRICT, CGROUP_DEVICE_POLICY_STRICT,
_CGROUP_DEVICE_POLICY_MAX, _CGROUP_DEVICE_POLICY_MAX,
_CGROUP_DEVICE_POLICY_INVALID = -EINVAL, _CGROUP_DEVICE_POLICY_INVALID = -1
} CGroupDevicePolicy; } CGroupDevicePolicy;
typedef enum FreezerAction { typedef enum FreezerAction {
@ -52,7 +52,7 @@ typedef enum FreezerAction {
FREEZER_THAW, FREEZER_THAW,
_FREEZER_ACTION_MAX, _FREEZER_ACTION_MAX,
_FREEZER_ACTION_INVALID = -EINVAL, _FREEZER_ACTION_INVALID = -1,
} FreezerAction; } FreezerAction;
struct CGroupDeviceAllow { struct CGroupDeviceAllow {
@ -173,7 +173,7 @@ typedef enum CGroupIPAccountingMetric {
CGROUP_IP_EGRESS_BYTES, CGROUP_IP_EGRESS_BYTES,
CGROUP_IP_EGRESS_PACKETS, CGROUP_IP_EGRESS_PACKETS,
_CGROUP_IP_ACCOUNTING_METRIC_MAX, _CGROUP_IP_ACCOUNTING_METRIC_MAX,
_CGROUP_IP_ACCOUNTING_METRIC_INVALID = -EINVAL, _CGROUP_IP_ACCOUNTING_METRIC_INVALID = -1,
} CGroupIPAccountingMetric; } CGroupIPAccountingMetric;
/* Used when querying IO accounting data */ /* Used when querying IO accounting data */
@ -183,7 +183,7 @@ typedef enum CGroupIOAccountingMetric {
CGROUP_IO_READ_OPERATIONS, CGROUP_IO_READ_OPERATIONS,
CGROUP_IO_WRITE_OPERATIONS, CGROUP_IO_WRITE_OPERATIONS,
_CGROUP_IO_ACCOUNTING_METRIC_MAX, _CGROUP_IO_ACCOUNTING_METRIC_MAX,
_CGROUP_IO_ACCOUNTING_METRIC_INVALID = -EINVAL, _CGROUP_IO_ACCOUNTING_METRIC_INVALID = -1,
} CGroupIOAccountingMetric; } CGroupIOAccountingMetric;
typedef struct Unit Unit; typedef struct Unit Unit;

View File

@ -1452,7 +1452,7 @@ int bus_cgroup_set_property(
p = cgroup_device_policy_from_string(policy); p = cgroup_device_policy_from_string(policy);
if (p < 0) if (p < 0)
return p; return -EINVAL;
if (!UNIT_WRITE_FLAGS_NOOP(flags)) { if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
c->device_policy = p; c->device_policy = p;

View File

@ -338,7 +338,7 @@ static int bus_timer_set_transient_property(
b = timer_base_from_string(name); b = timer_base_from_string(name);
if (b < 0) if (b < 0)
return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Unknown timer base %s", name); return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Unknown timer base");
r = sd_bus_message_read(message, "t", &usec); r = sd_bus_message_read(message, "t", &usec);
if (r < 0) if (r < 0)

View File

@ -1982,7 +1982,7 @@ static int bus_unit_set_transient_property(
UnitWriteFlags flags, UnitWriteFlags flags,
sd_bus_error *error) { sd_bus_error *error) {
UnitDependency d; UnitDependency d = _UNIT_DEPENDENCY_INVALID;
int r; int r;
assert(u); assert(u);

View File

@ -1,8 +1,6 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */ /* SPDX-License-Identifier: LGPL-2.1-or-later */
#pragma once #pragma once
#include <errno.h>
typedef enum EmergencyAction { typedef enum EmergencyAction {
EMERGENCY_ACTION_NONE, EMERGENCY_ACTION_NONE,
EMERGENCY_ACTION_REBOOT, EMERGENCY_ACTION_REBOOT,
@ -15,7 +13,7 @@ typedef enum EmergencyAction {
_EMERGENCY_ACTION_FIRST_USER_ACTION = EMERGENCY_ACTION_EXIT, _EMERGENCY_ACTION_FIRST_USER_ACTION = EMERGENCY_ACTION_EXIT,
EMERGENCY_ACTION_EXIT_FORCE, EMERGENCY_ACTION_EXIT_FORCE,
_EMERGENCY_ACTION_MAX, _EMERGENCY_ACTION_MAX,
_EMERGENCY_ACTION_INVALID = -EINVAL, _EMERGENCY_ACTION_INVALID = -1
} EmergencyAction; } EmergencyAction;
typedef enum EmergencyActionFlags { typedef enum EmergencyActionFlags {

View File

@ -33,7 +33,7 @@ typedef enum ExecUtmpMode {
EXEC_UTMP_LOGIN, EXEC_UTMP_LOGIN,
EXEC_UTMP_USER, EXEC_UTMP_USER,
_EXEC_UTMP_MODE_MAX, _EXEC_UTMP_MODE_MAX,
_EXEC_UTMP_MODE_INVALID = -EINVAL, _EXEC_UTMP_MODE_INVALID = -1
} ExecUtmpMode; } ExecUtmpMode;
typedef enum ExecInput { typedef enum ExecInput {
@ -46,7 +46,7 @@ typedef enum ExecInput {
EXEC_INPUT_DATA, EXEC_INPUT_DATA,
EXEC_INPUT_FILE, EXEC_INPUT_FILE,
_EXEC_INPUT_MAX, _EXEC_INPUT_MAX,
_EXEC_INPUT_INVALID = -EINVAL, _EXEC_INPUT_INVALID = -1
} ExecInput; } ExecInput;
typedef enum ExecOutput { typedef enum ExecOutput {
@ -63,7 +63,7 @@ typedef enum ExecOutput {
EXEC_OUTPUT_FILE_APPEND, EXEC_OUTPUT_FILE_APPEND,
EXEC_OUTPUT_FILE_TRUNCATE, EXEC_OUTPUT_FILE_TRUNCATE,
_EXEC_OUTPUT_MAX, _EXEC_OUTPUT_MAX,
_EXEC_OUTPUT_INVALID = -EINVAL, _EXEC_OUTPUT_INVALID = -1
} ExecOutput; } ExecOutput;
typedef enum ExecPreserveMode { typedef enum ExecPreserveMode {
@ -71,7 +71,7 @@ typedef enum ExecPreserveMode {
EXEC_PRESERVE_YES, EXEC_PRESERVE_YES,
EXEC_PRESERVE_RESTART, EXEC_PRESERVE_RESTART,
_EXEC_PRESERVE_MODE_MAX, _EXEC_PRESERVE_MODE_MAX,
_EXEC_PRESERVE_MODE_INVALID = -EINVAL, _EXEC_PRESERVE_MODE_INVALID = -1
} ExecPreserveMode; } ExecPreserveMode;
typedef enum ExecKeyringMode { typedef enum ExecKeyringMode {
@ -79,7 +79,7 @@ typedef enum ExecKeyringMode {
EXEC_KEYRING_PRIVATE, EXEC_KEYRING_PRIVATE,
EXEC_KEYRING_SHARED, EXEC_KEYRING_SHARED,
_EXEC_KEYRING_MODE_MAX, _EXEC_KEYRING_MODE_MAX,
_EXEC_KEYRING_MODE_INVALID = -EINVAL, _EXEC_KEYRING_MODE_INVALID = -1,
} ExecKeyringMode; } ExecKeyringMode;
/* Contains start and exit information about an executed command. */ /* Contains start and exit information about an executed command. */
@ -126,7 +126,7 @@ typedef enum ExecDirectoryType {
EXEC_DIRECTORY_LOGS, EXEC_DIRECTORY_LOGS,
EXEC_DIRECTORY_CONFIGURATION, EXEC_DIRECTORY_CONFIGURATION,
_EXEC_DIRECTORY_TYPE_MAX, _EXEC_DIRECTORY_TYPE_MAX,
_EXEC_DIRECTORY_TYPE_INVALID = -EINVAL, _EXEC_DIRECTORY_TYPE_INVALID = -1,
} ExecDirectoryType; } ExecDirectoryType;
typedef struct ExecDirectory { typedef struct ExecDirectory {
@ -144,7 +144,7 @@ typedef enum ExecCleanMask {
EXEC_CLEAN_CONFIGURATION = 1U << EXEC_DIRECTORY_CONFIGURATION, EXEC_CLEAN_CONFIGURATION = 1U << EXEC_DIRECTORY_CONFIGURATION,
EXEC_CLEAN_NONE = 0, EXEC_CLEAN_NONE = 0,
EXEC_CLEAN_ALL = (1U << _EXEC_DIRECTORY_TYPE_MAX) - 1, EXEC_CLEAN_ALL = (1U << _EXEC_DIRECTORY_TYPE_MAX) - 1,
_EXEC_CLEAN_MASK_INVALID = -EINVAL, _EXEC_CLEAN_MASK_INVALID = -1,
} ExecCleanMask; } ExecCleanMask;
/* A credential configured with SetCredential= */ /* A credential configured with SetCredential= */

View File

@ -57,14 +57,14 @@ enum JobType {
JOB_RELOAD_OR_START, /* if running, reload, otherwise start */ JOB_RELOAD_OR_START, /* if running, reload, otherwise start */
_JOB_TYPE_MAX, _JOB_TYPE_MAX,
_JOB_TYPE_INVALID = -EINVAL, _JOB_TYPE_INVALID = -1
}; };
enum JobState { enum JobState {
JOB_WAITING, JOB_WAITING,
JOB_RUNNING, JOB_RUNNING,
_JOB_STATE_MAX, _JOB_STATE_MAX,
_JOB_STATE_INVALID = -EINVAL, _JOB_STATE_INVALID = -1
}; };
enum JobMode { enum JobMode {
@ -77,7 +77,7 @@ enum JobMode {
JOB_IGNORE_REQUIREMENTS, /* Ignore requirement dependencies */ JOB_IGNORE_REQUIREMENTS, /* Ignore requirement dependencies */
JOB_TRIGGERING, /* Adds TRIGGERED_BY dependencies to the same transaction */ JOB_TRIGGERING, /* Adds TRIGGERED_BY dependencies to the same transaction */
_JOB_MODE_MAX, _JOB_MODE_MAX,
_JOB_MODE_INVALID = -EINVAL, _JOB_MODE_INVALID = -1
}; };
enum JobResult { enum JobResult {
@ -93,7 +93,7 @@ enum JobResult {
JOB_COLLECTED, /* Job was garbage collected, since nothing needed it anymore */ JOB_COLLECTED, /* Job was garbage collected, since nothing needed it anymore */
JOB_ONCE, /* Unit was started before, and hence can't be started again */ JOB_ONCE, /* Unit was started before, and hence can't be started again */
_JOB_RESULT_MAX, _JOB_RESULT_MAX,
_JOB_RESULT_INVALID = -EINVAL, _JOB_RESULT_INVALID = -1
}; };
#include "unit.h" #include "unit.h"

View File

@ -15,7 +15,7 @@ typedef enum KillMode {
KILL_MIXED, KILL_MIXED,
KILL_NONE, KILL_NONE,
_KILL_MODE_MAX, _KILL_MODE_MAX,
_KILL_MODE_INVALID = -EINVAL, _KILL_MODE_INVALID = -1
} KillMode; } KillMode;
struct KillContext { struct KillContext {
@ -37,7 +37,7 @@ typedef enum KillWho {
KILL_CONTROL_FAIL, KILL_CONTROL_FAIL,
KILL_ALL_FAIL, KILL_ALL_FAIL,
_KILL_WHO_MAX, _KILL_WHO_MAX,
_KILL_WHO_INVALID = -EINVAL, _KILL_WHO_INVALID = -1
} KillWho; } KillWho;
void kill_context_init(KillContext *c); void kill_context_init(KillContext *c);

View File

@ -510,7 +510,7 @@ static int manager_setup_signals(Manager *m) {
SIGCHLD, /* Child died */ SIGCHLD, /* Child died */
SIGTERM, /* Reexecute daemon */ SIGTERM, /* Reexecute daemon */
SIGHUP, /* Reload configuration */ SIGHUP, /* Reload configuration */
SIGUSR1, /* systemd: reconnect to D-Bus */ SIGUSR1, /* systemd/upstart: reconnect to D-Bus */
SIGUSR2, /* systemd: dump status */ SIGUSR2, /* systemd: dump status */
SIGINT, /* Kernel sends us this on control-alt-del */ SIGINT, /* Kernel sends us this on control-alt-del */
SIGWINCH, /* Kernel sends us this on kbrequest (alt-arrowup) */ SIGWINCH, /* Kernel sends us this on kbrequest (alt-arrowup) */
@ -3180,19 +3180,22 @@ static bool manager_timestamp_shall_serialize(ManagerTimestamp t) {
#define DESTROY_IPC_FLAG (UINT32_C(1) << 31) #define DESTROY_IPC_FLAG (UINT32_C(1) << 31)
static void manager_serialize_uid_refs_internal( static void manager_serialize_uid_refs_internal(
Manager *m,
FILE *f, FILE *f,
Hashmap *uid_refs, Hashmap **uid_refs,
const char *field_name) { const char *field_name) {
void *p, *k; void *p, *k;
assert(m);
assert(f); assert(f);
assert(uid_refs);
assert(field_name); assert(field_name);
/* Serialize the UID reference table. Or actually, just the IPC destruction flag of it, as /* Serialize the UID reference table. Or actually, just the IPC destruction flag of it, as
* the actual counter of it is better rebuild after a reload/reexec. */ * the actual counter of it is better rebuild after a reload/reexec. */
HASHMAP_FOREACH_KEY(p, k, uid_refs) { HASHMAP_FOREACH_KEY(p, k, *uid_refs) {
uint32_t c; uint32_t c;
uid_t uid; uid_t uid;
@ -3207,11 +3210,11 @@ static void manager_serialize_uid_refs_internal(
} }
static void manager_serialize_uid_refs(Manager *m, FILE *f) { static void manager_serialize_uid_refs(Manager *m, FILE *f) {
manager_serialize_uid_refs_internal(f, m->uid_refs, "destroy-ipc-uid"); manager_serialize_uid_refs_internal(m, f, &m->uid_refs, "destroy-ipc-uid");
} }
static void manager_serialize_gid_refs(Manager *m, FILE *f) { static void manager_serialize_gid_refs(Manager *m, FILE *f) {
manager_serialize_uid_refs_internal(f, m->gid_refs, "destroy-ipc-gid"); manager_serialize_uid_refs_internal(m, f, &m->gid_refs, "destroy-ipc-gid");
} }
int manager_serialize( int manager_serialize(
@ -3471,6 +3474,7 @@ void manager_retry_runtime_watchdog(Manager *m) {
} }
static void manager_deserialize_uid_refs_one_internal( static void manager_deserialize_uid_refs_one_internal(
Manager *m,
Hashmap** uid_refs, Hashmap** uid_refs,
const char *value) { const char *value) {
@ -3478,16 +3482,18 @@ static void manager_deserialize_uid_refs_one_internal(
uint32_t c; uint32_t c;
int r; int r;
assert(m);
assert(uid_refs); assert(uid_refs);
assert(value); assert(value);
r = parse_uid(value, &uid); r = parse_uid(value, &uid);
if (r < 0 || uid == 0) { if (r < 0 || uid == 0) {
log_debug("Unable to parse UID/GID reference serialization: " UID_FMT, uid); log_debug("Unable to parse UID reference serialization: " UID_FMT, uid);
return; return;
} }
if (hashmap_ensure_allocated(uid_refs, &trivial_hash_ops) < 0) { r = hashmap_ensure_allocated(uid_refs, &trivial_hash_ops);
if (r < 0) {
log_oom(); log_oom();
return; return;
} }
@ -3500,17 +3506,17 @@ static void manager_deserialize_uid_refs_one_internal(
r = hashmap_replace(*uid_refs, UID_TO_PTR(uid), UINT32_TO_PTR(c)); r = hashmap_replace(*uid_refs, UID_TO_PTR(uid), UINT32_TO_PTR(c));
if (r < 0) { if (r < 0) {
log_debug_errno(r, "Failed to add UID/GID reference entry: %m"); log_debug_errno(r, "Failed to add UID reference entry: %m");
return; return;
} }
} }
static void manager_deserialize_uid_refs_one(Manager *m, const char *value) { static void manager_deserialize_uid_refs_one(Manager *m, const char *value) {
manager_deserialize_uid_refs_one_internal(&m->uid_refs, value); manager_deserialize_uid_refs_one_internal(m, &m->uid_refs, value);
} }
static void manager_deserialize_gid_refs_one(Manager *m, const char *value) { static void manager_deserialize_gid_refs_one(Manager *m, const char *value) {
manager_deserialize_uid_refs_one_internal(&m->gid_refs, value); manager_deserialize_uid_refs_one_internal(m, &m->gid_refs, value);
} }
int manager_deserialize(Manager *m, FILE *f, FDSet *fds) { int manager_deserialize(Manager *m, FILE *f, FDSet *fds) {
@ -4584,13 +4590,16 @@ ManagerState manager_state(Manager *m) {
} }
static void manager_unref_uid_internal( static void manager_unref_uid_internal(
Hashmap *uid_refs, Manager *m,
Hashmap **uid_refs,
uid_t uid, uid_t uid,
bool destroy_now, bool destroy_now,
int (*_clean_ipc)(uid_t uid)) { int (*_clean_ipc)(uid_t uid)) {
uint32_t c, n; uint32_t c, n;
assert(m);
assert(uid_refs);
assert(uid_is_valid(uid)); assert(uid_is_valid(uid));
assert(_clean_ipc); assert(_clean_ipc);
@ -4608,14 +4617,14 @@ static void manager_unref_uid_internal(
if (uid == 0) /* We don't keep track of root, and will never destroy it */ if (uid == 0) /* We don't keep track of root, and will never destroy it */
return; return;
c = PTR_TO_UINT32(hashmap_get(uid_refs, UID_TO_PTR(uid))); c = PTR_TO_UINT32(hashmap_get(*uid_refs, UID_TO_PTR(uid)));
n = c & ~DESTROY_IPC_FLAG; n = c & ~DESTROY_IPC_FLAG;
assert(n > 0); assert(n > 0);
n--; n--;
if (destroy_now && n == 0) { if (destroy_now && n == 0) {
hashmap_remove(uid_refs, UID_TO_PTR(uid)); hashmap_remove(*uid_refs, UID_TO_PTR(uid));
if (c & DESTROY_IPC_FLAG) { if (c & DESTROY_IPC_FLAG) {
log_debug("%s " UID_FMT " is no longer referenced, cleaning up its IPC.", log_debug("%s " UID_FMT " is no longer referenced, cleaning up its IPC.",
@ -4625,19 +4634,20 @@ static void manager_unref_uid_internal(
} }
} else { } else {
c = n | (c & DESTROY_IPC_FLAG); c = n | (c & DESTROY_IPC_FLAG);
assert_se(hashmap_update(uid_refs, UID_TO_PTR(uid), UINT32_TO_PTR(c)) >= 0); assert_se(hashmap_update(*uid_refs, UID_TO_PTR(uid), UINT32_TO_PTR(c)) >= 0);
} }
} }
void manager_unref_uid(Manager *m, uid_t uid, bool destroy_now) { void manager_unref_uid(Manager *m, uid_t uid, bool destroy_now) {
manager_unref_uid_internal(m->uid_refs, uid, destroy_now, clean_ipc_by_uid); manager_unref_uid_internal(m, &m->uid_refs, uid, destroy_now, clean_ipc_by_uid);
} }
void manager_unref_gid(Manager *m, gid_t gid, bool destroy_now) { void manager_unref_gid(Manager *m, gid_t gid, bool destroy_now) {
manager_unref_uid_internal(m->gid_refs, (uid_t) gid, destroy_now, clean_ipc_by_gid); manager_unref_uid_internal(m, &m->gid_refs, (uid_t) gid, destroy_now, clean_ipc_by_gid);
} }
static int manager_ref_uid_internal( static int manager_ref_uid_internal(
Manager *m,
Hashmap **uid_refs, Hashmap **uid_refs,
uid_t uid, uid_t uid,
bool clean_ipc) { bool clean_ipc) {
@ -4645,6 +4655,7 @@ static int manager_ref_uid_internal(
uint32_t c, n; uint32_t c, n;
int r; int r;
assert(m);
assert(uid_refs); assert(uid_refs);
assert(uid_is_valid(uid)); assert(uid_is_valid(uid));
@ -4675,22 +4686,25 @@ static int manager_ref_uid_internal(
} }
int manager_ref_uid(Manager *m, uid_t uid, bool clean_ipc) { int manager_ref_uid(Manager *m, uid_t uid, bool clean_ipc) {
return manager_ref_uid_internal(&m->uid_refs, uid, clean_ipc); return manager_ref_uid_internal(m, &m->uid_refs, uid, clean_ipc);
} }
int manager_ref_gid(Manager *m, gid_t gid, bool clean_ipc) { int manager_ref_gid(Manager *m, gid_t gid, bool clean_ipc) {
return manager_ref_uid_internal(&m->gid_refs, (uid_t) gid, clean_ipc); return manager_ref_uid_internal(m, &m->gid_refs, (uid_t) gid, clean_ipc);
} }
static void manager_vacuum_uid_refs_internal( static void manager_vacuum_uid_refs_internal(
Hashmap *uid_refs, Manager *m,
Hashmap **uid_refs,
int (*_clean_ipc)(uid_t uid)) { int (*_clean_ipc)(uid_t uid)) {
void *p, *k; void *p, *k;
assert(m);
assert(uid_refs);
assert(_clean_ipc); assert(_clean_ipc);
HASHMAP_FOREACH_KEY(p, k, uid_refs) { HASHMAP_FOREACH_KEY(p, k, *uid_refs) {
uint32_t c, n; uint32_t c, n;
uid_t uid; uid_t uid;
@ -4708,16 +4722,16 @@ static void manager_vacuum_uid_refs_internal(
(void) _clean_ipc(uid); (void) _clean_ipc(uid);
} }
assert_se(hashmap_remove(uid_refs, k) == p); assert_se(hashmap_remove(*uid_refs, k) == p);
} }
} }
static void manager_vacuum_uid_refs(Manager *m) { static void manager_vacuum_uid_refs(Manager *m) {
manager_vacuum_uid_refs_internal(m->uid_refs, clean_ipc_by_uid); manager_vacuum_uid_refs_internal(m, &m->uid_refs, clean_ipc_by_uid);
} }
static void manager_vacuum_gid_refs(Manager *m) { static void manager_vacuum_gid_refs(Manager *m) {
manager_vacuum_uid_refs_internal(m->gid_refs, clean_ipc_by_gid); manager_vacuum_uid_refs_internal(m, &m->gid_refs, clean_ipc_by_gid);
} }
static void manager_vacuum(Manager *m) { static void manager_vacuum(Manager *m) {

View File

@ -36,7 +36,7 @@ typedef enum ManagerState {
MANAGER_MAINTENANCE, MANAGER_MAINTENANCE,
MANAGER_STOPPING, MANAGER_STOPPING,
_MANAGER_STATE_MAX, _MANAGER_STATE_MAX,
_MANAGER_STATE_INVALID = -EINVAL, _MANAGER_STATE_INVALID = -1
} ManagerState; } ManagerState;
typedef enum ManagerObjective { typedef enum ManagerObjective {
@ -50,7 +50,7 @@ typedef enum ManagerObjective {
MANAGER_KEXEC, MANAGER_KEXEC,
MANAGER_SWITCH_ROOT, MANAGER_SWITCH_ROOT,
_MANAGER_OBJECTIVE_MAX, _MANAGER_OBJECTIVE_MAX,
_MANAGER_OBJECTIVE_INVALID = -EINVAL, _MANAGER_OBJECTIVE_INVALID = -1
} ManagerObjective; } ManagerObjective;
typedef enum StatusType { typedef enum StatusType {
@ -65,7 +65,7 @@ typedef enum OOMPolicy {
OOM_STOP, /* The kernel kills the process it wants to kill, and we stop the unit */ OOM_STOP, /* The kernel kills the process it wants to kill, and we stop the unit */
OOM_KILL, /* The kernel kills the process it wants to kill, and all others in the unit, and we stop the unit */ OOM_KILL, /* The kernel kills the process it wants to kill, and all others in the unit, and we stop the unit */
_OOM_POLICY_MAX, _OOM_POLICY_MAX,
_OOM_POLICY_INVALID = -EINVAL, _OOM_POLICY_INVALID = -1
} OOMPolicy; } OOMPolicy;
/* Notes: /* Notes:
@ -111,7 +111,7 @@ typedef enum ManagerTimestamp {
MANAGER_TIMESTAMP_INITRD_UNITS_LOAD_START, MANAGER_TIMESTAMP_INITRD_UNITS_LOAD_START,
MANAGER_TIMESTAMP_INITRD_UNITS_LOAD_FINISH, MANAGER_TIMESTAMP_INITRD_UNITS_LOAD_FINISH,
_MANAGER_TIMESTAMP_MAX, _MANAGER_TIMESTAMP_MAX,
_MANAGER_TIMESTAMP_INVALID = -EINVAL, _MANAGER_TIMESTAMP_INVALID = -1,
} ManagerTimestamp; } ManagerTimestamp;
typedef enum WatchdogType { typedef enum WatchdogType {
@ -311,25 +311,25 @@ struct Manager {
/* The stat() data the last time we saw /etc/localtime */ /* The stat() data the last time we saw /etc/localtime */
usec_t etc_localtime_mtime; usec_t etc_localtime_mtime;
bool etc_localtime_accessible; bool etc_localtime_accessible:1;
ManagerObjective objective; ManagerObjective objective:5;
/* Flags */ /* Flags */
bool dispatching_load_queue; bool dispatching_load_queue:1;
bool taint_usr; bool taint_usr:1;
/* Have we already sent out the READY=1 notification? */ /* Have we already sent out the READY=1 notification? */
bool ready_sent; bool ready_sent:1;
/* Have we already printed the taint line if necessary? */ /* Have we already printed the taint line if necessary? */
bool taint_logged; bool taint_logged:1;
/* Have we ever changed the "kernel.pid_max" sysctl? */ /* Have we ever changed the "kernel.pid_max" sysctl? */
bool sysctl_pid_max_changed; bool sysctl_pid_max_changed:1;
ManagerTestRunFlags test_run_flags; ManagerTestRunFlags test_run_flags:8;
/* If non-zero, exit with the following value when the systemd /* If non-zero, exit with the following value when the systemd
* process terminate. Useful for containers: systemd-nspawn could get * process terminate. Useful for containers: systemd-nspawn could get
@ -366,8 +366,8 @@ struct Manager {
int original_log_level; int original_log_level;
LogTarget original_log_target; LogTarget original_log_target;
bool log_level_overridden; bool log_level_overridden:1;
bool log_target_overridden; bool log_target_overridden:1;
struct rlimit *rlimit[_RLIMIT_MAX]; struct rlimit *rlimit[_RLIMIT_MAX];
@ -537,7 +537,7 @@ void manager_unref_uid(Manager *m, uid_t uid, bool destroy_now);
int manager_ref_uid(Manager *m, uid_t uid, bool clean_ipc); int manager_ref_uid(Manager *m, uid_t uid, bool clean_ipc);
void manager_unref_gid(Manager *m, gid_t gid, bool destroy_now); void manager_unref_gid(Manager *m, gid_t gid, bool destroy_now);
int manager_ref_gid(Manager *m, gid_t gid, bool clean_ipc); int manager_ref_gid(Manager *m, gid_t gid, bool destroy_now);
char *manager_taint_string(Manager *m); char *manager_taint_string(Manager *m);

View File

@ -12,7 +12,7 @@ typedef enum MountExecCommand {
MOUNT_EXEC_UNMOUNT, MOUNT_EXEC_UNMOUNT,
MOUNT_EXEC_REMOUNT, MOUNT_EXEC_REMOUNT,
_MOUNT_EXEC_COMMAND_MAX, _MOUNT_EXEC_COMMAND_MAX,
_MOUNT_EXEC_COMMAND_INVALID = -EINVAL, _MOUNT_EXEC_COMMAND_INVALID = -1
} MountExecCommand; } MountExecCommand;
typedef enum MountResult { typedef enum MountResult {
@ -25,7 +25,7 @@ typedef enum MountResult {
MOUNT_FAILURE_START_LIMIT_HIT, MOUNT_FAILURE_START_LIMIT_HIT,
MOUNT_FAILURE_PROTOCOL, MOUNT_FAILURE_PROTOCOL,
_MOUNT_RESULT_MAX, _MOUNT_RESULT_MAX,
_MOUNT_RESULT_INVALID = -EINVAL, _MOUNT_RESULT_INVALID = -1
} MountResult; } MountResult;
typedef struct MountParameters { typedef struct MountParameters {

View File

@ -23,7 +23,7 @@ typedef enum ProtectHome {
PROTECT_HOME_READ_ONLY, PROTECT_HOME_READ_ONLY,
PROTECT_HOME_TMPFS, PROTECT_HOME_TMPFS,
_PROTECT_HOME_MAX, _PROTECT_HOME_MAX,
_PROTECT_HOME_INVALID = -EINVAL, _PROTECT_HOME_INVALID = -1
} ProtectHome; } ProtectHome;
typedef enum NamespaceType { typedef enum NamespaceType {
@ -35,7 +35,7 @@ typedef enum NamespaceType {
NAMESPACE_PID, NAMESPACE_PID,
NAMESPACE_NET, NAMESPACE_NET,
_NAMESPACE_TYPE_MAX, _NAMESPACE_TYPE_MAX,
_NAMESPACE_TYPE_INVALID = -EINVAL, _NAMESPACE_TYPE_INVALID = -1,
} NamespaceType; } NamespaceType;
typedef enum ProtectSystem { typedef enum ProtectSystem {
@ -44,7 +44,7 @@ typedef enum ProtectSystem {
PROTECT_SYSTEM_FULL, PROTECT_SYSTEM_FULL,
PROTECT_SYSTEM_STRICT, PROTECT_SYSTEM_STRICT,
_PROTECT_SYSTEM_MAX, _PROTECT_SYSTEM_MAX,
_PROTECT_SYSTEM_INVALID = -EINVAL, _PROTECT_SYSTEM_INVALID = -1
} ProtectSystem; } ProtectSystem;
typedef enum ProtectProc { typedef enum ProtectProc {
@ -53,14 +53,14 @@ typedef enum ProtectProc {
PROTECT_PROC_INVISIBLE, /* hidepid=invisible */ PROTECT_PROC_INVISIBLE, /* hidepid=invisible */
PROTECT_PROC_PTRACEABLE, /* hidepid=ptraceable */ PROTECT_PROC_PTRACEABLE, /* hidepid=ptraceable */
_PROTECT_PROC_MAX, _PROTECT_PROC_MAX,
_PROTECT_PROC_INVALID = -EINVAL, _PROTECT_PROC_INVALID = -1,
} ProtectProc; } ProtectProc;
typedef enum ProcSubset { typedef enum ProcSubset {
PROC_SUBSET_ALL, PROC_SUBSET_ALL,
PROC_SUBSET_PID, /* subset=pid */ PROC_SUBSET_PID, /* subset=pid */
_PROC_SUBSET_MAX, _PROC_SUBSET_MAX,
_PROC_SUBSET_INVALID = -EINVAL, _PROC_SUBSET_INVALID = -1,
} ProcSubset; } ProcSubset;
struct NamespaceInfo { struct NamespaceInfo {

View File

@ -13,7 +13,7 @@ typedef enum PathType {
PATH_CHANGED, PATH_CHANGED,
PATH_MODIFIED, PATH_MODIFIED,
_PATH_TYPE_MAX, _PATH_TYPE_MAX,
_PATH_TYPE_INVALID = -EINVAL, _PATH_TYPE_INVALID = -1
} PathType; } PathType;
typedef struct PathSpec { typedef struct PathSpec {
@ -47,7 +47,7 @@ typedef enum PathResult {
PATH_FAILURE_START_LIMIT_HIT, PATH_FAILURE_START_LIMIT_HIT,
PATH_FAILURE_UNIT_START_LIMIT_HIT, PATH_FAILURE_UNIT_START_LIMIT_HIT,
_PATH_RESULT_MAX, _PATH_RESULT_MAX,
_PATH_RESULT_INVALID = -EINVAL, _PATH_RESULT_INVALID = -1
} PathResult; } PathResult;
struct Path { struct Path {

View File

@ -12,7 +12,7 @@ typedef enum ScopeResult {
SCOPE_FAILURE_RESOURCES, SCOPE_FAILURE_RESOURCES,
SCOPE_FAILURE_TIMEOUT, SCOPE_FAILURE_TIMEOUT,
_SCOPE_RESULT_MAX, _SCOPE_RESULT_MAX,
_SCOPE_RESULT_INVALID = -EINVAL, _SCOPE_RESULT_INVALID = -1
} ScopeResult; } ScopeResult;
struct Scope { struct Scope {

View File

@ -2738,7 +2738,7 @@ static int service_deserialize_exec_command(
STATE_EXEC_COMMAND_PATH, STATE_EXEC_COMMAND_PATH,
STATE_EXEC_COMMAND_ARGS, STATE_EXEC_COMMAND_ARGS,
_STATE_EXEC_COMMAND_MAX, _STATE_EXEC_COMMAND_MAX,
_STATE_EXEC_COMMAND_INVALID = -EINVAL, _STATE_EXEC_COMMAND_INVALID = -1,
} state; } state;
assert(s); assert(s);
@ -2762,14 +2762,14 @@ static int service_deserialize_exec_command(
case STATE_EXEC_COMMAND_TYPE: case STATE_EXEC_COMMAND_TYPE:
id = service_exec_command_from_string(arg); id = service_exec_command_from_string(arg);
if (id < 0) if (id < 0)
return id; return -EINVAL;
state = STATE_EXEC_COMMAND_INDEX; state = STATE_EXEC_COMMAND_INDEX;
break; break;
case STATE_EXEC_COMMAND_INDEX: case STATE_EXEC_COMMAND_INDEX:
r = safe_atou(arg, &idx); r = safe_atou(arg, &idx);
if (r < 0) if (r < 0)
return r; return -EINVAL;
state = STATE_EXEC_COMMAND_PATH; state = STATE_EXEC_COMMAND_PATH;
break; break;

View File

@ -20,7 +20,7 @@ typedef enum ServiceRestart {
SERVICE_RESTART_ON_ABORT, SERVICE_RESTART_ON_ABORT,
SERVICE_RESTART_ALWAYS, SERVICE_RESTART_ALWAYS,
_SERVICE_RESTART_MAX, _SERVICE_RESTART_MAX,
_SERVICE_RESTART_INVALID = -EINVAL, _SERVICE_RESTART_INVALID = -1
} ServiceRestart; } ServiceRestart;
typedef enum ServiceType { typedef enum ServiceType {
@ -32,7 +32,7 @@ typedef enum ServiceType {
SERVICE_IDLE, /* much like simple, but delay exec() until all jobs are dispatched. */ SERVICE_IDLE, /* much like simple, but delay exec() until all jobs are dispatched. */
SERVICE_EXEC, /* we fork and wait until we execute exec() (this means our own setup is waited for) */ SERVICE_EXEC, /* we fork and wait until we execute exec() (this means our own setup is waited for) */
_SERVICE_TYPE_MAX, _SERVICE_TYPE_MAX,
_SERVICE_TYPE_INVALID = -EINVAL, _SERVICE_TYPE_INVALID = -1
} ServiceType; } ServiceType;
typedef enum ServiceExecCommand { typedef enum ServiceExecCommand {
@ -44,7 +44,7 @@ typedef enum ServiceExecCommand {
SERVICE_EXEC_STOP, SERVICE_EXEC_STOP,
SERVICE_EXEC_STOP_POST, SERVICE_EXEC_STOP_POST,
_SERVICE_EXEC_COMMAND_MAX, _SERVICE_EXEC_COMMAND_MAX,
_SERVICE_EXEC_COMMAND_INVALID = -EINVAL, _SERVICE_EXEC_COMMAND_INVALID = -1
} ServiceExecCommand; } ServiceExecCommand;
typedef enum NotifyState { typedef enum NotifyState {
@ -53,7 +53,7 @@ typedef enum NotifyState {
NOTIFY_RELOADING, NOTIFY_RELOADING,
NOTIFY_STOPPING, NOTIFY_STOPPING,
_NOTIFY_STATE_MAX, _NOTIFY_STATE_MAX,
_NOTIFY_STATE_INVALID = -EINVAL, _NOTIFY_STATE_INVALID = -1
} NotifyState; } NotifyState;
/* The values of this enum are referenced in man/systemd.exec.xml and src/shared/bus-unit-util.c. /* The values of this enum are referenced in man/systemd.exec.xml and src/shared/bus-unit-util.c.
@ -71,7 +71,7 @@ typedef enum ServiceResult {
SERVICE_FAILURE_OOM_KILL, SERVICE_FAILURE_OOM_KILL,
SERVICE_SKIP_CONDITION, SERVICE_SKIP_CONDITION,
_SERVICE_RESULT_MAX, _SERVICE_RESULT_MAX,
_SERVICE_RESULT_INVALID = -EINVAL, _SERVICE_RESULT_INVALID = -1
} ServiceResult; } ServiceResult;
typedef enum ServiceTimeoutFailureMode { typedef enum ServiceTimeoutFailureMode {
@ -79,7 +79,7 @@ typedef enum ServiceTimeoutFailureMode {
SERVICE_TIMEOUT_ABORT, SERVICE_TIMEOUT_ABORT,
SERVICE_TIMEOUT_KILL, SERVICE_TIMEOUT_KILL,
_SERVICE_TIMEOUT_FAILURE_MODE_MAX, _SERVICE_TIMEOUT_FAILURE_MODE_MAX,
_SERVICE_TIMEOUT_FAILURE_MODE_INVALID = -EINVAL, _SERVICE_TIMEOUT_FAILURE_MODE_INVALID = -1
} ServiceTimeoutFailureMode; } ServiceTimeoutFailureMode;
struct ServiceFDStore { struct ServiceFDStore {

View File

@ -14,7 +14,7 @@ typedef enum ShowStatus {
SHOW_STATUS_TEMPORARY, /* enabled temporarily, may flip back to _AUTO */ SHOW_STATUS_TEMPORARY, /* enabled temporarily, may flip back to _AUTO */
SHOW_STATUS_YES, /* printing of status is enabled */ SHOW_STATUS_YES, /* printing of status is enabled */
_SHOW_STATUS_MAX, _SHOW_STATUS_MAX,
_SHOW_STATUS_INVALID = -EINVAL, _SHOW_STATUS_INVALID = -1,
} ShowStatus; } ShowStatus;
typedef enum ShowStatusFlags { typedef enum ShowStatusFlags {
@ -26,7 +26,7 @@ typedef enum StatusUnitFormat {
STATUS_UNIT_FORMAT_NAME, STATUS_UNIT_FORMAT_NAME,
STATUS_UNIT_FORMAT_DESCRIPTION, STATUS_UNIT_FORMAT_DESCRIPTION,
_STATUS_UNIT_FORMAT_MAX, _STATUS_UNIT_FORMAT_MAX,
_STATUS_UNIT_FORMAT_INVALID = -EINVAL, _STATUS_UNIT_FORMAT_INVALID = -1,
} StatusUnitFormat; } StatusUnitFormat;
static inline bool show_status_on(ShowStatus s) { static inline bool show_status_on(ShowStatus s) {

View File

@ -16,7 +16,7 @@ typedef enum SocketExecCommand {
SOCKET_EXEC_STOP_PRE, SOCKET_EXEC_STOP_PRE,
SOCKET_EXEC_STOP_POST, SOCKET_EXEC_STOP_POST,
_SOCKET_EXEC_COMMAND_MAX, _SOCKET_EXEC_COMMAND_MAX,
_SOCKET_EXEC_COMMAND_INVALID = -EINVAL, _SOCKET_EXEC_COMMAND_INVALID = -1
} SocketExecCommand; } SocketExecCommand;
typedef enum SocketType { typedef enum SocketType {
@ -26,7 +26,7 @@ typedef enum SocketType {
SOCKET_MQUEUE, SOCKET_MQUEUE,
SOCKET_USB_FUNCTION, SOCKET_USB_FUNCTION,
_SOCKET_TYPE_MAX, _SOCKET_TYPE_MAX,
_SOCKET_TYPE_INVALID = -EINVAL, _SOCKET_TYPE_INVALID = -1
} SocketType; } SocketType;
typedef enum SocketResult { typedef enum SocketResult {
@ -40,7 +40,7 @@ typedef enum SocketResult {
SOCKET_FAILURE_TRIGGER_LIMIT_HIT, SOCKET_FAILURE_TRIGGER_LIMIT_HIT,
SOCKET_FAILURE_SERVICE_START_LIMIT_HIT, SOCKET_FAILURE_SERVICE_START_LIMIT_HIT,
_SOCKET_RESULT_MAX, _SOCKET_RESULT_MAX,
_SOCKET_RESULT_INVALID = -EINVAL, _SOCKET_RESULT_INVALID = -1
} SocketResult; } SocketResult;
typedef struct SocketPort { typedef struct SocketPort {
@ -63,7 +63,7 @@ typedef enum SocketTimestamping {
SOCKET_TIMESTAMPING_US, /* SO_TIMESTAMP */ SOCKET_TIMESTAMPING_US, /* SO_TIMESTAMP */
SOCKET_TIMESTAMPING_NS, /* SO_TIMESTAMPNS */ SOCKET_TIMESTAMPING_NS, /* SO_TIMESTAMPNS */
_SOCKET_TIMESTAMPING_MAX, _SOCKET_TIMESTAMPING_MAX,
_SOCKET_TIMESTAMPING_INVALID = -EINVAL, _SOCKET_TIMESTAMPING_INVALID = -1,
} SocketTimestamping; } SocketTimestamping;
struct Socket { struct Socket {

View File

@ -14,7 +14,7 @@ typedef enum SwapExecCommand {
SWAP_EXEC_ACTIVATE, SWAP_EXEC_ACTIVATE,
SWAP_EXEC_DEACTIVATE, SWAP_EXEC_DEACTIVATE,
_SWAP_EXEC_COMMAND_MAX, _SWAP_EXEC_COMMAND_MAX,
_SWAP_EXEC_COMMAND_INVALID = -EINVAL, _SWAP_EXEC_COMMAND_INVALID = -1
} SwapExecCommand; } SwapExecCommand;
typedef enum SwapResult { typedef enum SwapResult {
@ -26,7 +26,7 @@ typedef enum SwapResult {
SWAP_FAILURE_CORE_DUMP, SWAP_FAILURE_CORE_DUMP,
SWAP_FAILURE_START_LIMIT_HIT, SWAP_FAILURE_START_LIMIT_HIT,
_SWAP_RESULT_MAX, _SWAP_RESULT_MAX,
_SWAP_RESULT_INVALID = -EINVAL, _SWAP_RESULT_INVALID = -1
} SwapResult; } SwapResult;
typedef struct SwapParameters { typedef struct SwapParameters {

View File

@ -14,7 +14,7 @@ typedef enum TimerBase {
TIMER_UNIT_INACTIVE, TIMER_UNIT_INACTIVE,
TIMER_CALENDAR, TIMER_CALENDAR,
_TIMER_BASE_MAX, _TIMER_BASE_MAX,
_TIMER_BASE_INVALID = -EINVAL, _TIMER_BASE_INVALID = -1
} TimerBase; } TimerBase;
typedef struct TimerValue { typedef struct TimerValue {
@ -33,7 +33,7 @@ typedef enum TimerResult {
TIMER_FAILURE_RESOURCES, TIMER_FAILURE_RESOURCES,
TIMER_FAILURE_START_LIMIT_HIT, TIMER_FAILURE_START_LIMIT_HIT,
_TIMER_RESULT_MAX, _TIMER_RESULT_MAX,
_TIMER_RESULT_INVALID = -EINVAL, _TIMER_RESULT_INVALID = -1
} TimerResult; } TimerResult;
struct Timer { struct Timer {

View File

@ -6094,7 +6094,7 @@ void unit_log_success(Unit *u) {
"MESSAGE_ID=" SD_MESSAGE_UNIT_SUCCESS_STR, "MESSAGE_ID=" SD_MESSAGE_UNIT_SUCCESS_STR,
LOG_UNIT_ID(u), LOG_UNIT_ID(u),
LOG_UNIT_INVOCATION_ID(u), LOG_UNIT_INVOCATION_ID(u),
LOG_UNIT_MESSAGE(u, "Deactivated successfully.")); LOG_UNIT_MESSAGE(u, "Succeeded."));
} }
void unit_log_failure(Unit *u, const char *result) { void unit_log_failure(Unit *u, const char *result) {

View File

@ -23,14 +23,14 @@ typedef enum KillOperation {
KILL_KILL, KILL_KILL,
KILL_WATCHDOG, KILL_WATCHDOG,
_KILL_OPERATION_MAX, _KILL_OPERATION_MAX,
_KILL_OPERATION_INVALID = -EINVAL, _KILL_OPERATION_INVALID = -1
} KillOperation; } KillOperation;
typedef enum CollectMode { typedef enum CollectMode {
COLLECT_INACTIVE, COLLECT_INACTIVE,
COLLECT_INACTIVE_OR_FAILED, COLLECT_INACTIVE_OR_FAILED,
_COLLECT_MODE_MAX, _COLLECT_MODE_MAX,
_COLLECT_MODE_INVALID = -EINVAL, _COLLECT_MODE_INVALID = -1,
} CollectMode; } CollectMode;
static inline bool UNIT_IS_ACTIVE_OR_RELOADING(UnitActiveState t) { static inline bool UNIT_IS_ACTIVE_OR_RELOADING(UnitActiveState t) {

View File

@ -124,7 +124,7 @@ typedef enum CoredumpStorage {
COREDUMP_STORAGE_EXTERNAL, COREDUMP_STORAGE_EXTERNAL,
COREDUMP_STORAGE_JOURNAL, COREDUMP_STORAGE_JOURNAL,
_COREDUMP_STORAGE_MAX, _COREDUMP_STORAGE_MAX,
_COREDUMP_STORAGE_INVALID = -EINVAL, _COREDUMP_STORAGE_INVALID = -1
} CoredumpStorage; } CoredumpStorage;
static const char* const coredump_storage_table[_COREDUMP_STORAGE_MAX] = { static const char* const coredump_storage_table[_COREDUMP_STORAGE_MAX] = {

View File

@ -16,7 +16,6 @@
#include "compress.h" #include "compress.h"
#include "def.h" #include "def.h"
#include "fd-util.h" #include "fd-util.h"
#include "format-table.h"
#include "fs-util.h" #include "fs-util.h"
#include "glob-util.h" #include "glob-util.h"
#include "journal-internal.h" #include "journal-internal.h"
@ -48,10 +47,9 @@ static const char *arg_debugger = NULL;
static char **arg_debugger_args = NULL; static char **arg_debugger_args = NULL;
static const char *arg_directory = NULL; static const char *arg_directory = NULL;
static char **arg_file = NULL; static char **arg_file = NULL;
static JsonFormatFlags arg_json_format_flags = JSON_FORMAT_OFF;
static PagerFlags arg_pager_flags = 0; static PagerFlags arg_pager_flags = 0;
static int arg_legend = true; static int arg_no_legend = false;
static size_t arg_rows_max = SIZE_MAX; static int arg_one = false;
static const char* arg_output = NULL; static const char* arg_output = NULL;
static bool arg_reverse = false; static bool arg_reverse = false;
static bool arg_quiet = false; static bool arg_quiet = false;
@ -157,23 +155,20 @@ static int help(void) {
if (r < 0) if (r < 0)
return log_oom(); return log_oom();
printf("%1$s [OPTIONS...] COMMAND ...\n\n" printf("%s [OPTIONS...] COMMAND ...\n\n"
"%5$sList or retrieve coredumps from the journal.%6$s\n" "%sList or retrieve coredumps from the journal.%s\n"
"\n%3$sCommands:%4$s\n" "\nCommands:\n"
" list [MATCHES...] List available coredumps (default)\n" " list [MATCHES...] List available coredumps (default)\n"
" info [MATCHES...] Show detailed information about one or more coredumps\n" " info [MATCHES...] Show detailed information about one or more coredumps\n"
" dump [MATCHES...] Print first matching coredump to stdout\n" " dump [MATCHES...] Print first matching coredump to stdout\n"
" debug [MATCHES...] Start a debugger for the first matching coredump\n" " debug [MATCHES...] Start a debugger for the first matching coredump\n"
"\n%3$sOptions:%4$s\n" "\nOptions:\n"
" -h --help Show this help\n" " -h --help Show this help\n"
" --version Print version string\n" " --version Print version string\n"
" --no-pager Do not pipe output into a pager\n" " --no-pager Do not pipe output into a pager\n"
" --no-legend Do not print the column headers\n" " --no-legend Do not print the column headers\n"
" --json=pretty|short|off\n"
" Generate JSON output\n"
" --debugger=DEBUGGER Use the given debugger\n" " --debugger=DEBUGGER Use the given debugger\n"
" -A --debugger-arguments=ARGS Pass the given arguments to the debugger\n" " -A --debugger-arguments=ARGS Pass the given arguments to the debugger\n"
" -n INT Show maximum number of rows\n"
" -1 Show information about most recent entry only\n" " -1 Show information about most recent entry only\n"
" -S --since=DATE Only print coredumps since the date\n" " -S --since=DATE Only print coredumps since the date\n"
" -U --until=DATE Only print coredumps until the date\n" " -U --until=DATE Only print coredumps until the date\n"
@ -183,13 +178,11 @@ static int help(void) {
" --file=PATH Use journal file\n" " --file=PATH Use journal file\n"
" -D --directory=DIR Use journal files from directory\n\n" " -D --directory=DIR Use journal files from directory\n\n"
" -q --quiet Do not show info messages and privilege warning\n" " -q --quiet Do not show info messages and privilege warning\n"
"\nSee the %2$s for details.\n", "\nSee the %s for details.\n",
program_invocation_short_name, program_invocation_short_name,
link,
ansi_underline(),
ansi_normal(),
ansi_highlight(), ansi_highlight(),
ansi_normal()); ansi_normal(),
link);
return 0; return 0;
} }
@ -199,7 +192,6 @@ static int parse_argv(int argc, char *argv[]) {
ARG_VERSION = 0x100, ARG_VERSION = 0x100,
ARG_NO_PAGER, ARG_NO_PAGER,
ARG_NO_LEGEND, ARG_NO_LEGEND,
ARG_JSON,
ARG_DEBUGGER, ARG_DEBUGGER,
ARG_FILE, ARG_FILE,
}; };
@ -221,14 +213,13 @@ static int parse_argv(int argc, char *argv[]) {
{ "since", required_argument, NULL, 'S' }, { "since", required_argument, NULL, 'S' },
{ "until", required_argument, NULL, 'U' }, { "until", required_argument, NULL, 'U' },
{ "quiet", no_argument, NULL, 'q' }, { "quiet", no_argument, NULL, 'q' },
{ "json", required_argument, NULL, ARG_JSON },
{} {}
}; };
assert(argc >= 0); assert(argc >= 0);
assert(argv); assert(argv);
while ((c = getopt_long(argc, argv, "hA:o:F:1D:rS:U:qn:", options, NULL)) >= 0) while ((c = getopt_long(argc, argv, "hA:o:F:1D:rS:U:q", options, NULL)) >= 0)
switch(c) { switch(c) {
case 'h': case 'h':
return help(); return help();
@ -241,7 +232,7 @@ static int parse_argv(int argc, char *argv[]) {
break; break;
case ARG_NO_LEGEND: case ARG_NO_LEGEND:
arg_legend = false; arg_no_legend = true;
break; break;
case ARG_DEBUGGER: case ARG_DEBUGGER:
@ -291,22 +282,9 @@ static int parse_argv(int argc, char *argv[]) {
break; break;
case '1': case '1':
arg_rows_max = 1; arg_one = true;
arg_reverse = true;
break; break;
case 'n': {
unsigned n;
r = safe_atou(optarg, &n);
if (r < 0 || n < 1)
return log_error_errno(r < 0 ? r : SYNTHETIC_ERRNO(EINVAL),
"Invalid numeric parameter to -n: %s", optarg);
arg_rows_max = n;
break;
}
case 'D': case 'D':
arg_directory = optarg; arg_directory = optarg;
break; break;
@ -319,13 +297,6 @@ static int parse_argv(int argc, char *argv[]) {
arg_quiet = true; arg_quiet = true;
break; break;
case ARG_JSON:
r = json_parse_cmdline_parameter_and_warn(optarg, &arg_json_format_flags);
if (r <= 0)
return r;
break;
case '?': case '?':
return -EINVAL; return -EINVAL;
@ -405,78 +376,21 @@ static int print_field(FILE* file, sd_journal *j) {
continue; \ continue; \
} }
static void analyze_coredump_file( static int print_list(FILE* file, sd_journal *j, int had_legend) {
const char *path,
const char **ret_state,
const char **ret_color,
uint64_t *ret_size) {
_cleanup_close_ int fd = -1;
struct stat st;
int r;
assert(path);
assert(ret_state);
assert(ret_color);
assert(ret_size);
fd = open(path, O_PATH|O_CLOEXEC);
if (fd < 0) {
if (errno == ENOENT) {
*ret_state = "missing";
*ret_color = ansi_grey();
*ret_size = UINT64_MAX;
return;
}
r = -errno;
} else
r = access_fd(fd, R_OK);
if (ERRNO_IS_PRIVILEGE(r)) {
*ret_state = "inaccessible";
*ret_color = ansi_highlight_yellow();
*ret_size = UINT64_MAX;
return;
}
if (r < 0)
goto error;
if (fstat(fd, &st) < 0)
goto error;
if (!S_ISREG(st.st_mode))
goto error;
*ret_state = "present";
*ret_color = NULL;
*ret_size = st.st_size;
return;
error:
*ret_state = "error";
*ret_color = ansi_highlight_red();
*ret_size = UINT64_MAX;
}
static int print_list(FILE* file, sd_journal *j, Table *t) {
_cleanup_free_ char _cleanup_free_ char
*mid = NULL, *pid = NULL, *uid = NULL, *gid = NULL, *mid = NULL, *pid = NULL, *uid = NULL, *gid = NULL,
*sgnl = NULL, *exe = NULL, *comm = NULL, *cmdline = NULL, *sgnl = NULL, *exe = NULL, *comm = NULL, *cmdline = NULL,
*filename = NULL, *truncated = NULL, *coredump = NULL; *filename = NULL, *truncated = NULL, *coredump = NULL;
const void *d; const void *d;
size_t l; size_t l;
usec_t ts; usec_t t;
int r, signal_as_int = 0; char buf[FORMAT_TIMESTAMP_MAX];
const char *present = NULL, *color = NULL; int r;
uint64_t size = UINT64_MAX; const char *present;
bool normal_coredump; bool normal_coredump;
uid_t uid_as_int = UID_INVALID;
gid_t gid_as_int = GID_INVALID;
pid_t pid_as_int = 0;
assert(file); assert(file);
assert(j); assert(j);
assert(t);
SD_JOURNAL_FOREACH_DATA(j, d, l) { SD_JOURNAL_FOREACH_DATA(j, d, l) {
RETRIEVE(d, l, "MESSAGE_ID", mid); RETRIEVE(d, l, "MESSAGE_ID", mid);
@ -492,46 +406,54 @@ static int print_list(FILE* file, sd_journal *j, Table *t) {
RETRIEVE(d, l, "COREDUMP", coredump); RETRIEVE(d, l, "COREDUMP", coredump);
} }
if (!pid && !uid && !gid && !sgnl && !exe && !comm && !cmdline && !filename) if (!pid && !uid && !gid && !sgnl && !exe && !comm && !cmdline && !filename) {
return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), "Empty coredump log entry"); log_warning("Empty coredump log entry");
return -EINVAL;
}
(void) parse_uid(uid, &uid_as_int); r = sd_journal_get_realtime_usec(j, &t);
(void) parse_gid(gid, &gid_as_int);
(void) parse_pid(pid, &pid_as_int);
signal_as_int = signal_from_string(sgnl);
r = sd_journal_get_realtime_usec(j, &ts);
if (r < 0) if (r < 0)
return log_error_errno(r, "Failed to get realtime timestamp: %m"); return log_error_errno(r, "Failed to get realtime timestamp: %m");
format_timestamp(buf, sizeof(buf), t);
if (!had_legend && !arg_no_legend)
fprintf(file, "%-*s %*s %*s %*s %*s %-*s %s\n",
FORMAT_TIMESTAMP_WIDTH, "TIME",
6, "PID",
5, "UID",
5, "GID",
3, "SIG",
9, "COREFILE",
"EXE");
normal_coredump = streq_ptr(mid, SD_MESSAGE_COREDUMP_STR); normal_coredump = streq_ptr(mid, SD_MESSAGE_COREDUMP_STR);
if (filename) if (filename)
analyze_coredump_file(filename, &present, &color, &size); if (access(filename, R_OK) == 0)
present = "present";
else if (errno == ENOENT)
present = "missing";
else
present = "error";
else if (coredump) else if (coredump)
present = "journal"; present = "journal";
else if (normal_coredump) { else if (normal_coredump)
present = "none"; present = "none";
color = ansi_grey(); else
} else present = "-";
present = NULL;
if (STRPTR_IN_SET(present, "present", "journal") && truncated && parse_boolean(truncated) > 0) if (STR_IN_SET(present, "present", "journal") && truncated && parse_boolean(truncated) > 0)
present = "truncated"; present = "truncated";
r = table_add_many( fprintf(file, "%-*s %*s %*s %*s %*s %-*s %s\n",
t, FORMAT_TIMESTAMP_WIDTH, buf,
TABLE_TIMESTAMP, ts, 6, strna(pid),
TABLE_PID, pid_as_int, 5, strna(uid),
TABLE_UID, uid_as_int, 5, strna(gid),
TABLE_GID, gid_as_int, 3, normal_coredump ? strna(sgnl) : "-",
TABLE_SIGNAL, normal_coredump ? signal_as_int : 0, 9, present,
TABLE_STRING, present, strna(exe ?: (comm ?: cmdline)));
TABLE_SET_COLOR, color,
TABLE_STRING, exe ?: comm ?: cmdline,
TABLE_SIZE, size);
if (r < 0)
return table_log_add_error(r);
return 0; return 0;
} }
@ -690,27 +612,24 @@ static int print_info(FILE *file, sd_journal *j, bool need_space) {
fprintf(file, " Hostname: %s\n", hostname); fprintf(file, " Hostname: %s\n", hostname);
if (filename) { if (filename) {
const char *state = NULL, *color = NULL; bool inacc, trunc;
uint64_t size = UINT64_MAX;
char buf[FORMAT_BYTES_MAX];
analyze_coredump_file(filename, &state, &color, &size); inacc = access(filename, R_OK) < 0;
trunc = truncated && parse_boolean(truncated) > 0;
if (STRPTR_IN_SET(state, "present", "journal") && truncated && parse_boolean(truncated) > 0) if (inacc || trunc)
state = "truncated"; fprintf(file, " Storage: %s%s (%s%s%s)%s\n",
ansi_highlight_red(),
filename,
inacc ? "inaccessible" : "",
inacc && trunc ? ", " : "",
trunc ? "truncated" : "",
ansi_normal());
else
fprintf(file, " Storage: %s\n", filename);
}
fprintf(file, else if (coredump)
" Storage: %s%s (%s)%s\n",
strempty(color),
filename,
state,
ansi_normal());
if (size != UINT64_MAX)
fprintf(file,
" Disk Size: %s\n",
format_bytes(buf, sizeof(buf), size));
} else if (coredump)
fprintf(file, " Storage: journal\n"); fprintf(file, " Storage: journal\n");
else else
fprintf(file, " Storage: none\n"); fprintf(file, " Storage: none\n");
@ -740,61 +659,43 @@ static int focus(sd_journal *j) {
return r; return r;
} }
static int print_entry( static int print_entry(sd_journal *j, unsigned n_found, bool verb_is_info) {
sd_journal *j,
size_t n_found,
Table *t) {
assert(j); assert(j);
if (t) if (verb_is_info)
return print_list(stdout, j, t); return print_info(stdout, j, n_found);
else if (arg_field) else if (arg_field)
return print_field(stdout, j); return print_field(stdout, j);
else else
return print_info(stdout, j, n_found > 0); return print_list(stdout, j, n_found);
} }
static int dump_list(int argc, char **argv, void *userdata) { static int dump_list(int argc, char **argv, void *userdata) {
_cleanup_(sd_journal_closep) sd_journal *j = NULL; _cleanup_(sd_journal_closep) sd_journal *j = NULL;
_cleanup_(table_unrefp) Table *t = NULL; unsigned n_found = 0;
size_t n_found = 0;
bool verb_is_info; bool verb_is_info;
int r; int r;
verb_is_info = argc >= 1 && streq(argv[0], "info"); verb_is_info = (argc >= 1 && streq(argv[0], "info"));
r = acquire_journal(&j, argv + 1); r = acquire_journal(&j, argv + 1);
if (r < 0) if (r < 0)
return r; return r;
/* The coredumps are likely compressed, and for just listing them we don't need to decompress them, (void) pager_open(arg_pager_flags);
* so let's pick a fairly low data threshold here */
(void) sd_journal_set_data_threshold(j, 4096);
if (!verb_is_info && !arg_field) { /* The coredumps are likely to compressed, and for just
t = table_new("time", "pid", "uid", "gid", "sig", "corefile", "exe", "size"); * listing them we don't need to decompress them, so let's
if (!t) * pick a fairly low data threshold here */
return log_oom(); sd_journal_set_data_threshold(j, 4096);
(void) table_set_align_percent(t, TABLE_HEADER_CELL(1), 100);
(void) table_set_align_percent(t, TABLE_HEADER_CELL(2), 100);
(void) table_set_align_percent(t, TABLE_HEADER_CELL(3), 100);
(void) table_set_align_percent(t, TABLE_HEADER_CELL(7), 100);
(void) table_set_empty_string(t, "-");
} else
(void) pager_open(arg_pager_flags);
/* "info" without pattern implies "-1" */ /* "info" without pattern implies "-1" */
if ((arg_rows_max == 1 && arg_reverse) || (verb_is_info && argc == 1)) { if (arg_one || (verb_is_info && argc == 1)) {
r = focus(j); r = focus(j);
if (r < 0) if (r < 0)
return r; return r;
r = print_entry(j, 0, t); return print_entry(j, 0, verb_is_info);
if (r < 0)
return r;
} else { } else {
if (arg_since != USEC_INFINITY && !arg_reverse) if (arg_since != USEC_INFINITY && !arg_reverse)
r = sd_journal_seek_realtime_usec(j, arg_since); r = sd_journal_seek_realtime_usec(j, arg_since);
@ -812,8 +713,10 @@ static int dump_list(int argc, char **argv, void *userdata) {
r = sd_journal_next(j); r = sd_journal_next(j);
else else
r = sd_journal_previous(j); r = sd_journal_previous(j);
if (r < 0) if (r < 0)
return log_error_errno(r, "Failed to iterate through journal: %m"); return log_error_errno(r, "Failed to iterate through journal: %m");
if (r == 0) if (r == 0)
break; break;
@ -837,12 +740,9 @@ static int dump_list(int argc, char **argv, void *userdata) {
continue; continue;
} }
r = print_entry(j, n_found++, t); r = print_entry(j, n_found++, verb_is_info);
if (r < 0) if (r < 0)
return r; return r;
if (arg_rows_max != SIZE_MAX && n_found >= arg_rows_max)
break;
} }
if (!arg_field && n_found <= 0) { if (!arg_field && n_found <= 0) {
@ -852,12 +752,6 @@ static int dump_list(int argc, char **argv, void *userdata) {
} }
} }
if (t) {
r = table_print_with_pager(t, arg_json_format_flags, arg_pager_flags, arg_legend);
if (r < 0)
return r;
}
return 0; return 0;
} }

View File

@ -1,8 +1,6 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */ /* SPDX-License-Identifier: LGPL-2.1-or-later */
#pragma once #pragma once
#include <errno.h>
typedef enum EnrollType { typedef enum EnrollType {
ENROLL_PASSWORD, ENROLL_PASSWORD,
ENROLL_RECOVERY, ENROLL_RECOVERY,
@ -10,7 +8,7 @@ typedef enum EnrollType {
ENROLL_FIDO2, ENROLL_FIDO2,
ENROLL_TPM2, ENROLL_TPM2,
_ENROLL_TYPE_MAX, _ENROLL_TYPE_MAX,
_ENROLL_TYPE_INVALID = -EINVAL, _ENROLL_TYPE_INVALID = -1,
} EnrollType; } EnrollType;
typedef enum WipeScope { typedef enum WipeScope {
@ -18,7 +16,7 @@ typedef enum WipeScope {
WIPE_ALL, /* wipe all slots */ WIPE_ALL, /* wipe all slots */
WIPE_EMPTY_PASSPHRASE, /* wipe slots with empty passphrases plus listed slots */ WIPE_EMPTY_PASSPHRASE, /* wipe slots with empty passphrases plus listed slots */
_WIPE_SCOPE_MAX, _WIPE_SCOPE_MAX,
_WIPE_SCOPE_INVALID = -EINVAL, _WIPE_SCOPE_INVALID = -1,
} WipeScope; } WipeScope;
const char* enroll_type_to_string(EnrollType t); const char* enroll_type_to_string(EnrollType t);

View File

@ -82,16 +82,17 @@ static int parse_argv(int argc, char *argv[]) {
case ARG_VERSION: case ARG_VERSION:
return version(); return version();
case ARG_SUFFIX: { case ARG_SUFFIX:
UnitType t = unit_type_from_string(optarg);
if (t < 0) if (unit_type_from_string(optarg) < 0)
return log_error_errno(t, "Invalid unit suffix type \"%s\".", optarg); return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Invalid unit suffix type %s.", optarg);
arg_suffix = optarg; arg_suffix = optarg;
break; break;
}
case ARG_TEMPLATE: case ARG_TEMPLATE:
if (!unit_name_is_valid(optarg, UNIT_NAME_TEMPLATE)) if (!unit_name_is_valid(optarg, UNIT_NAME_TEMPLATE))
return log_error_errno(SYNTHETIC_ERRNO(EINVAL), return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Template name %s is not valid.", optarg); "Template name %s is not valid.", optarg);

View File

@ -888,7 +888,7 @@ static int parse_proc_cmdline_item(const char *key, const char *value, void *dat
if (value) { if (value) {
m = volatile_mode_from_string(value); m = volatile_mode_from_string(value);
if (m < 0) if (m < 0)
log_warning_errno(m, "Failed to parse systemd.volatile= argument: %s", value); log_warning("Failed to parse systemd.volatile= argument: %s", value);
else else
arg_volatile_mode = m; arg_volatile_mode = m;
} else } else

View File

@ -2393,7 +2393,7 @@ static int parse_argv(int argc, char *argv[]) {
l = rlimit_from_string_harder(field); l = rlimit_from_string_harder(field);
if (l < 0) if (l < 0)
return log_error_errno(l, "Unknown resource limit type: %s", field); return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unknown resource limit type: %s", field);
if (isempty(eq + 1)) { if (isempty(eq + 1)) {
/* Remove only the specific rlimit */ /* Remove only the specific rlimit */

View File

@ -37,7 +37,7 @@ typedef enum HomeState {
HOME_AUTHENTICATING_WHILE_ACTIVE, HOME_AUTHENTICATING_WHILE_ACTIVE,
HOME_AUTHENTICATING_FOR_ACQUIRE, /* authenticating because Acquire() was called */ HOME_AUTHENTICATING_FOR_ACQUIRE, /* authenticating because Acquire() was called */
_HOME_STATE_MAX, _HOME_STATE_MAX,
_HOME_STATE_INVALID = -EINVAL, _HOME_STATE_INVALID = -1
} HomeState; } HomeState;
static inline bool HOME_STATE_IS_ACTIVE(HomeState state) { static inline bool HOME_STATE_IS_ACTIVE(HomeState state) {

View File

@ -14,7 +14,7 @@ typedef enum OperationType {
OPERATION_DEACTIVATE_FORCE, /* enqueued on hard $HOME unplug */ OPERATION_DEACTIVATE_FORCE, /* enqueued on hard $HOME unplug */
OPERATION_IMMEDIATE, /* this is never enqueued, it's just a marker we immediately started executing an operation without enqueuing anything first. */ OPERATION_IMMEDIATE, /* this is never enqueued, it's just a marker we immediately started executing an operation without enqueuing anything first. */
_OPERATION_MAX, _OPERATION_MAX,
_OPERATION_INVALID = -EINVAL, _OPERATION_INVALID = -1,
} OperationType; } OperationType;
/* Encapsulates an operation on one or more home directories. This has two uses: /* Encapsulates an operation on one or more home directories. This has two uses:

View File

@ -14,7 +14,7 @@ typedef enum UserReconcileMode {
USER_RECONCILE_REQUIRE_NEWER, /* host version must be newer than embedded version */ USER_RECONCILE_REQUIRE_NEWER, /* host version must be newer than embedded version */
USER_RECONCILE_REQUIRE_NEWER_OR_EQUAL, /* similar, but may also be equal */ USER_RECONCILE_REQUIRE_NEWER_OR_EQUAL, /* similar, but may also be equal */
_USER_RECONCILE_MODE_MAX, _USER_RECONCILE_MODE_MAX,
_USER_RECONCILE_MODE_INVALID = -EINVAL, _USER_RECONCILE_MODE_INVALID = -1,
} UserReconcileMode; } UserReconcileMode;
enum { /* return values */ enum { /* return values */

View File

@ -59,7 +59,7 @@ enum {
PROP_OS_CPE_NAME, PROP_OS_CPE_NAME,
PROP_OS_HOME_URL, PROP_OS_HOME_URL,
_PROP_MAX, _PROP_MAX,
_PROP_INVALID = -EINVAL, _PROP_INVALID = -1,
}; };
typedef struct Context { typedef struct Context {

View File

@ -17,7 +17,7 @@ typedef enum ImportCompressType {
IMPORT_COMPRESS_GZIP, IMPORT_COMPRESS_GZIP,
IMPORT_COMPRESS_BZIP2, IMPORT_COMPRESS_BZIP2,
_IMPORT_COMPRESS_TYPE_MAX, _IMPORT_COMPRESS_TYPE_MAX,
_IMPORT_COMPRESS_TYPE_INVALID = -EINVAL, _IMPORT_COMPRESS_TYPE_INVALID = -1,
} ImportCompressType; } ImportCompressType;
typedef struct ImportCompress { typedef struct ImportCompress {

View File

@ -46,7 +46,7 @@ typedef enum TransferType {
TRANSFER_PULL_TAR, TRANSFER_PULL_TAR,
TRANSFER_PULL_RAW, TRANSFER_PULL_RAW,
_TRANSFER_TYPE_MAX, _TRANSFER_TYPE_MAX,
_TRANSFER_TYPE_INVALID = -EINVAL, _TRANSFER_TYPE_INVALID = -1,
} TransferType; } TransferType;
struct Transfer { struct Transfer {

View File

@ -33,7 +33,7 @@ typedef enum VerificationStyle {
VERIFICATION_PER_FILE, /* SuSE-style ".sha256" files with inline gpg signature */ VERIFICATION_PER_FILE, /* SuSE-style ".sha256" files with inline gpg signature */
VERIFICATION_PER_DIRECTORY, /* Ubuntu-style SHA256SUM files with detached SHA256SUM.gpg signatures */ VERIFICATION_PER_DIRECTORY, /* Ubuntu-style SHA256SUM files with detached SHA256SUM.gpg signatures */
_VERIFICATION_STYLE_MAX, _VERIFICATION_STYLE_MAX,
_VERIFICATION_STYLE_INVALID = -EINVAL, _VERIFICATION_STYLE_INVALID = -1,
} VerificationStyle; } VerificationStyle;
int verification_style_from_url(const char *url, VerificationStyle *style); int verification_style_from_url(const char *url, VerificationStyle *style);

View File

@ -22,7 +22,7 @@ typedef enum PullJobState {
PULL_JOB_DONE, PULL_JOB_DONE,
PULL_JOB_FAILED, PULL_JOB_FAILED,
_PULL_JOB_STATE_MAX, _PULL_JOB_STATE_MAX,
_PULL_JOB_STATE_INVALID = -EINVAL, _PULL_JOB_STATE_INVALID = -1,
} PullJobState; } PullJobState;
#define PULL_JOB_IS_COMPLETE(j) (IN_SET((j)->state, PULL_JOB_DONE, PULL_JOB_FAILED)) #define PULL_JOB_IS_COMPLETE(j) (IN_SET((j)->state, PULL_JOB_DONE, PULL_JOB_FAILED))

View File

@ -961,14 +961,16 @@ static int parse_argv(int argc, char *argv[]) {
case ARG_SPLIT_MODE: case ARG_SPLIT_MODE:
arg_split_mode = journal_write_split_mode_from_string(optarg); arg_split_mode = journal_write_split_mode_from_string(optarg);
if (arg_split_mode == _JOURNAL_WRITE_SPLIT_INVALID) if (arg_split_mode == _JOURNAL_WRITE_SPLIT_INVALID)
return log_error_errno(arg_split_mode, "Invalid split mode: %s", optarg); return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Invalid split mode: %s", optarg);
break; break;
case ARG_COMPRESS: case ARG_COMPRESS:
if (optarg) { if (optarg) {
r = parse_boolean(optarg); r = parse_boolean(optarg);
if (r < 0) if (r < 0)
return log_error_errno(r, "Failed to parse --compress= parameter."); return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Failed to parse --compress= parameter.");
arg_compress = !!r; arg_compress = !!r;
} else } else

View File

@ -36,5 +36,5 @@ typedef enum JournalWriteSplitMode {
JOURNAL_WRITE_SPLIT_NONE, JOURNAL_WRITE_SPLIT_NONE,
JOURNAL_WRITE_SPLIT_HOST, JOURNAL_WRITE_SPLIT_HOST,
_JOURNAL_WRITE_SPLIT_MAX, _JOURNAL_WRITE_SPLIT_MAX,
_JOURNAL_WRITE_SPLIT_INVALID = -EINVAL, _JOURNAL_WRITE_SPLIT_INVALID = -1
} JournalWriteSplitMode; } JournalWriteSplitMode;

View File

@ -413,7 +413,7 @@ static int setup_uploader(Uploader *u, const char *url, const char *state_file)
assert(url); assert(url);
*u = (Uploader) { *u = (Uploader) {
.input = -1, .input = -1
}; };
host = STARTSWITH_SET(url, "http://", "https://"); host = STARTSWITH_SET(url, "http://", "https://");

View File

@ -565,7 +565,7 @@ static int parse_argv(int argc, char *argv[]) {
arg_output = output_mode_from_string(optarg); arg_output = output_mode_from_string(optarg);
if (arg_output < 0) if (arg_output < 0)
return log_error_errno(arg_output, "Unknown output format '%s'.", optarg); return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unknown output format '%s'.", optarg);
if (IN_SET(arg_output, OUTPUT_EXPORT, OUTPUT_JSON, OUTPUT_JSON_PRETTY, OUTPUT_JSON_SSE, OUTPUT_JSON_SEQ, OUTPUT_CAT)) if (IN_SET(arg_output, OUTPUT_EXPORT, OUTPUT_JSON, OUTPUT_JSON_PRETTY, OUTPUT_JSON_SSE, OUTPUT_JSON_SEQ, OUTPUT_CAT))
arg_quiet = true; arg_quiet = true;
@ -835,7 +835,7 @@ static int parse_argv(int argc, char *argv[]) {
to = log_level_from_string(dots + 2); to = log_level_from_string(dots + 2);
if (from < 0 || to < 0) if (from < 0 || to < 0)
return log_error_errno(from < 0 ? from : to, return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Failed to parse log level range %s", optarg); "Failed to parse log level range %s", optarg);
arg_priorities = 0; arg_priorities = 0;
@ -853,7 +853,8 @@ static int parse_argv(int argc, char *argv[]) {
p = log_level_from_string(optarg); p = log_level_from_string(optarg);
if (p < 0) if (p < 0)
return log_error_errno(p, "Unknown log level %s", optarg); return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Unknown log level %s", optarg);
arg_priorities = 0; arg_priorities = 0;
@ -884,7 +885,8 @@ static int parse_argv(int argc, char *argv[]) {
num = log_facility_unshifted_from_string(fac); num = log_facility_unshifted_from_string(fac);
if (num < 0) if (num < 0)
return log_error_errno(num, "Bad --facility= argument \"%s\".", fac); return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Bad --facility= argument \"%s\".", fac);
if (set_ensure_put(&arg_facilities, NULL, INT_TO_PTR(num)) < 0) if (set_ensure_put(&arg_facilities, NULL, INT_TO_PTR(num)) < 0)
return log_oom(); return log_oom();

View File

@ -368,7 +368,7 @@ static int client_context_read_log_level_max(
ll = log_level_from_string(value); ll = log_level_from_string(value);
if (ll < 0) if (ll < 0)
return ll; return -EINVAL;
c->log_level_max = ll; c->log_level_max = ll;
return 0; return 0;

View File

@ -25,7 +25,7 @@ typedef enum Storage {
STORAGE_PERSISTENT, STORAGE_PERSISTENT,
STORAGE_NONE, STORAGE_NONE,
_STORAGE_MAX, _STORAGE_MAX,
_STORAGE_INVALID = -EINVAL, _STORAGE_INVALID = -1
} Storage; } Storage;
typedef enum SplitMode { typedef enum SplitMode {
@ -33,7 +33,7 @@ typedef enum SplitMode {
SPLIT_LOGIN, /* deprecated */ SPLIT_LOGIN, /* deprecated */
SPLIT_NONE, SPLIT_NONE,
_SPLIT_MAX, _SPLIT_MAX,
_SPLIT_INVALID = -EINVAL, _SPLIT_INVALID = -1
} SplitMode; } SplitMode;
typedef struct JournalCompressOptions { typedef struct JournalCompressOptions {

View File

@ -60,7 +60,7 @@ typedef enum LineBreak {
LINE_BREAK_EOF, LINE_BREAK_EOF,
LINE_BREAK_PID_CHANGE, LINE_BREAK_PID_CHANGE,
_LINE_BREAK_MAX, _LINE_BREAK_MAX,
_LINE_BREAK_INVALID = -EINVAL, _LINE_BREAK_INVALID = -1,
} LineBreak; } LineBreak;
struct StdoutStream { struct StdoutStream {

View File

@ -46,7 +46,7 @@ typedef enum IPv4ACDState {
IPV4ACD_STATE_ANNOUNCING, IPV4ACD_STATE_ANNOUNCING,
IPV4ACD_STATE_RUNNING, IPV4ACD_STATE_RUNNING,
_IPV4ACD_STATE_MAX, _IPV4ACD_STATE_MAX,
_IPV4ACD_STATE_INVALID = -EINVAL, _IPV4ACD_STATE_INVALID = -1
} IPv4ACDState; } IPv4ACDState;
struct sd_ipv4acd { struct sd_ipv4acd {

View File

@ -122,22 +122,22 @@ typedef enum BusSlotType {
BUS_NODE_ENUMERATOR, BUS_NODE_ENUMERATOR,
BUS_NODE_VTABLE, BUS_NODE_VTABLE,
BUS_NODE_OBJECT_MANAGER, BUS_NODE_OBJECT_MANAGER,
_BUS_SLOT_INVALID = -EINVAL, _BUS_SLOT_INVALID = -1,
} BusSlotType; } BusSlotType;
struct sd_bus_slot { struct sd_bus_slot {
unsigned n_ref; unsigned n_ref;
BusSlotType type:8; BusSlotType type:5;
/* Slots can be "floating" or not. If they are not floating (the usual case) then they reference the /* Slots can be "floating" or not. If they are not floating (the usual case) then they reference the bus object
* bus object they are associated with. This means the bus object stays allocated at least as long as * they are associated with. This means the bus object stays allocated at least as long as there is a slot
* there is a slot around associated with it. If it is floating, then the slot's lifecycle is bound * around associated with it. If it is floating, then the slot's lifecycle is bound to the lifecycle of the
* to the lifecycle of the bus: it will be disconnected from the bus when the bus is destroyed, and * bus: it will be disconnected from the bus when the bus is destroyed, and it keeping the slot reffed hence
* it keeping the slot reffed hence won't mean the bus stays reffed too. Internally this means the * won't mean the bus stays reffed too. Internally this means the reference direction is reversed: floating
* reference direction is reversed: floating slots objects are referenced by the bus object, and not * slots objects are referenced by the bus object, and not vice versa. */
* vice versa. */ bool floating:1;
bool floating;
bool match_added; bool match_added:1;
sd_bus *bus; sd_bus *bus;
void *userdata; void *userdata;

View File

@ -27,7 +27,7 @@ enum bus_match_node_type {
BUS_MATCH_ARG_HAS, BUS_MATCH_ARG_HAS,
BUS_MATCH_ARG_HAS_LAST = BUS_MATCH_ARG_HAS + 63, BUS_MATCH_ARG_HAS_LAST = BUS_MATCH_ARG_HAS + 63,
_BUS_MATCH_NODE_TYPE_MAX, _BUS_MATCH_NODE_TYPE_MAX,
_BUS_MATCH_NODE_TYPE_INVALID = -EINVAL, _BUS_MATCH_NODE_TYPE_INVALID = -1
}; };
struct bus_match_node { struct bus_match_node {

View File

@ -15,7 +15,7 @@ static void test_error(void) {
const sd_bus_error temporarily_const_error = { const sd_bus_error temporarily_const_error = {
.name = SD_BUS_ERROR_ACCESS_DENIED, .name = SD_BUS_ERROR_ACCESS_DENIED,
.message = "oh! no", .message = "oh! no",
._need_free = -1, ._need_free = -1
}; };
assert_se(!sd_bus_error_is_set(&error)); assert_se(!sd_bus_error_is_set(&error));

View File

@ -21,7 +21,7 @@ typedef enum DeviceEnumerationType {
DEVICE_ENUMERATION_TYPE_DEVICES, DEVICE_ENUMERATION_TYPE_DEVICES,
DEVICE_ENUMERATION_TYPE_SUBSYSTEMS, DEVICE_ENUMERATION_TYPE_SUBSYSTEMS,
_DEVICE_ENUMERATION_TYPE_MAX, _DEVICE_ENUMERATION_TYPE_MAX,
_DEVICE_ENUMERATION_TYPE_INVALID = -EINVAL, _DEVICE_ENUMERATION_TYPE_INVALID = -1,
} DeviceEnumerationType; } DeviceEnumerationType;
struct sd_device_enumerator { struct sd_device_enumerator {

View File

@ -1,8 +1,6 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */ /* SPDX-License-Identifier: LGPL-2.1-or-later */
#pragma once #pragma once
#include <errno.h>
#include "sd-device.h" #include "sd-device.h"
typedef enum MonitorNetlinkGroup { typedef enum MonitorNetlinkGroup {
@ -10,7 +8,7 @@ typedef enum MonitorNetlinkGroup {
MONITOR_GROUP_KERNEL, MONITOR_GROUP_KERNEL,
MONITOR_GROUP_UDEV, MONITOR_GROUP_UDEV,
_MONITOR_NETLINK_GROUP_MAX, _MONITOR_NETLINK_GROUP_MAX,
_MONITOR_NETLINK_GROUP_INVALID = -EINVAL, _MONITOR_NETLINK_GROUP_INVALID = -1,
} MonitorNetlinkGroup; } MonitorNetlinkGroup;
int device_monitor_new_full(sd_device_monitor **ret, MonitorNetlinkGroup group, int fd); int device_monitor_new_full(sd_device_monitor **ret, MonitorNetlinkGroup group, int fd);

View File

@ -204,7 +204,7 @@ static int device_set_action(sd_device *device, const char *action) {
a = device_action_from_string(action); a = device_action_from_string(action);
if (a < 0) if (a < 0)
return a; return -EINVAL;
r = device_add_property_internal(device, "ACTION", action); r = device_add_property_internal(device, "ACTION", action);
if (r < 0) if (r < 0)

View File

@ -20,7 +20,7 @@ typedef enum DeviceAction {
DEVICE_ACTION_BIND, DEVICE_ACTION_BIND,
DEVICE_ACTION_UNBIND, DEVICE_ACTION_UNBIND,
_DEVICE_ACTION_MAX, _DEVICE_ACTION_MAX,
_DEVICE_ACTION_INVALID = -EINVAL, _DEVICE_ACTION_INVALID = -1,
} DeviceAction; } DeviceAction;
int device_new_from_nulstr(sd_device **ret, uint8_t *nulstr, size_t len); int device_new_from_nulstr(sd_device **ret, uint8_t *nulstr, size_t len);

View File

@ -28,7 +28,7 @@ typedef enum EventSourceType {
SOURCE_WATCHDOG, SOURCE_WATCHDOG,
SOURCE_INOTIFY, SOURCE_INOTIFY,
_SOURCE_EVENT_SOURCE_TYPE_MAX, _SOURCE_EVENT_SOURCE_TYPE_MAX,
_SOURCE_EVENT_SOURCE_TYPE_INVALID = -EINVAL, _SOURCE_EVENT_SOURCE_TYPE_INVALID = -1
} EventSourceType; } EventSourceType;
/* All objects we use in epoll events start with this value, so that /* All objects we use in epoll events start with this value, so that
@ -40,7 +40,7 @@ typedef enum WakeupType {
WAKEUP_SIGNAL_DATA, WAKEUP_SIGNAL_DATA,
WAKEUP_INOTIFY_DATA, WAKEUP_INOTIFY_DATA,
_WAKEUP_TYPE_MAX, _WAKEUP_TYPE_MAX,
_WAKEUP_TYPE_INVALID = -EINVAL, _WAKEUP_TYPE_INVALID = -1,
} WakeupType; } WakeupType;
struct inode_data; struct inode_data;
@ -56,7 +56,7 @@ struct sd_event_source {
char *description; char *description;
EventSourceType type; EventSourceType type:5;
signed int enabled:3; signed int enabled:3;
bool pending:1; bool pending:1;
bool dispatching:1; bool dispatching:1;

View File

@ -33,17 +33,17 @@ struct match_callback {
typedef enum NetlinkSlotType { typedef enum NetlinkSlotType {
NETLINK_REPLY_CALLBACK, NETLINK_REPLY_CALLBACK,
NETLINK_MATCH_CALLBACK, NETLINK_MATCH_CALLBACK,
_NETLINK_SLOT_INVALID = -EINVAL, _NETLINK_SLOT_INVALID = -1,
} NetlinkSlotType; } NetlinkSlotType;
struct sd_netlink_slot { struct sd_netlink_slot {
unsigned n_ref; unsigned n_ref;
NetlinkSlotType type:8;
bool floating;
sd_netlink *netlink; sd_netlink *netlink;
void *userdata; void *userdata;
sd_netlink_destroy_t destroy_callback; sd_netlink_destroy_t destroy_callback;
NetlinkSlotType type:2;
bool floating:1;
char *description; char *description;
LIST_FIELDS(sd_netlink_slot, slots); LIST_FIELDS(sd_netlink_slot, slots);

View File

@ -93,7 +93,7 @@ typedef enum NLUnionLinkInfoData {
NL_UNION_LINK_INFO_DATA_IFB, NL_UNION_LINK_INFO_DATA_IFB,
NL_UNION_LINK_INFO_DATA_BAREUDP, NL_UNION_LINK_INFO_DATA_BAREUDP,
_NL_UNION_LINK_INFO_DATA_MAX, _NL_UNION_LINK_INFO_DATA_MAX,
_NL_UNION_LINK_INFO_DATA_INVALID = -EINVAL, _NL_UNION_LINK_INFO_DATA_INVALID = -1
} NLUnionLinkInfoData; } NLUnionLinkInfoData;
const char *nl_union_link_info_data_to_string(NLUnionLinkInfoData p) _const_; const char *nl_union_link_info_data_to_string(NLUnionLinkInfoData p) _const_;
@ -115,7 +115,7 @@ typedef enum NLUnionTCAOptionData {
NL_UNION_TCA_OPTION_DATA_SFB, NL_UNION_TCA_OPTION_DATA_SFB,
NL_UNION_TCA_OPTION_DATA_TBF, NL_UNION_TCA_OPTION_DATA_TBF,
_NL_UNION_TCA_OPTION_DATA_MAX, _NL_UNION_TCA_OPTION_DATA_MAX,
_NL_UNION_TCA_OPTION_DATA_INVALID = -EINVAL, _NL_UNION_TCA_OPTION_DATA_INVALID = -1,
} NLUnionTCAOptionData; } NLUnionTCAOptionData;
const char *nl_union_tca_option_data_to_string(NLUnionTCAOptionData p) _const_; const char *nl_union_tca_option_data_to_string(NLUnionTCAOptionData p) _const_;
@ -131,7 +131,7 @@ typedef enum NLUnionNFTExprData {
NL_UNION_NFT_EXPR_DATA_META, NL_UNION_NFT_EXPR_DATA_META,
NL_UNION_NFT_EXPR_DATA_NAT, NL_UNION_NFT_EXPR_DATA_NAT,
_NL_UNION_NFT_EXPR_DATA_MAX, _NL_UNION_NFT_EXPR_DATA_MAX,
_NL_UNION_NFT_EXPR_DATA_INVALID = -EINVAL, _NL_UNION_NFT_EXPR_DATA_INVALID = -1,
} NLUnionNFTExprData; } NLUnionNFTExprData;
const char *nl_union_nft_expr_data_to_string(NLUnionNFTExprData p) _const_; const char *nl_union_nft_expr_data_to_string(NLUnionNFTExprData p) _const_;

View File

@ -22,7 +22,7 @@ typedef enum LinkOperationalState {
LINK_OPERSTATE_ENSLAVED, LINK_OPERSTATE_ENSLAVED,
LINK_OPERSTATE_ROUTABLE, LINK_OPERSTATE_ROUTABLE,
_LINK_OPERSTATE_MAX, _LINK_OPERSTATE_MAX,
_LINK_OPERSTATE_INVALID = -EINVAL, _LINK_OPERSTATE_INVALID = -1
} LinkOperationalState; } LinkOperationalState;
typedef enum LinkCarrierState { typedef enum LinkCarrierState {
@ -33,7 +33,7 @@ typedef enum LinkCarrierState {
LINK_CARRIER_STATE_CARRIER = LINK_OPERSTATE_CARRIER, LINK_CARRIER_STATE_CARRIER = LINK_OPERSTATE_CARRIER,
LINK_CARRIER_STATE_ENSLAVED = LINK_OPERSTATE_ENSLAVED, LINK_CARRIER_STATE_ENSLAVED = LINK_OPERSTATE_ENSLAVED,
_LINK_CARRIER_STATE_MAX, _LINK_CARRIER_STATE_MAX,
_LINK_CARRIER_STATE_INVALID = -EINVAL, _LINK_CARRIER_STATE_INVALID = -1
} LinkCarrierState; } LinkCarrierState;
typedef enum LinkAddressState { typedef enum LinkAddressState {
@ -41,7 +41,7 @@ typedef enum LinkAddressState {
LINK_ADDRESS_STATE_DEGRADED, LINK_ADDRESS_STATE_DEGRADED,
LINK_ADDRESS_STATE_ROUTABLE, LINK_ADDRESS_STATE_ROUTABLE,
_LINK_ADDRESS_STATE_MAX, _LINK_ADDRESS_STATE_MAX,
_LINK_ADDRESS_STATE_INVALID = -EINVAL, _LINK_ADDRESS_STATE_INVALID = -1
} LinkAddressState; } LinkAddressState;
const char* link_operstate_to_string(LinkOperationalState s) _const_; const char* link_operstate_to_string(LinkOperationalState s) _const_;

View File

@ -1371,7 +1371,8 @@ static int parse_argv(int argc, char *argv[]) {
arg_output = output_mode_from_string(optarg); arg_output = output_mode_from_string(optarg);
if (arg_output < 0) if (arg_output < 0)
return log_error_errno(arg_output, "Unknown output '%s'.", optarg); return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Unknown output '%s'.", optarg);
if (OUTPUT_MODE_IS_JSON(arg_output)) if (OUTPUT_MODE_IS_JSON(arg_output))
arg_legend = false; arg_legend = false;
@ -1402,7 +1403,8 @@ static int parse_argv(int argc, char *argv[]) {
arg_signal = signal_from_string(optarg); arg_signal = signal_from_string(optarg);
if (arg_signal < 0) if (arg_signal < 0)
return log_error_errno(arg_signal, "Failed to parse signal string %s.", optarg); return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
"Failed to parse signal string %s.", optarg);
break; break;
case 'H': case 'H':

View File

@ -15,7 +15,7 @@ typedef enum HandleAction {
HANDLE_SUSPEND_THEN_HIBERNATE, HANDLE_SUSPEND_THEN_HIBERNATE,
HANDLE_LOCK, HANDLE_LOCK,
_HANDLE_ACTION_MAX, _HANDLE_ACTION_MAX,
_HANDLE_ACTION_INVALID = -EINVAL, _HANDLE_ACTION_INVALID = -1
} HandleAction; } HandleAction;
#include "logind-inhibit.h" #include "logind-inhibit.h"

View File

@ -13,14 +13,14 @@ typedef enum InhibitWhat {
INHIBIT_HANDLE_LID_SWITCH = 1 << 6, INHIBIT_HANDLE_LID_SWITCH = 1 << 6,
INHIBIT_HANDLE_REBOOT_KEY = 1 << 7, INHIBIT_HANDLE_REBOOT_KEY = 1 << 7,
_INHIBIT_WHAT_MAX = 1 << 8, _INHIBIT_WHAT_MAX = 1 << 8,
_INHIBIT_WHAT_INVALID = -EINVAL, _INHIBIT_WHAT_INVALID = -1
} InhibitWhat; } InhibitWhat;
typedef enum InhibitMode { typedef enum InhibitMode {
INHIBIT_BLOCK, INHIBIT_BLOCK,
INHIBIT_DELAY, INHIBIT_DELAY,
_INHIBIT_MODE_MAX, _INHIBIT_MODE_MAX,
_INHIBIT_MODE_INVALID = -EINVAL, _INHIBIT_MODE_INVALID = -1
} InhibitMode; } InhibitMode;
#include "logind.h" #include "logind.h"

View File

@ -15,7 +15,7 @@ typedef enum SessionState {
SESSION_ACTIVE, /* Logged in and in the fg */ SESSION_ACTIVE, /* Logged in and in the fg */
SESSION_CLOSING, /* Logged out, but scope is still there */ SESSION_CLOSING, /* Logged out, but scope is still there */
_SESSION_STATE_MAX, _SESSION_STATE_MAX,
_SESSION_STATE_INVALID = -EINVAL, _SESSION_STATE_INVALID = -1
} SessionState; } SessionState;
typedef enum SessionClass { typedef enum SessionClass {
@ -24,7 +24,7 @@ typedef enum SessionClass {
SESSION_LOCK_SCREEN, SESSION_LOCK_SCREEN,
SESSION_BACKGROUND, SESSION_BACKGROUND,
_SESSION_CLASS_MAX, _SESSION_CLASS_MAX,
_SESSION_CLASS_INVALID = -EINVAL, _SESSION_CLASS_INVALID = -1
} SessionClass; } SessionClass;
typedef enum SessionType { typedef enum SessionType {
@ -35,7 +35,7 @@ typedef enum SessionType {
SESSION_MIR, SESSION_MIR,
SESSION_WEB, SESSION_WEB,
_SESSION_TYPE_MAX, _SESSION_TYPE_MAX,
_SESSION_TYPE_INVALID = -EINVAL, _SESSION_TYPE_INVALID = -1
} SessionType; } SessionType;
#define SESSION_TYPE_IS_GRAPHICAL(type) IN_SET(type, SESSION_X11, SESSION_WAYLAND, SESSION_MIR) #define SESSION_TYPE_IS_GRAPHICAL(type) IN_SET(type, SESSION_X11, SESSION_WAYLAND, SESSION_MIR)
@ -44,7 +44,7 @@ enum KillWho {
KILL_LEADER, KILL_LEADER,
KILL_ALL, KILL_ALL,
_KILL_WHO_MAX, _KILL_WHO_MAX,
_KILL_WHO_INVALID = -EINVAL, _KILL_WHO_INVALID = -1
}; };
typedef enum TTYValidity { typedef enum TTYValidity {
@ -52,7 +52,7 @@ typedef enum TTYValidity {
TTY_FROM_UTMP, TTY_FROM_UTMP,
TTY_UTMP_INCONSISTENT, /* may happen on ssh sessions with multiplexed TTYs */ TTY_UTMP_INCONSISTENT, /* may happen on ssh sessions with multiplexed TTYs */
_TTY_VALIDITY_MAX, _TTY_VALIDITY_MAX,
_TTY_VALIDITY_INVALID = -EINVAL, _TTY_VALIDITY_INVALID = -1,
} TTYValidity; } TTYValidity;
struct Session { struct Session {

View File

@ -16,7 +16,7 @@ typedef enum UserState {
USER_ACTIVE, /* User logged in and has a session in the fg */ USER_ACTIVE, /* User logged in and has a session in the fg */
USER_CLOSING, /* User logged out, but processes still remain and lingering is not enabled */ USER_CLOSING, /* User logged out, but processes still remain and lingering is not enabled */
_USER_STATE_MAX, _USER_STATE_MAX,
_USER_STATE_INVALID = -EINVAL, _USER_STATE_INVALID = -1
} UserState; } UserState;
struct User { struct User {

View File

@ -14,7 +14,7 @@ typedef enum MachineState {
MACHINE_RUNNING, /* Machine is running */ MACHINE_RUNNING, /* Machine is running */
MACHINE_CLOSING, /* Machine is terminating */ MACHINE_CLOSING, /* Machine is terminating */
_MACHINE_STATE_MAX, _MACHINE_STATE_MAX,
_MACHINE_STATE_INVALID = -EINVAL, _MACHINE_STATE_INVALID = -1
} MachineState; } MachineState;
typedef enum MachineClass { typedef enum MachineClass {
@ -22,14 +22,14 @@ typedef enum MachineClass {
MACHINE_VM, MACHINE_VM,
MACHINE_HOST, MACHINE_HOST,
_MACHINE_CLASS_MAX, _MACHINE_CLASS_MAX,
_MACHINE_CLASS_INVALID = -EINVAL, _MACHINE_CLASS_INVALID = -1
} MachineClass; } MachineClass;
enum KillWho { enum KillWho {
KILL_LEADER, KILL_LEADER,
KILL_ALL, KILL_ALL,
_KILL_WHO_MAX, _KILL_WHO_MAX,
_KILL_WHO_INVALID = -EINVAL, _KILL_WHO_INVALID = -1
}; };
struct Machine { struct Machine {

View File

@ -2693,10 +2693,10 @@ static int parse_argv(int argc, char *argv[]) {
return 0; return 0;
} }
r = output_mode_from_string(optarg); arg_output = output_mode_from_string(optarg);
if (r < 0) if (arg_output < 0)
return log_error_errno(r, "Unknown output '%s'.", optarg); return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
arg_output = r; "Unknown output '%s'.", optarg);
if (OUTPUT_MODE_IS_JSON(arg_output)) if (OUTPUT_MODE_IS_JSON(arg_output))
arg_legend = false; arg_legend = false;
@ -2720,10 +2720,10 @@ static int parse_argv(int argc, char *argv[]) {
return 0; return 0;
} }
r = signal_from_string(optarg); arg_signal = signal_from_string(optarg);
if (r < 0) if (arg_signal < 0)
return log_error_errno(r, "Failed to parse signal string %s.", optarg); return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
arg_signal = r; "Failed to parse signal string %s.", optarg);
break; break;
case ARG_NO_ASK_PASSWORD: case ARG_NO_ASK_PASSWORD:
@ -2758,10 +2758,10 @@ static int parse_argv(int argc, char *argv[]) {
return 0; return 0;
} }
r = import_verify_from_string(optarg); arg_verify = import_verify_from_string(optarg);
if (r < 0) if (arg_verify < 0)
return log_error_errno(r, "Failed to parse --verify= setting: %s", optarg); return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
arg_verify = r; "Failed to parse --verify= setting: %s", optarg);
break; break;
case ARG_FORCE: case ARG_FORCE:

View File

@ -313,7 +313,7 @@ static int network_set_dhcp_type(Context *context, const char *ifname, const cha
t = dracut_dhcp_type_from_string(dhcp_type); t = dracut_dhcp_type_from_string(dhcp_type);
if (t < 0) if (t < 0)
return t; return -EINVAL;
network = network_get(context, ifname); network = network_get(context, ifname);
if (!network) { if (!network) {

View File

@ -19,7 +19,7 @@ typedef enum DHCPType {
DHCP_TYPE_EITHER6, DHCP_TYPE_EITHER6,
DHCP_TYPE_IBFT, DHCP_TYPE_IBFT,
_DHCP_TYPE_MAX, _DHCP_TYPE_MAX,
_DHCP_TYPE_INVALID = -EINVAL, _DHCP_TYPE_INVALID = -1,
} DHCPType; } DHCPType;
typedef struct Address Address; typedef struct Address Address;

View File

@ -15,7 +15,7 @@ typedef enum BareUDPProtocol {
BARE_UDP_PROTOCOL_MPLS_UC = ETH_P_MPLS_UC, BARE_UDP_PROTOCOL_MPLS_UC = ETH_P_MPLS_UC,
BARE_UDP_PROTOCOL_MPLS_MC = ETH_P_MPLS_MC, BARE_UDP_PROTOCOL_MPLS_MC = ETH_P_MPLS_MC,
_BARE_UDP_PROTOCOL_MAX, _BARE_UDP_PROTOCOL_MAX,
_BARE_UDP_PROTOCOL_INVALID = -EINVAL, _BARE_UDP_PROTOCOL_INVALID = -1
} BareUDPProtocol; } BareUDPProtocol;
struct BareUDP { struct BareUDP {

View File

@ -35,7 +35,7 @@ typedef enum MulticastRouter {
MULTICAST_ROUTER_PERMANENT = MDB_RTR_TYPE_PERM, MULTICAST_ROUTER_PERMANENT = MDB_RTR_TYPE_PERM,
MULTICAST_ROUTER_TEMPORARY = MDB_RTR_TYPE_TEMP, MULTICAST_ROUTER_TEMPORARY = MDB_RTR_TYPE_TEMP,
_MULTICAST_ROUTER_MAX, _MULTICAST_ROUTER_MAX,
_MULTICAST_ROUTER_INVALID = -EINVAL, _MULTICAST_ROUTER_INVALID = -1,
} MulticastRouter; } MulticastRouter;
DEFINE_NETDEV_CAST(BRIDGE, Bridge); DEFINE_NETDEV_CAST(BRIDGE, Bridge);

View File

@ -12,7 +12,7 @@ typedef enum FooOverUDPEncapType {
NETDEV_FOO_OVER_UDP_ENCAP_DIRECT = FOU_ENCAP_DIRECT, NETDEV_FOO_OVER_UDP_ENCAP_DIRECT = FOU_ENCAP_DIRECT,
NETDEV_FOO_OVER_UDP_ENCAP_GUE = FOU_ENCAP_GUE, NETDEV_FOO_OVER_UDP_ENCAP_GUE = FOU_ENCAP_GUE,
_NETDEV_FOO_OVER_UDP_ENCAP_MAX, _NETDEV_FOO_OVER_UDP_ENCAP_MAX,
_NETDEV_FOO_OVER_UDP_ENCAP_INVALID = -EINVAL, _NETDEV_FOO_OVER_UDP_ENCAP_INVALID = -1,
} FooOverUDPEncapType; } FooOverUDPEncapType;
typedef struct FouTunnel { typedef struct FouTunnel {

View File

@ -14,7 +14,7 @@ typedef enum GeneveDF {
NETDEV_GENEVE_DF_YES = GENEVE_DF_SET, NETDEV_GENEVE_DF_YES = GENEVE_DF_SET,
NETDEV_GENEVE_DF_INHERIT = GENEVE_DF_INHERIT, NETDEV_GENEVE_DF_INHERIT = GENEVE_DF_INHERIT,
_NETDEV_GENEVE_DF_MAX, _NETDEV_GENEVE_DF_MAX,
_NETDEV_GENEVE_DF_INVALID = -EINVAL, _NETDEV_GENEVE_DF_INVALID = -1
} GeneveDF; } GeneveDF;
struct Geneve { struct Geneve {

View File

@ -12,14 +12,14 @@ typedef enum L2tpL2specType {
NETDEV_L2TP_L2SPECTYPE_NONE = L2TP_L2SPECTYPE_NONE, NETDEV_L2TP_L2SPECTYPE_NONE = L2TP_L2SPECTYPE_NONE,
NETDEV_L2TP_L2SPECTYPE_DEFAULT = L2TP_L2SPECTYPE_DEFAULT, NETDEV_L2TP_L2SPECTYPE_DEFAULT = L2TP_L2SPECTYPE_DEFAULT,
_NETDEV_L2TP_L2SPECTYPE_MAX, _NETDEV_L2TP_L2SPECTYPE_MAX,
_NETDEV_L2TP_L2SPECTYPE_INVALID = -EINVAL, _NETDEV_L2TP_L2SPECTYPE_INVALID = -1,
} L2tpL2specType; } L2tpL2specType;
typedef enum L2tpEncapType { typedef enum L2tpEncapType {
NETDEV_L2TP_ENCAPTYPE_UDP = L2TP_ENCAPTYPE_UDP, NETDEV_L2TP_ENCAPTYPE_UDP = L2TP_ENCAPTYPE_UDP,
NETDEV_L2TP_ENCAPTYPE_IP = L2TP_ENCAPTYPE_IP, NETDEV_L2TP_ENCAPTYPE_IP = L2TP_ENCAPTYPE_IP,
_NETDEV_L2TP_ENCAPTYPE_MAX, _NETDEV_L2TP_ENCAPTYPE_MAX,
_NETDEV_L2TP_ENCAPTYPE_INVALID = -EINVAL, _NETDEV_L2TP_ENCAPTYPE_INVALID = -1,
} L2tpEncapType; } L2tpEncapType;
typedef enum L2tpLocalAddressType { typedef enum L2tpLocalAddressType {
@ -27,7 +27,7 @@ typedef enum L2tpLocalAddressType {
NETDEV_L2TP_LOCAL_ADDRESS_STATIC, NETDEV_L2TP_LOCAL_ADDRESS_STATIC,
NETDEV_L2TP_LOCAL_ADDRESS_DYNAMIC, NETDEV_L2TP_LOCAL_ADDRESS_DYNAMIC,
_NETDEV_L2TP_LOCAL_ADDRESS_MAX, _NETDEV_L2TP_LOCAL_ADDRESS_MAX,
_NETDEV_L2TP_LOCAL_ADDRESS_INVALID = -EINVAL, _NETDEV_L2TP_LOCAL_ADDRESS_INVALID = -1,
} L2tpLocalAddressType; } L2tpLocalAddressType;
typedef struct L2tpTunnel L2tpTunnel; typedef struct L2tpTunnel L2tpTunnel;

View File

@ -85,7 +85,7 @@ typedef enum NetDevKind {
NETDEV_KIND_BAREUDP, NETDEV_KIND_BAREUDP,
_NETDEV_KIND_MAX, _NETDEV_KIND_MAX,
_NETDEV_KIND_TUNNEL, /* Used by config_parse_stacked_netdev() */ _NETDEV_KIND_TUNNEL, /* Used by config_parse_stacked_netdev() */
_NETDEV_KIND_INVALID = -EINVAL, _NETDEV_KIND_INVALID = -1
} NetDevKind; } NetDevKind;
typedef enum NetDevState { typedef enum NetDevState {
@ -95,7 +95,7 @@ typedef enum NetDevState {
NETDEV_STATE_READY, NETDEV_STATE_READY,
NETDEV_STATE_LINGER, NETDEV_STATE_LINGER,
_NETDEV_STATE_MAX, _NETDEV_STATE_MAX,
_NETDEV_STATE_INVALID = -EINVAL, _NETDEV_STATE_INVALID = -1,
} NetDevState; } NetDevState;
typedef enum NetDevCreateType { typedef enum NetDevCreateType {
@ -104,7 +104,7 @@ typedef enum NetDevCreateType {
NETDEV_CREATE_STACKED, NETDEV_CREATE_STACKED,
NETDEV_CREATE_AFTER_CONFIGURED, NETDEV_CREATE_AFTER_CONFIGURED,
_NETDEV_CREATE_MAX, _NETDEV_CREATE_MAX,
_NETDEV_CREATE_INVALID = -EINVAL, _NETDEV_CREATE_INVALID = -1,
} NetDevCreateType; } NetDevCreateType;
typedef struct Manager Manager; typedef struct Manager Manager;

View File

@ -12,13 +12,13 @@ typedef enum Ip6TnlMode {
NETDEV_IP6_TNL_MODE_IPIP6, NETDEV_IP6_TNL_MODE_IPIP6,
NETDEV_IP6_TNL_MODE_ANYIP6, NETDEV_IP6_TNL_MODE_ANYIP6,
_NETDEV_IP6_TNL_MODE_MAX, _NETDEV_IP6_TNL_MODE_MAX,
_NETDEV_IP6_TNL_MODE_INVALID = -EINVAL, _NETDEV_IP6_TNL_MODE_INVALID = -1,
} Ip6TnlMode; } Ip6TnlMode;
typedef enum IPv6FlowLabel { typedef enum IPv6FlowLabel {
NETDEV_IPV6_FLOWLABEL_INHERIT = 0xFFFFF + 1, NETDEV_IPV6_FLOWLABEL_INHERIT = 0xFFFFF + 1,
_NETDEV_IPV6_FLOWLABEL_MAX, _NETDEV_IPV6_FLOWLABEL_MAX,
_NETDEV_IPV6_FLOWLABEL_INVALID = -EINVAL, _NETDEV_IPV6_FLOWLABEL_INVALID = -1,
} IPv6FlowLabel; } IPv6FlowLabel;
typedef struct Tunnel { typedef struct Tunnel {

View File

@ -16,7 +16,7 @@ typedef enum VxLanDF {
NETDEV_VXLAN_DF_YES = VXLAN_DF_SET, NETDEV_VXLAN_DF_YES = VXLAN_DF_SET,
NETDEV_VXLAN_DF_INHERIT = VXLAN_DF_INHERIT, NETDEV_VXLAN_DF_INHERIT = VXLAN_DF_INHERIT,
_NETDEV_VXLAN_DF_MAX, _NETDEV_VXLAN_DF_MAX,
_NETDEV_VXLAN_DF_INVALID = -EINVAL, _NETDEV_VXLAN_DF_INVALID = -1
} VxLanDF; } VxLanDF;
struct VxLan { struct VxLan {

View File

@ -1754,6 +1754,7 @@ int config_parse_duplicate_address_detection(
Network *network = userdata; Network *network = userdata;
_cleanup_(address_free_or_set_invalidp) Address *n = NULL; _cleanup_(address_free_or_set_invalidp) Address *n = NULL;
AddressFamily a;
int r; int r;
assert(filename); assert(filename);
@ -1782,14 +1783,14 @@ int config_parse_duplicate_address_detection(
return 0; return 0;
} }
AddressFamily a = duplicate_address_detection_address_family_from_string(rvalue); a = duplicate_address_detection_address_family_from_string(rvalue);
if (a < 0) { if (a < 0) {
log_syntax(unit, LOG_WARNING, filename, line, a, log_syntax(unit, LOG_WARNING, filename, line, SYNTHETIC_ERRNO(EINVAL),
"Failed to parse %s=, ignoring: %s", lvalue, rvalue); "Failed to parse %s=, ignoring: %s", lvalue, rvalue);
return 0; return 0;
} }
n->duplicate_address_detection = a;
n->duplicate_address_detection = a;
TAKE_PTR(n); TAKE_PTR(n);
return 0; return 0;
} }

Some files were not shown because too many files have changed in this diff Show More