diff --git a/meson.build b/meson.build index 127daa419b..6f8397c966 100644 --- a/meson.build +++ b/meson.build @@ -484,6 +484,7 @@ possible_link_flags = [ '-Wl,--fatal-warnings', '-Wl,-z,now', '-Wl,-z,relro', + '-Wl,--gc-sections', ] if get_option('b_sanitize') == 'none' @@ -503,15 +504,6 @@ possible_cc_flags = [ '-fvisibility=hidden', ] -if get_option('buildtype') != 'debug' - possible_cc_flags += [ - '-ffunction-sections', - '-fdata-sections', - ] - - possible_link_flags += '-Wl,--gc-sections' -endif - if get_option('mode') == 'developer' possible_cc_flags += '-fno-omit-frame-pointer' endif diff --git a/src/basic/stdio-util.h b/src/basic/stdio-util.h index 5464031434..052087ce15 100644 --- a/src/basic/stdio-util.h +++ b/src/basic/stdio-util.h @@ -19,7 +19,7 @@ static inline char* snprintf_ok(char *buf, size_t len, const char *format, ...) } #define xsprintf(buf, fmt, ...) \ - assert_message_se(snprintf_ok(buf, ELEMENTSOF(buf), fmt, ##__VA_ARGS__), "xsprintf: " #buf "[] must be big enough") + assert_message_se(snprintf_ok(buf, ELEMENTSOF(buf), fmt, ##__VA_ARGS__), "xsprintf: buffer too small") #define VA_FORMAT_ADVANCE(format, ap) \ do { \ diff --git a/src/basic/unit-def.c b/src/basic/unit-def.c index f98cfd4ae1..04b096cd19 100644 --- a/src/basic/unit-def.c +++ b/src/basic/unit-def.c @@ -361,6 +361,17 @@ static const char* const job_mode_table[_JOB_MODE_MAX] = { DEFINE_STRING_TABLE_LOOKUP(job_mode, JobMode); +/* This table maps ExecDirectoryType to the setting it is configured with in the unit */ +static const char* const exec_directory_type_table[_EXEC_DIRECTORY_TYPE_MAX] = { + [EXEC_DIRECTORY_RUNTIME] = "RuntimeDirectory", + [EXEC_DIRECTORY_STATE] = "StateDirectory", + [EXEC_DIRECTORY_CACHE] = "CacheDirectory", + [EXEC_DIRECTORY_LOGS] = "LogsDirectory", + [EXEC_DIRECTORY_CONFIGURATION] = "ConfigurationDirectory", +}; + +DEFINE_STRING_TABLE_LOOKUP(exec_directory_type, ExecDirectoryType); + Glyph unit_active_state_to_glyph(UnitActiveState state) { static const Glyph map[_UNIT_ACTIVE_STATE_MAX] = { [UNIT_ACTIVE] = GLYPH_BLACK_CIRCLE, diff --git a/src/basic/unit-def.h b/src/basic/unit-def.h index 7664f2881a..e0b1c6730d 100644 --- a/src/basic/unit-def.h +++ b/src/basic/unit-def.h @@ -296,6 +296,16 @@ typedef enum JobMode { _JOB_MODE_INVALID = -EINVAL, } JobMode; +typedef enum ExecDirectoryType { + EXEC_DIRECTORY_RUNTIME, + EXEC_DIRECTORY_STATE, + EXEC_DIRECTORY_CACHE, + EXEC_DIRECTORY_LOGS, + EXEC_DIRECTORY_CONFIGURATION, + _EXEC_DIRECTORY_TYPE_MAX, + _EXEC_DIRECTORY_TYPE_INVALID = -EINVAL, +} ExecDirectoryType; + char* unit_dbus_path_from_name(const char *name); int unit_name_from_dbus_path(const char *path, char **name); @@ -361,4 +371,7 @@ NotifyAccess notify_access_from_string(const char *s) _pure_; const char* job_mode_to_string(JobMode t) _const_; JobMode job_mode_from_string(const char *s) _pure_; +const char* exec_directory_type_to_string(ExecDirectoryType i) _const_; +ExecDirectoryType exec_directory_type_from_string(const char *s) _pure_; + Glyph unit_active_state_to_glyph(UnitActiveState state); diff --git a/src/core/execute.h b/src/core/execute.h index e0f3ba51e0..da1600a044 100644 --- a/src/core/execute.h +++ b/src/core/execute.h @@ -7,7 +7,6 @@ #include "cgroup-util.h" #include "core-forward.h" #include "cpu-set-util.h" -#include "exec-directory-util.h" #include "exec-util.h" #include "list.h" #include "log-context.h" diff --git a/src/shared/condition.h b/src/shared/condition.h index c25b9643b9..90d896c85c 100644 --- a/src/shared/condition.h +++ b/src/shared/condition.h @@ -58,12 +58,13 @@ typedef enum ConditionResult { } ConditionResult; typedef struct Condition { + /* Use bitfields for ConditionType and ConditionResult to keep the whole struct in 32 bytes. */ ConditionType type:8; - bool trigger:1; - bool negate:1; + bool trigger; + bool negate; - ConditionResult result:6; + ConditionResult result:8; char *parameter; diff --git a/src/shared/exec-directory-util.c b/src/shared/exec-directory-util.c deleted file mode 100644 index d9effa2502..0000000000 --- a/src/shared/exec-directory-util.c +++ /dev/null @@ -1,15 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ - -#include "exec-directory-util.h" -#include "string-table.h" - -/* This table maps ExecDirectoryType to the setting it is configured with in the unit */ -static const char* const exec_directory_type_table[_EXEC_DIRECTORY_TYPE_MAX] = { - [EXEC_DIRECTORY_RUNTIME] = "RuntimeDirectory", - [EXEC_DIRECTORY_STATE] = "StateDirectory", - [EXEC_DIRECTORY_CACHE] = "CacheDirectory", - [EXEC_DIRECTORY_LOGS] = "LogsDirectory", - [EXEC_DIRECTORY_CONFIGURATION] = "ConfigurationDirectory", -}; - -DEFINE_STRING_TABLE_LOOKUP(exec_directory_type, ExecDirectoryType); diff --git a/src/shared/exec-directory-util.h b/src/shared/exec-directory-util.h deleted file mode 100644 index 0006c73abf..0000000000 --- a/src/shared/exec-directory-util.h +++ /dev/null @@ -1,19 +0,0 @@ -/* SPDX-License-Identifier: LGPL-2.1-or-later */ -#pragma once - -#include - -#include "macro-fundamental.h" - -typedef enum ExecDirectoryType { - EXEC_DIRECTORY_RUNTIME, - EXEC_DIRECTORY_STATE, - EXEC_DIRECTORY_CACHE, - EXEC_DIRECTORY_LOGS, - EXEC_DIRECTORY_CONFIGURATION, - _EXEC_DIRECTORY_TYPE_MAX, - _EXEC_DIRECTORY_TYPE_INVALID = -EINVAL, -} ExecDirectoryType; - -const char* exec_directory_type_to_string(ExecDirectoryType i) _const_; -ExecDirectoryType exec_directory_type_from_string(const char *s) _pure_; diff --git a/src/shared/meson.build b/src/shared/meson.build index afbf7f8033..78e435de35 100644 --- a/src/shared/meson.build +++ b/src/shared/meson.build @@ -69,7 +69,6 @@ shared_sources = files( 'elf-util.c', 'enable-mempool.c', 'ethtool-util.c', - 'exec-directory-util.c', 'exec-util.c', 'exit-status.c', 'extension-util.c', diff --git a/src/shared/open-file.c b/src/shared/open-file.c index 7dfce2d977..16435490f1 100644 --- a/src/shared/open-file.c +++ b/src/shared/open-file.c @@ -76,8 +76,9 @@ int open_file_validate(const OpenFile *of) { if (!fdname_is_valid(of->fdname)) return -EINVAL; - if ((FLAGS_SET(of->flags, OPENFILE_READ_ONLY) + FLAGS_SET(of->flags, OPENFILE_APPEND) + - FLAGS_SET(of->flags, OPENFILE_TRUNCATE)) > 1) + if (FLAGS_SET(of->flags, OPENFILE_READ_ONLY) + + FLAGS_SET(of->flags, OPENFILE_APPEND) + + FLAGS_SET(of->flags, OPENFILE_TRUNCATE) > 1) return -EINVAL; if ((of->flags & ~_OPENFILE_MASK_PUBLIC) != 0) diff --git a/src/systemctl/systemctl-show.c b/src/systemctl/systemctl-show.c index e75e7ac1c1..1db9bf2bea 100644 --- a/src/systemctl/systemctl-show.c +++ b/src/systemctl/systemctl-show.c @@ -15,7 +15,6 @@ #include "cgroup-show.h" #include "cpu-set-util.h" #include "errno-util.h" -#include "exec-directory-util.h" #include "exec-util.h" #include "exit-status.h" #include "extract-word.h" diff --git a/src/test/test-string-util.c b/src/test/test-string-util.c index 90ac579707..4f12ec710c 100644 --- a/src/test/test-string-util.c +++ b/src/test/test-string-util.c @@ -9,6 +9,19 @@ #include "strv.h" #include "tests.h" +TEST(xsprintf) { + char buf[5]; + + xsprintf(buf, "asdf"); + xsprintf(buf, "%4s", "a"); + xsprintf(buf, "%-4s", "a"); + xsprintf(buf, "%04d", 1); + + ASSERT_SIGNAL(xsprintf(buf, "asdfe"), SIGABRT); + ASSERT_SIGNAL(xsprintf(buf, "asdfefghdhdhdhdhd"), SIGABRT); + ASSERT_SIGNAL(xsprintf(buf, "%5s", "a"), SIGABRT); +} + TEST(string_erase) { char *x; x = strdupa_safe("");