Compare commits

..

No commits in common. "e6ce785d611702532ae71547e78fbb49eff3aded" and "7d7c75f1491350cedaed40358fe8c834705706f0" have entirely different histories.

26 changed files with 46 additions and 82 deletions

View File

@ -103,7 +103,7 @@ for args in "${ARGS[@]}"; do
SECONDS=0 SECONDS=0
info "Checking build with $args" info "Checking build with $args"
if ! AR="$AR" CC="$CC" CXX="$CXX" CFLAGS="-Werror" CXXFLAGS="-Werror" meson -Dtests=unsafe -Dslow-tests=true -Dfuzz-tests=true --werror $args build; then if ! AR="$AR" CC="$CC" CXX="$CXX" CFLAGS="-Werror" CXXFLAGS="-Werror" meson -Dtests=unsafe -Dslow-tests=true --werror $args build; then
fatal "meson failed with $args" fatal "meson failed with $args"
fi fi

23
NEWS
View File

@ -462,30 +462,15 @@ CHANGES WITH 247 in spe:
via the new Independent= boolean setting. via the new Independent= boolean setting.
* systemd-networkd's Gateway= setting in .network files now accepts the * systemd-networkd's Gateway= setting in .network files now accepts the
special values "_dhcp4" and "_ipv6ra" to configure additional, special values _dhcp4 and _ipv6ra to configure additional, locally
locally defined, explicit routes to the gateway acquired via DHCP or defined, explicit routes to the gateway acquired via DHCP or IPv6
IPv6 Router Advertisements. The old setting "_dhcp" is deprecated, Router Advertisements.
but still accepted for backwards compatibility.
* systemd-networkd's [IPv6PrefixDelegation] section and * systemd-networkd's [IPv6PrefixDelegation] section and
IPv6PrefixDelegation= options have been renamed as [IPv6SendRA] and IPv6PrefixDelegation= options have been renamed as [IPv6SendRA] and
IPv6SendRA= (the old names are still accepted for backwards IPv6SendRA= (the old names are still accepted for backwards
compatibility). compatibility).
* systemd-networkd's .network files gained the DHCPv6PrefixDelegation=
boolean setting in [Network] section. If enabled, the delegated prefix
gained by another link will be configured, and an address within the
prefix will be assigned.
* systemd-networkd's .network files gained the Announce= boolean setting
in [DHCPv6PrefixDelegation] section. When enabled, the delegated
prefix will be announced through IPv6 router advertisement (IPv6 RA).
The setting is enabled by default.
* systemd-networkd's .netdev files gained the Independent= boolean
setting in [VXLAN] section. When enabled, the vxlan interface will be
created without underlying interfaces. Defaults to false.
* systemctl gained support for two new verbs: "service-log-level" and * systemctl gained support for two new verbs: "service-log-level" and
"service-log-target" may be used on services that implement the "service-log-target" may be used on services that implement the
generic org.freedesktop.LogControl1 D-Bus interface to dynamically generic org.freedesktop.LogControl1 D-Bus interface to dynamically
@ -551,7 +536,7 @@ CHANGES WITH 247 in spe:
promises. promises.
* A new helper oomctl has been added to introspect systemd-oomd state. * A new helper oomctl has been added to introspect systemd-oomd state.
It is only enabled by default in developer mode and should be If also is only enabled by default in developer mode and should be
considered a preview without the usual backwards-compatibility considered a preview without the usual backwards-compatibility
promises. promises.

2
TODO
View File

@ -646,7 +646,7 @@ Features:
parameters parameters
* maybe hook of xfs/ext4 quotactl() with services? i.e. automatically manage * maybe hook of xfs/ext4 quotactl() with services? i.e. automatically manage
the quota of the user indicated in User= via unit file settings, like the the quota of a the user indicated in User= via unit file settings, like the
other resource management concepts. Would mix nicely with DynamicUser=1. Or other resource management concepts. Would mix nicely with DynamicUser=1. Or
alternatively, do this with projids, so that we can also cover services alternatively, do this with projids, so that we can also cover services
running as root. Quota should probably cover all the special dirs such as running as root. Quota should probably cover all the special dirs such as

View File

@ -926,7 +926,6 @@ evdev:input:b0003v046Dp00*
KEYBOARD_KEY_c1029=shuffle # Shuffle button KEYBOARD_KEY_c1029=shuffle # Shuffle button
KEYBOARD_KEY_c102a=back # Back button KEYBOARD_KEY_c102a=back # Back button
KEYBOARD_KEY_c102b=cyclewindows # Empty window icon KEYBOARD_KEY_c102b=cyclewindows # Empty window icon
KEYBOARD_KEY_c102c=fn # Fn key
KEYBOARD_KEY_c102d=www # www text + magnifierglass icon KEYBOARD_KEY_c102d=www # www text + magnifierglass icon
KEYBOARD_KEY_c1031=connect # Pickup phone button → connect → XF86Go KEYBOARD_KEY_c1031=connect # Pickup phone button → connect → XF86Go
KEYBOARD_KEY_c1032=cancel # Hangup phone button → cancel → Cancel KEYBOARD_KEY_c1032=cancel # Hangup phone button → cancel → Cancel
@ -1029,7 +1028,6 @@ evdev:input:b0003v046Dp00FE*
# MX5000 keyboard (HID proxy mode and bluetooth matches) # MX5000 keyboard (HID proxy mode and bluetooth matches)
evdev:input:b0003v046DpB305* evdev:input:b0003v046DpB305*
evdev:input:b0005v046DpB305* evdev:input:b0005v046DpB305*
KEYBOARD_KEY_c0183=media # HUT says config, kbd says Media
KEYBOARD_KEY_c0230=zoomreset # HUT says fullscreen, kbd says 100% KEYBOARD_KEY_c0230=zoomreset # HUT says fullscreen, kbd says 100%
KEYBOARD_KEY_c1004=send # Send and receive / sync button KEYBOARD_KEY_c1004=send # Send and receive / sync button
KEYBOARD_KEY_c1006=coffee # Status (online/away) button KEYBOARD_KEY_c1006=coffee # Status (online/away) button
@ -1042,25 +1040,13 @@ evdev:input:b0005v046DpB305*
KEYBOARD_KEY_c1039=prog2 # Smartkey B → XF86Launch2 KEYBOARD_KEY_c1039=prog2 # Smartkey B → XF86Launch2
KEYBOARD_KEY_c103a=prog3 # Smartkey C → XF86Launch3 KEYBOARD_KEY_c103a=prog3 # Smartkey C → XF86Launch3
KEYBOARD_KEY_c103b=prog4 # Smartkey D → XF86Launch4 KEYBOARD_KEY_c103b=prog4 # Smartkey D → XF86Launch4
KEYBOARD_KEY_c1040=fn_esc # Fn mode on/off toggle
# Dinovo Edge (HID proxy mode and bluetooth matches)
evdev:input:b0003v046DpB309*
evdev:input:b0005v046DpB309*
KEYBOARD_KEY_c102c=fn # Fn key
KEYBOARD_KEY_c1038=prog1 # Fn + F9 Smartkey A → XF86Launch1
KEYBOARD_KEY_c1039=prog2 # Fn + F10 Smartkey B → XF86Launch2
KEYBOARD_KEY_c103a=prog3 # Fn + F11 Smartkey C → XF86Launch3
KEYBOARD_KEY_c103b=prog4 # Fn + F12 Smartkey D → XF86Launch4
KEYBOARD_KEY_c1050=phone # Fn + F1 Phone button
# MX5500 keyboard (HID proxy mode and bluetooth matches) # MX5500 keyboard (HID proxy mode and bluetooth matches)
evdev:input:b0003v046DpB30B* evdev:input:b0003v046DpB30B*
evdev:input:b0005v046DpB30B* evdev:input:b0005v046DpB30B*
KEYBOARD_KEY_c0183=media # HUT says consumer control configuration, kbd says Media Center KEYBOARD_KEY_c0183=media # HUT says consumer control configuration, kbd says Media Center
KEYBOARD_KEY_c100e=images # Camera icon, "Photo Gallery" KEYBOARD_KEY_c100e=images # Camera icon, "Photo Gallery"
KEYBOARD_KEY_c100f=config # Window with gear icon KEYBOARD_KEY_c100f=config # Window with gear icon
KEYBOARD_KEY_c102c=fn # Fn key
KEYBOARD_KEY_c1038=prog1 # Smartkey A → XF86Launch1 KEYBOARD_KEY_c1038=prog1 # Smartkey A → XF86Launch1
KEYBOARD_KEY_c1039=prog2 # Smartkey B → XF86Launch2 KEYBOARD_KEY_c1039=prog2 # Smartkey B → XF86Launch2
KEYBOARD_KEY_c103a=prog3 # Smartkey C → XF86Launch3 KEYBOARD_KEY_c103a=prog3 # Smartkey C → XF86Launch3

View File

@ -292,13 +292,11 @@
attached to the request object path, interface and member. Finally, the property callbacks attached to the request object path, interface and member. Finally, the property callbacks
attached to the request object path, interface and member are called. If the final callback attached to the request object path, interface and member are called. If the final callback
returns zero, an error reply is sent back to the caller indicating no matching object for the returns zero, an error reply is sent back to the caller indicating no matching object for the
request was found.</para> request was found. Note that you can return a positive integer from a callback without
<para>Note that you can return a positive integer from a callback without
immediately sending a reply. This informs sd-bus this callback will take responsibility for immediately sending a reply. This informs sd-bus this callback will take responsibility for
replying to the request without forcing the callback to produce a reply immediately. This allows replying to the request without forcing the callback to produce a reply immediately. This allows
a callback to perform any number of asynchronous operations required to construct a reply. a callback to perform any number of asynchronous operations required to construct a reply. Note
However, if producing a reply takes too long, the method call will time out at the caller.</para> that if producing a reply takes too long, the method call will time out at the caller.</para>
<para>If a callback was invoked to handle a request that expects a reply and the callback <para>If a callback was invoked to handle a request that expects a reply and the callback
returns a negative value, the value is interpreted as a negative errno-style error code and sent returns a negative value, the value is interpreted as a negative errno-style error code and sent
@ -371,8 +369,8 @@
with the message the callback was invoked with. Parameter <replaceable>flags</replaceable> is a with the message the callback was invoked with. Parameter <replaceable>flags</replaceable> is a
combination of flags, see below.</para> combination of flags, see below.</para>
<para><constant>SD_BUS_METHOD_WITH_ARGS()</constant> is a shorthand for calling <constant>SD_BUS_METHOD_WITH_ARGS()</constant> is a shorthand for calling
<constant>SD_BUS_METHOD_WITH_ARGS_OFFSET()</constant> with an offset of zero.</para> <constant>SD_BUS_METHOD_WITH_ARGS_OFFSET()</constant> with an offset of zero.
</listitem> </listitem>
</varlistentry> </varlistentry>
@ -406,7 +404,7 @@
<varlistentry> <varlistentry>
<term><constant>SD_BUS_SIGNAL_WITH_ARGS()</constant></term> <term><constant>SD_BUS_SIGNAL_WITH_ARGS()</constant></term>
<listitem><para>Declare a D-Bus signal with the name <replaceable>member</replaceable> and <listitem><para>>Declare a D-Bus signal with the name <replaceable>member</replaceable> and
arguments <replaceable>args</replaceable>. <replaceable>args</replaceable> expects a sequence of arguments <replaceable>args</replaceable>. <replaceable>args</replaceable> expects a sequence of
argument type/name pairs wrapped in the <constant>SD_BUS_ARGS()</constant> macro. The elements at argument type/name pairs wrapped in the <constant>SD_BUS_ARGS()</constant> macro. The elements at
even indices in this list describe the types of the signal's arguments. The signal's parameter even indices in this list describe the types of the signal's arguments. The signal's parameter

View File

@ -89,12 +89,6 @@
input parameter; it can be used to propagate errors from the callback handler, it will not receive any input parameter; it can be used to propagate errors from the callback handler, it will not receive any
error that was received as method reply.)</para> error that was received as method reply.)</para>
<para>The message <parameter>m</parameter> passed to the callback is only borrowed, that is, the callback should
not call <citerefentry><refentrytitle>sd_bus_message_unref</refentrytitle><manvolnum>3</manvolnum></citerefentry>
on it. If the callback wants to hold on to the message beyond the lifetime of the callback, it needs to call
<citerefentry><refentrytitle>sd_bus_message_ref</refentrytitle><manvolnum>3</manvolnum></citerefentry> to create a
new reference.</para>
<para>If <parameter>usec</parameter> is zero, the default D-Bus method call timeout is used. See <para>If <parameter>usec</parameter> is zero, the default D-Bus method call timeout is used. See
<citerefentry><refentrytitle>sd_bus_get_method_call_timeout</refentrytitle><manvolnum>3</manvolnum></citerefentry>. <citerefentry><refentrytitle>sd_bus_get_method_call_timeout</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
</para> </para>

View File

@ -44,7 +44,6 @@
<funcprototype> <funcprototype>
<funcdef>int <function>sd_bus_message_peek_type</function></funcdef> <funcdef>int <function>sd_bus_message_peek_type</function></funcdef>
<paramdef>sd_bus_message *<parameter>m</parameter></paramdef>
<paramdef>char *<parameter>type</parameter></paramdef> <paramdef>char *<parameter>type</parameter></paramdef>
<paramdef>const char **<parameter>contents</parameter></paramdef> <paramdef>const char **<parameter>contents</parameter></paramdef>
</funcprototype> </funcprototype>

View File

@ -59,7 +59,7 @@
message is no longer needed. If <parameter>ret</parameter> is not <constant>NULL</constant>, progress was made, but no message was message is no longer needed. If <parameter>ret</parameter> is not <constant>NULL</constant>, progress was made, but no message was
processed, <parameter>*ret</parameter> is set to <constant>NULL</constant>.</para> processed, <parameter>*ret</parameter> is set to <constant>NULL</constant>.</para>
<para>If the bus object is connected to an <para>If a the bus object is connected to an
<citerefentry><refentrytitle>sd-event</refentrytitle><manvolnum>3</manvolnum></citerefentry> event loop (with <citerefentry><refentrytitle>sd-event</refentrytitle><manvolnum>3</manvolnum></citerefentry> event loop (with
<citerefentry><refentrytitle>sd_bus_attach_event</refentrytitle><manvolnum>3</manvolnum></citerefentry>), it is not <citerefentry><refentrytitle>sd_bus_attach_event</refentrytitle><manvolnum>3</manvolnum></citerefentry>), it is not
necessary to call <function>sd_bus_process()</function> directly as it is invoked automatically when necessary to call <function>sd_bus_process()</function> directly as it is invoked automatically when

View File

@ -825,7 +825,7 @@ IPv6Token=prefixstable:2002:da8:1::</programlisting></para>
configured on another link. By default, an address within each delegated prefix will be configured on another link. By default, an address within each delegated prefix will be
assigned, and the prefixes will be announced through IPv6 Router Advertisement when assigned, and the prefixes will be announced through IPv6 Router Advertisement when
<varname>IPv6SendRA=</varname> is enabled. Such default settings can be configured in <varname>IPv6SendRA=</varname> is enabled. Such default settings can be configured in
[DHCPv6PrefixDelegation] section. Defaults to disabled.</para></listitem> [DHCPv6PrefixDelegation] section.</para></listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>
<term><varname>IPv6MTUBytes=</varname></term> <term><varname>IPv6MTUBytes=</varname></term>
@ -1170,9 +1170,7 @@ IPv6Token=prefixstable:2002:da8:1::</programlisting></para>
<varlistentry> <varlistentry>
<term><varname>FirewallMark=</varname></term> <term><varname>FirewallMark=</varname></term>
<listitem> <listitem>
<para>Specifies the iptables firewall mark value to match (a number between 1 and <para>Specifies the iptables firewall mark value to match (a number between 1 and 4294967295).</para>
4294967295). Optionally, the firewall mask (also a number between 1 and 4294967295) can be
suffixed with a slash (<literal>/</literal>), e.g., <literal>7/255</literal>.</para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry> <varlistentry>

View File

@ -132,7 +132,7 @@
<para>The string can be prefixed with a lowercase e (e"string\n") to mark the string as <para>The string can be prefixed with a lowercase e (e"string\n") to mark the string as
<ulink url="https://en.wikipedia.org/wiki/Escape_sequences_in_C#Table_of_escape_sequences">C-style escaped</ulink>. <ulink url="https://en.wikipedia.org/wiki/Escape_sequences_in_C#Table_of_escape_sequences">C-style escaped</ulink>.
For example, e"string\n" is parsed as 7 characters: 6 lowercase letters and a newline. For example, e"string\n" is parsed as 7 characters: 6 lowercase letters and a newline.
This can be useful for writing special characters when a kernel driver requires them.</para> This can be useful for writting special characters when a kernel driver requires them.</para>
<para>Please note that <constant>NUL</constant> is not allowed in either string variant.</para> <para>Please note that <constant>NUL</constant> is not allowed in either string variant.</para>
</refsect2> </refsect2>

View File

@ -3438,7 +3438,7 @@ endif
fuzzer_exes = [] fuzzer_exes = []
if fuzz_tests or fuzzer_build if get_option('tests') != 'false'
foreach tuple : fuzzers foreach tuple : fuzzers
sources = tuple[0] sources = tuple[0]
link_with = tuple[1].length() > 0 ? tuple[1] : [libshared] link_with = tuple[1].length() > 0 ? tuple[1] : [libshared]
@ -3560,7 +3560,7 @@ foreach tuple : sanitizers
if name != prev if name != prev
if want_tests == 'false' if want_tests == 'false'
message('Not compiling @0@ because tests is set to false'.format(name)) message('Not compiling @0@ because tests is set to false'.format(name))
elif fuzz_tests elif slow_tests or fuzz_tests
exe = custom_target( exe = custom_target(
name, name,
output : name, output : name,
@ -3570,12 +3570,12 @@ foreach tuple : sanitizers
'@OUTPUT@'], '@OUTPUT@'],
build_by_default : true) build_by_default : true)
else else
message('Not compiling @0@ because fuzz-tests is set to false'.format(name)) message('Not compiling @0@ because slow-tests/fuzz-tests is set to false'.format(name))
endif endif
endif endif
prev = name prev = name
if fuzz_tests if want_tests != 'false' and (slow_tests or fuzz_tests)
test('@0@:@1@:@2@'.format(b, c, sanitizer), test('@0@:@1@:@2@'.format(b, c, sanitizer),
env, env,
env : ['UBSAN_OPTIONS=print_stacktrace=1:print_summary=1:halt_on_error=1'], env : ['UBSAN_OPTIONS=print_stacktrace=1:print_summary=1:halt_on_error=1'],

View File

@ -86,7 +86,7 @@ EOF
# disable autopkgtests which are not for upstream # disable autopkgtests which are not for upstream
sed -i '/# NOUPSTREAM/ q' debian/tests/control sed -i '/# NOUPSTREAM/ q' debian/tests/control
# enable more unit tests # enable more unit tests
sed -i '/^CONFFLAGS =/ s/=/= --werror -Dtests=unsafe -Dsplit-usr=true -Dslow-tests=true -Dfuzz-tests=true -Dman=true /' debian/rules sed -i '/^CONFFLAGS =/ s/=/= --werror -Dtests=unsafe -Dsplit-usr=true -Dslow-tests=true -Dman=true /' debian/rules
# no orig tarball # no orig tarball
echo '1.0' > debian/source/format echo '1.0' > debian/source/format

View File

@ -1875,8 +1875,9 @@ int cg_mask_supported(CGroupMask *ret) {
if (r > 0) { if (r > 0) {
_cleanup_free_ char *root = NULL, *controllers = NULL, *path = NULL; _cleanup_free_ char *root = NULL, *controllers = NULL, *path = NULL;
/* In the unified hierarchy we can read the supported and accessible controllers from /* In the unified hierarchy we can read the supported
* the top-level cgroup attribute */ * and accessible controllers from a the top-level
* cgroup attribute */
r = cg_get_root_path(&root); r = cg_get_root_path(&root);
if (r < 0) if (r < 0)

View File

@ -810,7 +810,7 @@ int chase_symlinks(const char *path, const char *original_root, unsigned flags,
* *
* 3. With CHASE_STEP: in this case only a single step of the normalization is executed, i.e. only the first * 3. With CHASE_STEP: in this case only a single step of the normalization is executed, i.e. only the first
* symlink or ".." component of the path is resolved, and the resulting path is returned. This is useful if * symlink or ".." component of the path is resolved, and the resulting path is returned. This is useful if
* a caller wants to trace the path through the file system verbosely. Returns < 0 on error, > 0 if the * a caller wants to trace the a path through the file system verbosely. Returns < 0 on error, > 0 if the
* path is fully normalized, and == 0 for each normalization step. This may be combined with * path is fully normalized, and == 0 for each normalization step. This may be combined with
* CHASE_NONEXISTENT, in which case 1 is returned when a component is not found. * CHASE_NONEXISTENT, in which case 1 is returned when a component is not found.
* *

View File

@ -104,6 +104,10 @@ static void test_oomd_cgroup_context_acquire_and_insert(void) {
assert_se(oomd_cgroup_context_acquire(cgroup, &ctx) == 0); assert_se(oomd_cgroup_context_acquire(cgroup, &ctx) == 0);
assert_se(streq(ctx->path, cgroup)); assert_se(streq(ctx->path, cgroup));
assert_se(ctx->memory_pressure.avg10 == 0);
assert_se(ctx->memory_pressure.avg60 == 0);
assert_se(ctx->memory_pressure.avg300 == 0);
assert_se(ctx->memory_pressure.total == 0);
assert_se(ctx->current_memory_usage > 0); assert_se(ctx->current_memory_usage > 0);
assert_se(ctx->memory_min == 0); assert_se(ctx->memory_min == 0);
assert_se(ctx->memory_low == 0); assert_se(ctx->memory_low == 0);

View File

@ -1380,7 +1380,7 @@ static int nsec3_hashed_domain_make(DnsResourceRecord *nsec3, const char *domain
* matches the wildcard domain. * matches the wildcard domain.
* *
* Based on this we can prove either the existence of the record in @key, or NXDOMAIN or NODATA, or * Based on this we can prove either the existence of the record in @key, or NXDOMAIN or NODATA, or
* that there is no proof either way. The latter is the case if a proof of non-existence of a given * that there is no proof either way. The latter is the case if a the proof of non-existence of a given
* name uses an NSEC3 record with the opt-out bit set. Lastly, if we are given insufficient NSEC3 records * name uses an NSEC3 record with the opt-out bit set. Lastly, if we are given insufficient NSEC3 records
* to conclude anything we indicate this by returning NO_RR. */ * to conclude anything we indicate this by returning NO_RR. */
static int dnssec_test_nsec3(DnsAnswer *answer, DnsResourceKey *key, DnssecNsecResult *result, bool *authenticated, uint32_t *ttl) { static int dnssec_test_nsec3(DnsAnswer *answer, DnsResourceKey *key, DnssecNsecResult *result, bool *authenticated, uint32_t *ttl) {

View File

@ -2117,7 +2117,7 @@ int dns_transaction_request_dnssec_keys(DnsTransaction *t) {
return r; return r;
if (r == 0) { if (r == 0) {
/* Hmm, so this SOA RR doesn't match our original question. In this case, maybe this is /* Hmm, so this SOA RR doesn't match our original question. In this case, maybe this is
* a negative reply, and we need the SOA RR's TTL in order to cache a negative entry? * a negative reply, and we need the a SOA RR's TTL in order to cache a negative entry?
* If so, we need to validate it, too. */ * If so, we need to validate it, too. */
r = dns_answer_match_key(t->answer, t->key, NULL); r = dns_answer_match_key(t->answer, t->key, NULL);

View File

@ -35,7 +35,7 @@ typedef enum ConfigParseFlags {
/* Prototype for a parser for a specific configuration setting */ /* Prototype for a parser for a specific configuration setting */
typedef int (*ConfigParserCallback)(CONFIG_PARSER_ARGUMENTS); typedef int (*ConfigParserCallback)(CONFIG_PARSER_ARGUMENTS);
/* A macro declaring a function prototype, following the typedef above, simply because it's so cumbersomely long /* A macro declaring the a function prototype, following the typedef above, simply because it's so cumbersomely long
* otherwise. (And current emacs gets irritatingly slow when editing files that contain lots of very long function * otherwise. (And current emacs gets irritatingly slow when editing files that contain lots of very long function
* prototypes on the same screen) */ * prototypes on the same screen) */
#define CONFIG_PARSER_PROTOTYPE(name) int name(CONFIG_PARSER_ARGUMENTS) #define CONFIG_PARSER_PROTOTYPE(name) int name(CONFIG_PARSER_ARGUMENTS)

View File

@ -2062,7 +2062,7 @@ bool user_record_compatible(UserRecord *a, UserRecord *b) {
assert(a); assert(a);
assert(b); assert(b);
/* If either lacks the regular section, we can't really decide, let's hence say they are /* If either lacks a the regular section, we can't really decide, let's hence say they are
* incompatible. */ * incompatible. */
if (!(a->mask & b->mask & USER_RECORD_REGULAR)) if (!(a->mask & b->mask & USER_RECORD_REGULAR))
return false; return false;

View File

@ -90,7 +90,6 @@ static int get_unit_list_recursive(
static int output_units_list(const UnitInfo *unit_infos, unsigned c) { static int output_units_list(const UnitInfo *unit_infos, unsigned c) {
_cleanup_(table_unrefp) Table *table = NULL; _cleanup_(table_unrefp) Table *table = NULL;
unsigned job_count = 0;
int r; int r;
table = table_new("", "unit", "load", "active", "sub", "job", "description"); table = table_new("", "unit", "load", "active", "sub", "job", "description");
@ -109,6 +108,7 @@ static int output_units_list(const UnitInfo *unit_infos, unsigned c) {
(void) table_set_empty_string(table, "-"); (void) table_set_empty_string(table, "-");
int job_count = 0;
for (const UnitInfo *u = unit_infos; unit_infos && u < unit_infos + c; u++) { for (const UnitInfo *u = unit_infos; unit_infos && u < unit_infos + c; u++) {
_cleanup_free_ char *j = NULL; _cleanup_free_ char *j = NULL;
const char *on_underline = "", *on_loaded = "", *on_active = ""; const char *on_underline = "", *on_loaded = "", *on_active = "";
@ -156,7 +156,7 @@ static int output_units_list(const UnitInfo *unit_infos, unsigned c) {
TABLE_STRING, u->sub_state, TABLE_STRING, u->sub_state,
TABLE_SET_BOTH_COLORS, on_active, TABLE_SET_BOTH_COLORS, on_active,
TABLE_STRING, u->job_id ? u->job_type: "", TABLE_STRING, u->job_id ? u->job_type: "",
TABLE_SET_BOTH_COLORS, on_underline, TABLE_SET_BOTH_COLORS, u->job_id ? on_underline : "",
TABLE_STRING, u->description, TABLE_STRING, u->description,
TABLE_SET_BOTH_COLORS, on_underline); TABLE_SET_BOTH_COLORS, on_underline);
if (r < 0) if (r < 0)
@ -186,8 +186,7 @@ static int output_units_list(const UnitInfo *unit_infos, unsigned c) {
"LOAD = Reflects whether the unit definition was properly loaded.\n" "LOAD = Reflects whether the unit definition was properly loaded.\n"
"ACTIVE = The high-level unit activation state, i.e. generalization of SUB.\n" "ACTIVE = The high-level unit activation state, i.e. generalization of SUB.\n"
"SUB = The low-level unit activation state, values depend on unit type."); "SUB = The low-level unit activation state, values depend on unit type.");
if (job_count > 0) puts(job_count ? "JOB = Pending job for the unit.\n" : "");
puts("JOB = Pending job for the unit.\n");
on = ansi_highlight(); on = ansi_highlight();
off = ansi_normal(); off = ansi_normal();
} else { } else {

View File

@ -58,10 +58,10 @@ if add_languages('cpp', required : false)
opts += [['c++'], opts += [['c++'],
['c++', '-std=c++98'], ['c++', '-std=c++98'],
['c++', '-std=c++11']] ['c++', '-std=c++11']]
if cxx.has_argument('-std=c++14') if cc.has_argument('-std=c++14')
opts += [['c++', '-std=c++14']] opts += [['c++', '-std=c++14']]
endif endif
if cxx.has_argument('-std=c++17') if cc.has_argument('-std=c++17')
opts += [['c++', '-std=c++17']] opts += [['c++', '-std=c++17']]
endif endif
endif endif

View File

@ -960,7 +960,7 @@ static int copy_all_tags(sd_device *d, sd_device *s) {
if (!s) if (!s)
return 0; return 0;
FOREACH_DEVICE_TAG(s, tag) { for (tag = sd_device_get_tag_first(s); tag; tag = sd_device_get_tag_next(s)) {
r = device_add_tag(d, tag, false); r = device_add_tag(d, tag, false);
if (r < 0) if (r < 0)
return r; return r;

View File

@ -15,7 +15,7 @@ sanitize_address_undefined = custom_target(
project_source_root, project_source_root,
'@OUTPUT@', '@OUTPUT@',
'fuzzers', 'fuzzers',
'-Dfuzz-tests=true -Db_lundef=false -Db_sanitize=address,undefined @0@'.format(optimization), '-Db_lundef=false -Db_sanitize=address,undefined @0@'.format(optimization),
' '.join(cc.cmd_array()), ' '.join(cc.cmd_array()),
cxx_cmd]) cxx_cmd])

View File

@ -415,7 +415,7 @@ KERNEL=="ttyACM0", SYMLINK+="modem"
EOF EOF
}, },
{ {
desc => "substitution of sysfs value (%s{file})", desc => "sustitution of sysfs value (%s{file})",
devices => [ devices => [
{ {
devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda", devpath => "/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda",

View File

@ -61,7 +61,7 @@ for phase in "${PHASES[@]}"; do
ENV_VARS="-e CC=clang -e CXX=clang++" ENV_VARS="-e CC=clang -e CXX=clang++"
MESON_ARGS="--optimization=1" MESON_ARGS="--optimization=1"
fi fi
docker exec $ENV_VARS -it $CONT_NAME meson --werror -Dtests=unsafe -Dslow-tests=true -Dfuzz-tests=true -Dsplit-usr=true -Dman=true $MESON_ARGS build docker exec $ENV_VARS -it $CONT_NAME meson --werror -Dtests=unsafe -Dslow-tests=true -Dsplit-usr=true -Dman=true $MESON_ARGS build
$DOCKER_EXEC ninja -v -C build $DOCKER_EXEC ninja -v -C build
docker exec -e "TRAVIS=$TRAVIS" -it $CONT_NAME ninja -C build test docker exec -e "TRAVIS=$TRAVIS" -it $CONT_NAME ninja -C build test
;; ;;

View File

@ -83,12 +83,12 @@ for phase in "${PHASES[@]}"; do
RUN) RUN)
info "Run phase" info "Run phase"
# Build systemd # Build systemd
$DOCKER_EXEC meson --werror -Dtests=unsafe -Dslow-tests=true -Dfuzz-tests=true build $DOCKER_EXEC meson --werror -Dtests=unsafe -Dslow-tests=true build
$DOCKER_EXEC ninja -v -C build $DOCKER_EXEC ninja -v -C build
$DOCKER_EXEC ninja -C build test $DOCKER_EXEC ninja -C build test
;; ;;
RUN_CLANG) RUN_CLANG)
docker exec -e CC=clang -e CXX=clang++ -it $CONT_NAME meson --werror -Dtests=unsafe -Dslow-tests=true -Dfuzz-tests=true -Dman=true build docker exec -e CC=clang -e CXX=clang++ -it $CONT_NAME meson --werror -Dtests=unsafe -Dslow-tests=true -Dman=true build
$DOCKER_EXEC ninja -v -C build $DOCKER_EXEC ninja -v -C build
$DOCKER_EXEC ninja -C build test $DOCKER_EXEC ninja -C build test
;; ;;