mirror of
https://github.com/systemd/systemd
synced 2026-03-17 18:44:46 +01:00
Compare commits
No commits in common. "2255e8adee37c490bf8cf2daab791b6f746bb0a0" and "357f5b07ae79ba55ea91c01412e9c98279231327" have entirely different histories.
2255e8adee
...
357f5b07ae
9
TODO
9
TODO
@ -9,10 +9,6 @@ Bugfixes:
|
|||||||
|
|
||||||
* Get rid of nftw(). We should refuse to use such useless APIs on principle.
|
* Get rid of nftw(). We should refuse to use such useless APIs on principle.
|
||||||
|
|
||||||
* Jun 01 09:43:02 krowka systemd[1]: Unit user@1000.service has alias user@.service.
|
|
||||||
Jun 01 09:43:02 krowka systemd[1]: Unit user@6.service has alias user@.service.
|
|
||||||
Jun 01 09:43:02 krowka systemd[1]: Unit user-runtime-dir@6.service has alias user-runtime-dir@.service.
|
|
||||||
|
|
||||||
External:
|
External:
|
||||||
|
|
||||||
* Fedora: add an rpmlint check that verifies that all unit files in the RPM are listed in %systemd_post macros.
|
* Fedora: add an rpmlint check that verifies that all unit files in the RPM are listed in %systemd_post macros.
|
||||||
@ -669,6 +665,8 @@ Features:
|
|||||||
|
|
||||||
* add support for "portablectl attach http://foobar.com/waaa.raw (i.e. importd integration)
|
* add support for "portablectl attach http://foobar.com/waaa.raw (i.e. importd integration)
|
||||||
|
|
||||||
|
* add attach --enable and attach --now (for attach+enable+start)
|
||||||
|
|
||||||
* sync dynamic uids/gids between host+portable srvice (i.e. if DynamicUser=1 is set for a service, make sure that the
|
* sync dynamic uids/gids between host+portable srvice (i.e. if DynamicUser=1 is set for a service, make sure that the
|
||||||
selected user is resolvable in the service even if it ships its own /etc/passwd)
|
selected user is resolvable in the service even if it ships its own /etc/passwd)
|
||||||
|
|
||||||
@ -862,9 +860,6 @@ Features:
|
|||||||
on PID 1 with the relevant signals, and makes relevant files in /sys and
|
on PID 1 with the relevant signals, and makes relevant files in /sys and
|
||||||
/proc (such as the sysrq stuff) unavailable
|
/proc (such as the sysrq stuff) unavailable
|
||||||
|
|
||||||
* Support ReadWritePaths/ReadOnlyPaths/InaccessiblePaths in systemd --user instances
|
|
||||||
via the new unprivileged Landlock LSM (https://landlock.io)
|
|
||||||
|
|
||||||
* make sure the ratelimit object can deal with USEC_INFINITY as way to turn off things
|
* make sure the ratelimit object can deal with USEC_INFINITY as way to turn off things
|
||||||
|
|
||||||
* journalctl: make sure -f ends when the container indicated by -M terminates
|
* journalctl: make sure -f ends when the container indicated by -M terminates
|
||||||
|
|||||||
59
meson.build
59
meson.build
@ -319,38 +319,40 @@ endif
|
|||||||
# Those generate many false positives, and we do not want to change the code to
|
# Those generate many false positives, and we do not want to change the code to
|
||||||
# avoid them.
|
# avoid them.
|
||||||
basic_disabled_warnings = [
|
basic_disabled_warnings = [
|
||||||
'-Wno-format-signedness',
|
|
||||||
'-Wno-missing-field-initializers',
|
|
||||||
'-Wno-unused-parameter',
|
'-Wno-unused-parameter',
|
||||||
|
'-Wno-missing-field-initializers',
|
||||||
'-Wno-unused-result',
|
'-Wno-unused-result',
|
||||||
|
'-Wno-format-signedness',
|
||||||
]
|
]
|
||||||
|
|
||||||
possible_common_cc_flags = [
|
possible_cc_flags = [
|
||||||
'-Wdate-time',
|
|
||||||
'-Wendif-labels',
|
|
||||||
'-Werror=format=2',
|
|
||||||
'-Werror=implicit-function-declaration',
|
|
||||||
'-Werror=incompatible-pointer-types',
|
|
||||||
'-Werror=overflow',
|
|
||||||
'-Werror=return-type',
|
|
||||||
'-Werror=shift-count-overflow',
|
|
||||||
'-Werror=shift-overflow=2',
|
|
||||||
'-Werror=undef',
|
'-Werror=undef',
|
||||||
'-Wfloat-equal',
|
|
||||||
'-Wimplicit-fallthrough=5',
|
|
||||||
'-Winit-self',
|
|
||||||
'-Wlogical-op',
|
'-Wlogical-op',
|
||||||
'-Wmissing-include-dirs',
|
'-Wmissing-include-dirs',
|
||||||
'-Wmissing-noreturn',
|
|
||||||
'-Wnested-externs',
|
|
||||||
'-Wold-style-definition',
|
'-Wold-style-definition',
|
||||||
'-Wpointer-arith',
|
'-Wpointer-arith',
|
||||||
'-Wredundant-decls',
|
'-Winit-self',
|
||||||
'-Wshadow',
|
'-Wfloat-equal',
|
||||||
'-Wstrict-aliasing=2',
|
|
||||||
'-Wstrict-prototypes',
|
|
||||||
'-Wsuggest-attribute=noreturn',
|
'-Wsuggest-attribute=noreturn',
|
||||||
|
'-Werror=missing-prototypes',
|
||||||
|
'-Werror=implicit-function-declaration',
|
||||||
|
'-Werror=missing-declarations',
|
||||||
|
'-Werror=return-type',
|
||||||
|
'-Werror=incompatible-pointer-types',
|
||||||
|
'-Werror=format=2',
|
||||||
|
'-Wstrict-prototypes',
|
||||||
|
'-Wredundant-decls',
|
||||||
|
'-Wmissing-noreturn',
|
||||||
|
'-Wimplicit-fallthrough=5',
|
||||||
|
'-Wshadow',
|
||||||
|
'-Wendif-labels',
|
||||||
|
'-Wstrict-aliasing=2',
|
||||||
'-Wwrite-strings',
|
'-Wwrite-strings',
|
||||||
|
'-Werror=overflow',
|
||||||
|
'-Werror=shift-count-overflow',
|
||||||
|
'-Werror=shift-overflow=2',
|
||||||
|
'-Wdate-time',
|
||||||
|
'-Wnested-externs',
|
||||||
|
|
||||||
# negative arguments are correctly detected starting with meson 0.46.
|
# negative arguments are correctly detected starting with meson 0.46.
|
||||||
'-Wno-error=#warnings', # clang
|
'-Wno-error=#warnings', # clang
|
||||||
@ -361,6 +363,8 @@ possible_common_cc_flags = [
|
|||||||
'-fdiagnostics-show-option',
|
'-fdiagnostics-show-option',
|
||||||
'-fno-strict-aliasing',
|
'-fno-strict-aliasing',
|
||||||
'-fvisibility=hidden',
|
'-fvisibility=hidden',
|
||||||
|
'-fstack-protector',
|
||||||
|
'-fstack-protector-strong',
|
||||||
'--param=ssp-buffer-size=4',
|
'--param=ssp-buffer-size=4',
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -370,7 +374,7 @@ possible_common_cc_flags = [
|
|||||||
# busywork. See https://github.com/systemd/systemd/pull/19226.
|
# busywork. See https://github.com/systemd/systemd/pull/19226.
|
||||||
if cc.get_id() == 'gcc' and (not '02'.contains(get_option('optimization')) or
|
if cc.get_id() == 'gcc' and (not '02'.contains(get_option('optimization')) or
|
||||||
cc.version().version_compare('<10'))
|
cc.version().version_compare('<10'))
|
||||||
possible_common_cc_flags += '-Wno-maybe-uninitialized'
|
possible_cc_flags += '-Wno-maybe-uninitialized'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# --as-needed and --no-undefined are provided by meson by default,
|
# --as-needed and --no-undefined are provided by meson by default,
|
||||||
@ -382,14 +386,14 @@ possible_link_flags = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
if cc.get_id() == 'clang'
|
if cc.get_id() == 'clang'
|
||||||
possible_common_cc_flags += [
|
possible_cc_flags += [
|
||||||
'-Wno-typedef-redefinition',
|
'-Wno-typedef-redefinition',
|
||||||
'-Wno-gnu-variable-sized-type-not-at-end',
|
'-Wno-gnu-variable-sized-type-not-at-end',
|
||||||
]
|
]
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if get_option('buildtype') != 'debug'
|
if get_option('buildtype') != 'debug'
|
||||||
possible_common_cc_flags += [
|
possible_cc_flags += [
|
||||||
'-ffunction-sections',
|
'-ffunction-sections',
|
||||||
'-fdata-sections',
|
'-fdata-sections',
|
||||||
]
|
]
|
||||||
@ -397,13 +401,6 @@ if get_option('buildtype') != 'debug'
|
|||||||
possible_link_flags += '-Wl,--gc-sections'
|
possible_link_flags += '-Wl,--gc-sections'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
possible_cc_flags = possible_common_cc_flags + [
|
|
||||||
'-Werror=missing-declarations',
|
|
||||||
'-Werror=missing-prototypes',
|
|
||||||
'-fstack-protector',
|
|
||||||
'-fstack-protector-strong',
|
|
||||||
]
|
|
||||||
|
|
||||||
add_project_arguments(cc.get_supported_arguments(basic_disabled_warnings), language : 'c')
|
add_project_arguments(cc.get_supported_arguments(basic_disabled_warnings), language : 'c')
|
||||||
add_project_arguments(cc.get_supported_arguments(possible_cc_flags), language : 'c')
|
add_project_arguments(cc.get_supported_arguments(possible_cc_flags), language : 'c')
|
||||||
add_project_link_arguments(cc.get_supported_link_arguments(possible_link_flags), language : 'c')
|
add_project_link_arguments(cc.get_supported_link_arguments(possible_link_flags), language : 'c')
|
||||||
|
|||||||
18
po/da.po
18
po/da.po
@ -2,13 +2,13 @@
|
|||||||
#
|
#
|
||||||
# Danish translation for systemd.
|
# Danish translation for systemd.
|
||||||
# Daniel Machon <dmachon.dev@gmail.com>, 2015.
|
# Daniel Machon <dmachon.dev@gmail.com>, 2015.
|
||||||
# scootergrisen <scootergrisen@gmail.com>, 2020, 2021.
|
# scootergrisen <scootergrisen@gmail.com>, 2020.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
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-06-02 16:03+0000\n"
|
"PO-Revision-Date: 2020-09-19 12:22+0000\n"
|
||||||
"Last-Translator: scootergrisen <scootergrisen@gmail.com>\n"
|
"Last-Translator: scootergrisen <scootergrisen@gmail.com>\n"
|
||||||
"Language-Team: Danish <https://translate.fedoraproject.org/projects/systemd/"
|
"Language-Team: Danish <https://translate.fedoraproject.org/projects/systemd/"
|
||||||
"master/da/>\n"
|
"master/da/>\n"
|
||||||
@ -17,7 +17,7 @@ msgstr ""
|
|||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
"X-Generator: Weblate 4.6.2\n"
|
"X-Generator: Weblate 4.2.2\n"
|
||||||
|
|
||||||
#: src/core/org.freedesktop.systemd1.policy.in:22
|
#: src/core/org.freedesktop.systemd1.policy.in:22
|
||||||
msgid "Send passphrase back to system"
|
msgid "Send passphrase back to system"
|
||||||
@ -296,16 +296,22 @@ msgstr ""
|
|||||||
"skærmlukning."
|
"skærmlukning."
|
||||||
|
|
||||||
#: src/login/org.freedesktop.login1.policy:117
|
#: src/login/org.freedesktop.login1.policy:117
|
||||||
|
#, fuzzy
|
||||||
|
#| msgid "Allow applications to inhibit system handling of the power key"
|
||||||
msgid "Allow applications to inhibit system handling of the reboot key"
|
msgid "Allow applications to inhibit system handling of the reboot key"
|
||||||
msgstr "Tillad programmer at hæmme systemhåndtering af genstart-knappen"
|
msgstr "Tillad programmer at hæmme systemhåndtering af tænd/sluk-knappen"
|
||||||
|
|
||||||
#: src/login/org.freedesktop.login1.policy:118
|
#: src/login/org.freedesktop.login1.policy:118
|
||||||
|
#, fuzzy
|
||||||
|
#| msgid ""
|
||||||
|
#| "Authentication is required for an application to inhibit system handling "
|
||||||
|
#| "of the power key."
|
||||||
msgid ""
|
msgid ""
|
||||||
"Authentication is required for an application to inhibit system handling of "
|
"Authentication is required for an application to inhibit system handling of "
|
||||||
"the reboot key."
|
"the reboot key."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Der kræves godkendelse for at et program kan hæmme systemhåndtering af "
|
"Der kræves godkendelse for at et program kan hæmme systemhåndtering af tænd/"
|
||||||
"genstart-knappen."
|
"sluk-knappen."
|
||||||
|
|
||||||
#: src/login/org.freedesktop.login1.policy:128
|
#: src/login/org.freedesktop.login1.policy:128
|
||||||
msgid "Allow non-logged-in user to run programs"
|
msgid "Allow non-logged-in user to run programs"
|
||||||
|
|||||||
@ -713,7 +713,7 @@ int find_executable_full(const char *name, bool use_path_envvar, char **ret_file
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool paths_check_timestamp(const char* const* paths, usec_t *timestamp, bool update) {
|
bool paths_check_timestamp(const char* const* paths, usec_t *timestamp, bool update) {
|
||||||
bool changed = false, originally_unset;
|
bool changed = false;
|
||||||
const char* const* i;
|
const char* const* i;
|
||||||
|
|
||||||
assert(timestamp);
|
assert(timestamp);
|
||||||
@ -721,8 +721,6 @@ bool paths_check_timestamp(const char* const* paths, usec_t *timestamp, bool upd
|
|||||||
if (!paths)
|
if (!paths)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
originally_unset = *timestamp == 0;
|
|
||||||
|
|
||||||
STRV_FOREACH(i, paths) {
|
STRV_FOREACH(i, paths) {
|
||||||
struct stat stats;
|
struct stat stats;
|
||||||
usec_t u;
|
usec_t u;
|
||||||
@ -732,11 +730,11 @@ bool paths_check_timestamp(const char* const* paths, usec_t *timestamp, bool upd
|
|||||||
|
|
||||||
u = timespec_load(&stats.st_mtim);
|
u = timespec_load(&stats.st_mtim);
|
||||||
|
|
||||||
/* check first */
|
/* first check */
|
||||||
if (*timestamp >= u)
|
if (*timestamp >= u)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
log_debug(originally_unset ? "Loaded timestamp for '%s'." : "Timestamp of '%s' changed.", *i);
|
log_debug("timestamp of '%s' changed", *i);
|
||||||
|
|
||||||
/* update timestamp */
|
/* update timestamp */
|
||||||
if (update) {
|
if (update) {
|
||||||
|
|||||||
@ -91,7 +91,7 @@ static VOID cursor_right(
|
|||||||
}
|
}
|
||||||
|
|
||||||
static BOOLEAN line_edit(
|
static BOOLEAN line_edit(
|
||||||
const CHAR16 *line_in,
|
CHAR16 *line_in,
|
||||||
CHAR16 **line_out,
|
CHAR16 **line_out,
|
||||||
UINTN x_max,
|
UINTN x_max,
|
||||||
UINTN y_pos) {
|
UINTN y_pos) {
|
||||||
@ -521,7 +521,7 @@ static BOOLEAN menu_run(
|
|||||||
uefi_call_wrapper(ST->ConOut->SetAttribute, 2, ST->ConOut, EFI_LIGHTGRAY|EFI_BACKGROUND_BLACK);
|
uefi_call_wrapper(ST->ConOut->SetAttribute, 2, ST->ConOut, EFI_LIGHTGRAY|EFI_BACKGROUND_BLACK);
|
||||||
|
|
||||||
/* draw a single character to make ClearScreen work on some firmware */
|
/* draw a single character to make ClearScreen work on some firmware */
|
||||||
uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, (CHAR16*) L" ");
|
uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, L" ");
|
||||||
|
|
||||||
if (config->console_mode_change != CONSOLE_MODE_KEEP) {
|
if (config->console_mode_change != CONSOLE_MODE_KEEP) {
|
||||||
err = console_set_mode(&config->console_mode, config->console_mode_change);
|
err = console_set_mode(&config->console_mode, config->console_mode_change);
|
||||||
@ -618,7 +618,7 @@ static BOOLEAN menu_run(
|
|||||||
uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, lines[i]);
|
uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, lines[i]);
|
||||||
if ((INTN)i == config->idx_default_efivar) {
|
if ((INTN)i == config->idx_default_efivar) {
|
||||||
uefi_call_wrapper(ST->ConOut->SetCursorPosition, 3, ST->ConOut, x_start-3, y_start + i - idx_first);
|
uefi_call_wrapper(ST->ConOut->SetCursorPosition, 3, ST->ConOut, x_start-3, y_start + i - idx_first);
|
||||||
uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, (CHAR16*) L"=>");
|
uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, L"=>");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
refresh = FALSE;
|
refresh = FALSE;
|
||||||
@ -628,7 +628,7 @@ static BOOLEAN menu_run(
|
|||||||
uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, lines[idx_highlight_prev]);
|
uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, lines[idx_highlight_prev]);
|
||||||
if ((INTN)idx_highlight_prev == config->idx_default_efivar) {
|
if ((INTN)idx_highlight_prev == config->idx_default_efivar) {
|
||||||
uefi_call_wrapper(ST->ConOut->SetCursorPosition, 3, ST->ConOut, x_start-3, y_start + idx_highlight_prev - idx_first);
|
uefi_call_wrapper(ST->ConOut->SetCursorPosition, 3, ST->ConOut, x_start-3, y_start + idx_highlight_prev - idx_first);
|
||||||
uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, (CHAR16*) L"=>");
|
uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, L"=>");
|
||||||
}
|
}
|
||||||
|
|
||||||
uefi_call_wrapper(ST->ConOut->SetCursorPosition, 3, ST->ConOut, 0, y_start + idx_highlight - idx_first);
|
uefi_call_wrapper(ST->ConOut->SetCursorPosition, 3, ST->ConOut, 0, y_start + idx_highlight - idx_first);
|
||||||
@ -636,7 +636,7 @@ static BOOLEAN menu_run(
|
|||||||
uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, lines[idx_highlight]);
|
uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, lines[idx_highlight]);
|
||||||
if ((INTN)idx_highlight == config->idx_default_efivar) {
|
if ((INTN)idx_highlight == config->idx_default_efivar) {
|
||||||
uefi_call_wrapper(ST->ConOut->SetCursorPosition, 3, ST->ConOut, x_start-3, y_start + idx_highlight - idx_first);
|
uefi_call_wrapper(ST->ConOut->SetCursorPosition, 3, ST->ConOut, x_start-3, y_start + idx_highlight - idx_first);
|
||||||
uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, (CHAR16*) L"=>");
|
uefi_call_wrapper(ST->ConOut->OutputString, 2, ST->ConOut, L"=>");
|
||||||
}
|
}
|
||||||
highlight = FALSE;
|
highlight = FALSE;
|
||||||
}
|
}
|
||||||
@ -916,13 +916,14 @@ static VOID config_entry_free(ConfigEntry *entry) {
|
|||||||
|
|
||||||
static CHAR8 *line_get_key_value(
|
static CHAR8 *line_get_key_value(
|
||||||
CHAR8 *content,
|
CHAR8 *content,
|
||||||
const CHAR8 *sep,
|
CHAR8 *sep,
|
||||||
UINTN *pos,
|
UINTN *pos,
|
||||||
CHAR8 **key_ret,
|
CHAR8 **key_ret,
|
||||||
CHAR8 **value_ret) {
|
CHAR8 **value_ret) {
|
||||||
|
|
||||||
CHAR8 *line, *value;
|
CHAR8 *line;
|
||||||
UINTN linelen;
|
UINTN linelen;
|
||||||
|
CHAR8 *value;
|
||||||
|
|
||||||
skip:
|
skip:
|
||||||
line = content + *pos;
|
line = content + *pos;
|
||||||
@ -1072,9 +1073,9 @@ static VOID config_defaults_load_from_file(Config *config, CHAR8 *content) {
|
|||||||
|
|
||||||
static VOID config_entry_parse_tries(
|
static VOID config_entry_parse_tries(
|
||||||
ConfigEntry *entry,
|
ConfigEntry *entry,
|
||||||
const CHAR16 *path,
|
CHAR16 *path,
|
||||||
const CHAR16 *file,
|
CHAR16 *file,
|
||||||
const CHAR16 *suffix) {
|
CHAR16 *suffix) {
|
||||||
|
|
||||||
UINTN left = UINTN_MAX, done = UINTN_MAX, factor = 1, i, next_left, next_done;
|
UINTN left = UINTN_MAX, done = UINTN_MAX, factor = 1, i, next_left, next_done;
|
||||||
_cleanup_freepool_ CHAR16 *prefix = NULL;
|
_cleanup_freepool_ CHAR16 *prefix = NULL;
|
||||||
@ -1258,10 +1259,10 @@ static VOID config_entry_add_from_file(
|
|||||||
Config *config,
|
Config *config,
|
||||||
EFI_HANDLE *device,
|
EFI_HANDLE *device,
|
||||||
EFI_FILE *root_dir,
|
EFI_FILE *root_dir,
|
||||||
const CHAR16 *path,
|
CHAR16 *path,
|
||||||
const CHAR16 *file,
|
CHAR16 *file,
|
||||||
CHAR8 *content,
|
CHAR8 *content,
|
||||||
const CHAR16 *loaded_image_path) {
|
CHAR16 *loaded_image_path) {
|
||||||
|
|
||||||
ConfigEntry *entry;
|
ConfigEntry *entry;
|
||||||
CHAR8 *line;
|
CHAR8 *line;
|
||||||
@ -1436,7 +1437,7 @@ static VOID config_load_entries(
|
|||||||
EFI_FILE_HANDLE entries_dir;
|
EFI_FILE_HANDLE entries_dir;
|
||||||
EFI_STATUS err;
|
EFI_STATUS err;
|
||||||
|
|
||||||
err = uefi_call_wrapper(root_dir->Open, 5, root_dir, &entries_dir, (CHAR16*) L"\\loader\\entries", EFI_FILE_MODE_READ, 0ULL);
|
err = uefi_call_wrapper(root_dir->Open, 5, root_dir, &entries_dir, L"\\loader\\entries", EFI_FILE_MODE_READ, 0ULL);
|
||||||
if (!EFI_ERROR(err)) {
|
if (!EFI_ERROR(err)) {
|
||||||
for (;;) {
|
for (;;) {
|
||||||
CHAR16 buf[256];
|
CHAR16 buf[256];
|
||||||
@ -1688,8 +1689,8 @@ static VOID config_title_generate(Config *config) {
|
|||||||
|
|
||||||
static BOOLEAN config_entry_add_call(
|
static BOOLEAN config_entry_add_call(
|
||||||
Config *config,
|
Config *config,
|
||||||
const CHAR16 *id,
|
CHAR16 *id,
|
||||||
const CHAR16 *title,
|
CHAR16 *title,
|
||||||
EFI_STATUS (*call)(VOID)) {
|
EFI_STATUS (*call)(VOID)) {
|
||||||
|
|
||||||
ConfigEntry *entry;
|
ConfigEntry *entry;
|
||||||
@ -1712,11 +1713,11 @@ static ConfigEntry *config_entry_add_loader(
|
|||||||
Config *config,
|
Config *config,
|
||||||
EFI_HANDLE *device,
|
EFI_HANDLE *device,
|
||||||
enum loader_type type,
|
enum loader_type type,
|
||||||
const CHAR16 *id,
|
CHAR16 *id,
|
||||||
CHAR16 key,
|
CHAR16 key,
|
||||||
const CHAR16 *title,
|
CHAR16 *title,
|
||||||
const CHAR16 *loader,
|
CHAR16 *loader,
|
||||||
const CHAR16 *version) {
|
CHAR16 *version) {
|
||||||
|
|
||||||
ConfigEntry *entry;
|
ConfigEntry *entry;
|
||||||
|
|
||||||
@ -1743,11 +1744,11 @@ static BOOLEAN config_entry_add_loader_auto(
|
|||||||
Config *config,
|
Config *config,
|
||||||
EFI_HANDLE *device,
|
EFI_HANDLE *device,
|
||||||
EFI_FILE *root_dir,
|
EFI_FILE *root_dir,
|
||||||
const CHAR16 *loaded_image_path,
|
CHAR16 *loaded_image_path,
|
||||||
const CHAR16 *id,
|
CHAR16 *id,
|
||||||
CHAR16 key,
|
CHAR16 key,
|
||||||
const CHAR16 *title,
|
CHAR16 *title,
|
||||||
const CHAR16 *loader) {
|
CHAR16 *loader) {
|
||||||
|
|
||||||
EFI_FILE_HANDLE handle;
|
EFI_FILE_HANDLE handle;
|
||||||
ConfigEntry *entry;
|
ConfigEntry *entry;
|
||||||
@ -1773,7 +1774,7 @@ static BOOLEAN config_entry_add_loader_auto(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* check existence */
|
/* check existence */
|
||||||
err = uefi_call_wrapper(root_dir->Open, 5, root_dir, &handle, (CHAR16*) loader, EFI_FILE_MODE_READ, 0ULL);
|
err = uefi_call_wrapper(root_dir->Open, 5, root_dir, &handle, loader, EFI_FILE_MODE_READ, 0ULL);
|
||||||
if (EFI_ERROR(err))
|
if (EFI_ERROR(err))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
uefi_call_wrapper(handle->Close, 1, handle);
|
uefi_call_wrapper(handle->Close, 1, handle);
|
||||||
@ -1823,7 +1824,7 @@ static VOID config_entry_add_linux(
|
|||||||
EFI_STATUS err;
|
EFI_STATUS err;
|
||||||
ConfigEntry *entry;
|
ConfigEntry *entry;
|
||||||
|
|
||||||
err = uefi_call_wrapper(root_dir->Open, 5, root_dir, &linux_dir, (CHAR16*) L"\\EFI\\Linux", EFI_FILE_MODE_READ, 0ULL);
|
err = uefi_call_wrapper(root_dir->Open, 5, root_dir, &linux_dir, L"\\EFI\\Linux", EFI_FILE_MODE_READ, 0ULL);
|
||||||
if (EFI_ERROR(err))
|
if (EFI_ERROR(err))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|||||||
@ -175,27 +175,23 @@ if have_gnu_efi
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
if have_gnu_efi
|
if have_gnu_efi
|
||||||
compile_args = cc.get_supported_arguments(
|
compile_args = ['-Wall',
|
||||||
basic_disabled_warnings +
|
'-Wextra',
|
||||||
possible_common_cc_flags + [
|
'-std=gnu99',
|
||||||
'-ffreestanding',
|
'-nostdlib',
|
||||||
'-fno-stack-protector',
|
|
||||||
'-fpic',
|
'-fpic',
|
||||||
'-fshort-wchar',
|
'-fshort-wchar',
|
||||||
'-Wall',
|
'-ffreestanding',
|
||||||
'-Wextra',
|
'-fno-strict-aliasing',
|
||||||
|
'-fno-stack-protector',
|
||||||
'-Wsign-compare',
|
'-Wsign-compare',
|
||||||
]
|
'-Wno-missing-field-initializers',
|
||||||
) + [
|
'-isystem', efi_incdir,
|
||||||
'-nostdlib',
|
'-isystem', join_paths(efi_incdir, gnu_efi_path_arch),
|
||||||
'-std=gnu99',
|
'-I', fundamental_path,
|
||||||
'-isystem', efi_incdir,
|
'-DSD_BOOT',
|
||||||
'-isystem', join_paths(efi_incdir, gnu_efi_path_arch),
|
'-include', efi_config_h,
|
||||||
'-I', fundamental_path,
|
'-include', version_h]
|
||||||
'-DSD_BOOT',
|
|
||||||
'-include', efi_config_h,
|
|
||||||
'-include', version_h,
|
|
||||||
]
|
|
||||||
if efi_arch == 'x86_64'
|
if efi_arch == 'x86_64'
|
||||||
compile_args += ['-mno-red-zone',
|
compile_args += ['-mno-red-zone',
|
||||||
'-mno-sse',
|
'-mno-sse',
|
||||||
|
|||||||
@ -243,7 +243,7 @@ EFI_STATUS process_random_seed(EFI_FILE *root_dir, RandomSeedMode mode) {
|
|||||||
if (mode != RANDOM_SEED_ALWAYS && EFI_ERROR(err))
|
if (mode != RANDOM_SEED_ALWAYS && EFI_ERROR(err))
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
err = uefi_call_wrapper(root_dir->Open, 5, root_dir, &handle, (CHAR16*) L"\\loader\\random-seed", EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE, 0ULL);
|
err = uefi_call_wrapper(root_dir->Open, 5, root_dir, &handle, L"\\loader\\random-seed", EFI_FILE_MODE_READ|EFI_FILE_MODE_WRITE, 0ULL);
|
||||||
if (EFI_ERROR(err)) {
|
if (EFI_ERROR(err)) {
|
||||||
if (err != EFI_NOT_FOUND)
|
if (err != EFI_NOT_FOUND)
|
||||||
Print(L"Failed to open random seed file: %r\n", err);
|
Print(L"Failed to open random seed file: %r\n", err);
|
||||||
|
|||||||
@ -143,12 +143,9 @@ void sha256_process_bytes(const void *buffer, UINTN len, struct sha256_ctx *ctx)
|
|||||||
|
|
||||||
/* Process available complete blocks. */
|
/* Process available complete blocks. */
|
||||||
if (len >= 64) {
|
if (len >= 64) {
|
||||||
|
#if !_STRING_ARCH_unaligned
|
||||||
/* The condition below is from glibc's string/string-inline.c.
|
/* To check alignment gcc has an appropriate operator. Other
|
||||||
* See definition of _STRING_INLINE_unaligned. */
|
compilers don't. */
|
||||||
#if !defined(__mc68020__) && !defined(__s390__) && !defined(__i386__)
|
|
||||||
|
|
||||||
/* To check alignment gcc has an appropriate operator. Other compilers don't. */
|
|
||||||
# if __GNUC__ >= 2
|
# if __GNUC__ >= 2
|
||||||
# define UNALIGNED_P(p) (((UINTN) p) % __alignof__ (UINT32) != 0)
|
# define UNALIGNED_P(p) (((UINTN) p) % __alignof__ (UINT32) != 0)
|
||||||
# else
|
# else
|
||||||
|
|||||||
@ -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 <endian.h>
|
|
||||||
|
|
||||||
#include <efi.h>
|
#include <efi.h>
|
||||||
#include <efilib.h>
|
#include <efilib.h>
|
||||||
|
|
||||||
|
|||||||
@ -84,14 +84,14 @@ EFI_STATUS efivar_set(const EFI_GUID *vendor, const CHAR16 *name, const CHAR16 *
|
|||||||
return efivar_set_raw(vendor, name, value, value ? (StrLen(value) + 1) * sizeof(CHAR16) : 0, flags);
|
return efivar_set_raw(vendor, name, value, value ? (StrLen(value) + 1) * sizeof(CHAR16) : 0, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
EFI_STATUS efivar_set_uint_string(const EFI_GUID *vendor, const CHAR16 *name, UINTN i, UINT32 flags) {
|
EFI_STATUS efivar_set_uint_string(const EFI_GUID *vendor, CHAR16 *name, UINTN i, UINT32 flags) {
|
||||||
CHAR16 str[32];
|
CHAR16 str[32];
|
||||||
|
|
||||||
SPrint(str, 32, L"%u", i);
|
SPrint(str, 32, L"%u", i);
|
||||||
return efivar_set(vendor, name, str, flags);
|
return efivar_set(vendor, name, str, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
EFI_STATUS efivar_set_uint32_le(const EFI_GUID *vendor, const CHAR16 *name, UINT32 value, UINT32 flags) {
|
EFI_STATUS efivar_set_uint32_le(const EFI_GUID *vendor, CHAR16 *name, UINT32 value, UINT32 flags) {
|
||||||
UINT8 buf[4];
|
UINT8 buf[4];
|
||||||
|
|
||||||
buf[0] = (UINT8)(value >> 0U & 0xFF);
|
buf[0] = (UINT8)(value >> 0U & 0xFF);
|
||||||
@ -102,7 +102,7 @@ EFI_STATUS efivar_set_uint32_le(const EFI_GUID *vendor, const CHAR16 *name, UINT
|
|||||||
return efivar_set_raw(vendor, name, buf, sizeof(buf), flags);
|
return efivar_set_raw(vendor, name, buf, sizeof(buf), flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
EFI_STATUS efivar_set_uint64_le(const EFI_GUID *vendor, const CHAR16 *name, UINT64 value, UINT32 flags) {
|
EFI_STATUS efivar_set_uint64_le(const EFI_GUID *vendor, CHAR16 *name, UINT64 value, UINT32 flags) {
|
||||||
UINT8 buf[8];
|
UINT8 buf[8];
|
||||||
|
|
||||||
buf[0] = (UINT8)(value >> 0U & 0xFF);
|
buf[0] = (UINT8)(value >> 0U & 0xFF);
|
||||||
@ -233,7 +233,7 @@ EFI_STATUS efivar_get_boolean_u8(const EFI_GUID *vendor, const CHAR16 *name, BOO
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID efivar_set_time_usec(const EFI_GUID *vendor, const CHAR16 *name, UINT64 usec) {
|
VOID efivar_set_time_usec(const EFI_GUID *vendor, CHAR16 *name, UINT64 usec) {
|
||||||
CHAR16 str[32];
|
CHAR16 str[32];
|
||||||
|
|
||||||
if (usec == 0)
|
if (usec == 0)
|
||||||
@ -245,7 +245,7 @@ VOID efivar_set_time_usec(const EFI_GUID *vendor, const CHAR16 *name, UINT64 use
|
|||||||
efivar_set(vendor, name, str, 0);
|
efivar_set(vendor, name, str, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static INTN utf8_to_16(const CHAR8 *stra, CHAR16 *c) {
|
static INTN utf8_to_16(CHAR8 *stra, CHAR16 *c) {
|
||||||
CHAR16 unichar;
|
CHAR16 unichar;
|
||||||
UINTN len;
|
UINTN len;
|
||||||
|
|
||||||
@ -296,7 +296,7 @@ static INTN utf8_to_16(const CHAR8 *stra, CHAR16 *c) {
|
|||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
CHAR16 *stra_to_str(const CHAR8 *stra) {
|
CHAR16 *stra_to_str(CHAR8 *stra) {
|
||||||
UINTN strlen;
|
UINTN strlen;
|
||||||
UINTN len;
|
UINTN len;
|
||||||
UINTN i;
|
UINTN i;
|
||||||
@ -324,7 +324,7 @@ CHAR16 *stra_to_str(const CHAR8 *stra) {
|
|||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
CHAR16 *stra_to_path(const CHAR8 *stra) {
|
CHAR16 *stra_to_path(CHAR8 *stra) {
|
||||||
CHAR16 *str;
|
CHAR16 *str;
|
||||||
UINTN strlen;
|
UINTN strlen;
|
||||||
UINTN len;
|
UINTN len;
|
||||||
@ -361,10 +361,10 @@ CHAR16 *stra_to_path(const CHAR8 *stra) {
|
|||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
CHAR8 *strchra(const CHAR8 *s, CHAR8 c) {
|
CHAR8 *strchra(CHAR8 *s, CHAR8 c) {
|
||||||
do {
|
do {
|
||||||
if (*s == c)
|
if (*s == c)
|
||||||
return (CHAR8*) s;
|
return s;
|
||||||
} while (*s++);
|
} while (*s++);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -20,10 +20,10 @@ UINT64 time_usec(void);
|
|||||||
|
|
||||||
EFI_STATUS efivar_set(const EFI_GUID *vendor, const CHAR16 *name, const CHAR16 *value, UINT32 flags);
|
EFI_STATUS efivar_set(const EFI_GUID *vendor, const CHAR16 *name, const CHAR16 *value, UINT32 flags);
|
||||||
EFI_STATUS efivar_set_raw(const EFI_GUID *vendor, const CHAR16 *name, const VOID *buf, UINTN size, UINT32 flags);
|
EFI_STATUS efivar_set_raw(const EFI_GUID *vendor, const CHAR16 *name, const VOID *buf, UINTN size, UINT32 flags);
|
||||||
EFI_STATUS efivar_set_uint_string(const EFI_GUID *vendor, const CHAR16 *name, UINTN i, UINT32 flags);
|
EFI_STATUS efivar_set_uint_string(const EFI_GUID *vendor, CHAR16 *name, UINTN i, UINT32 flags);
|
||||||
EFI_STATUS efivar_set_uint32_le(const EFI_GUID *vendor, const CHAR16 *NAME, UINT32 value, UINT32 flags);
|
EFI_STATUS efivar_set_uint32_le(const EFI_GUID *vendor, CHAR16 *NAME, UINT32 value, UINT32 flags);
|
||||||
EFI_STATUS efivar_set_uint64_le(const EFI_GUID *vendor, const CHAR16 *name, UINT64 value, UINT32 flags);
|
EFI_STATUS efivar_set_uint64_le(const EFI_GUID *vendor, CHAR16 *name, UINT64 value, UINT32 flags);
|
||||||
VOID efivar_set_time_usec(const EFI_GUID *vendor, const CHAR16 *name, UINT64 usec);
|
VOID efivar_set_time_usec(const EFI_GUID *vendor, CHAR16 *name, UINT64 usec);
|
||||||
|
|
||||||
EFI_STATUS efivar_get(const EFI_GUID *vendor, const CHAR16 *name, CHAR16 **value);
|
EFI_STATUS efivar_get(const EFI_GUID *vendor, const CHAR16 *name, CHAR16 **value);
|
||||||
EFI_STATUS efivar_get_raw(const EFI_GUID *vendor, const CHAR16 *name, CHAR8 **buffer, UINTN *size);
|
EFI_STATUS efivar_get_raw(const EFI_GUID *vendor, const CHAR16 *name, CHAR8 **buffer, UINTN *size);
|
||||||
@ -32,9 +32,9 @@ EFI_STATUS efivar_get_uint32_le(const EFI_GUID *vendor, const CHAR16 *name, UINT
|
|||||||
EFI_STATUS efivar_get_uint64_le(const EFI_GUID *vendor, const CHAR16 *name, UINT64 *ret);
|
EFI_STATUS efivar_get_uint64_le(const EFI_GUID *vendor, const CHAR16 *name, UINT64 *ret);
|
||||||
EFI_STATUS efivar_get_boolean_u8(const EFI_GUID *vendor, const CHAR16 *name, BOOLEAN *ret);
|
EFI_STATUS efivar_get_boolean_u8(const EFI_GUID *vendor, const CHAR16 *name, BOOLEAN *ret);
|
||||||
|
|
||||||
CHAR8 *strchra(const CHAR8 *s, CHAR8 c);
|
CHAR8 *strchra(CHAR8 *s, CHAR8 c);
|
||||||
CHAR16 *stra_to_path(const CHAR8 *stra);
|
CHAR16 *stra_to_path(CHAR8 *stra);
|
||||||
CHAR16 *stra_to_str(const CHAR8 *stra);
|
CHAR16 *stra_to_str(CHAR8 *stra);
|
||||||
|
|
||||||
EFI_STATUS file_read(EFI_FILE_HANDLE dir, const CHAR16 *name, UINTN off, UINTN size, CHAR8 **content, UINTN *content_size);
|
EFI_STATUS file_read(EFI_FILE_HANDLE dir, const CHAR16 *name, UINTN off, UINTN size, CHAR8 **content, UINTN *content_size);
|
||||||
|
|
||||||
|
|||||||
@ -26,7 +26,6 @@
|
|||||||
#include "fs-util.h"
|
#include "fs-util.h"
|
||||||
#include "install.h"
|
#include "install.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "manager-dump.h"
|
|
||||||
#include "os-util.h"
|
#include "os-util.h"
|
||||||
#include "parse-util.h"
|
#include "parse-util.h"
|
||||||
#include "path-util.h"
|
#include "path-util.h"
|
||||||
|
|||||||
@ -64,7 +64,6 @@
|
|||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "macro.h"
|
#include "macro.h"
|
||||||
#include "manager.h"
|
#include "manager.h"
|
||||||
#include "manager-dump.h"
|
|
||||||
#include "memory-util.h"
|
#include "memory-util.h"
|
||||||
#include "missing_fs.h"
|
#include "missing_fs.h"
|
||||||
#include "mkdir.h"
|
#include "mkdir.h"
|
||||||
|
|||||||
@ -6,7 +6,6 @@
|
|||||||
#include "fuzz.h"
|
#include "fuzz.h"
|
||||||
#include "install.h"
|
#include "install.h"
|
||||||
#include "load-fragment.h"
|
#include "load-fragment.h"
|
||||||
#include "manager-dump.h"
|
|
||||||
#include "string-util.h"
|
#include "string-util.h"
|
||||||
#include "unit-serialize.h"
|
#include "unit-serialize.h"
|
||||||
#include "utf8.h"
|
#include "utf8.h"
|
||||||
|
|||||||
@ -54,7 +54,6 @@
|
|||||||
#include "loopback-setup.h"
|
#include "loopback-setup.h"
|
||||||
#include "machine-id-setup.h"
|
#include "machine-id-setup.h"
|
||||||
#include "manager.h"
|
#include "manager.h"
|
||||||
#include "manager-dump.h"
|
|
||||||
#include "mkdir.h"
|
#include "mkdir.h"
|
||||||
#include "mount-setup.h"
|
#include "mount-setup.h"
|
||||||
#include "os-util.h"
|
#include "os-util.h"
|
||||||
@ -2501,6 +2500,16 @@ static int initialize_security(
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_summary(Manager *m) {
|
||||||
|
assert(m);
|
||||||
|
|
||||||
|
printf("-> By units:\n");
|
||||||
|
manager_dump_units(m, stdout, "\t");
|
||||||
|
|
||||||
|
printf("-> By jobs:\n");
|
||||||
|
manager_dump_jobs(m, stdout, "\t");
|
||||||
|
}
|
||||||
|
|
||||||
static int collect_fds(FDSet **ret_fds, const char **ret_error_message) {
|
static int collect_fds(FDSet **ret_fds, const char **ret_error_message) {
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
@ -2873,7 +2882,7 @@ int main(int argc, char *argv[]) {
|
|||||||
format_timespan(timespan, sizeof(timespan), after_startup - before_startup, 100 * USEC_PER_MSEC));
|
format_timespan(timespan, sizeof(timespan), after_startup - before_startup, 100 * USEC_PER_MSEC));
|
||||||
|
|
||||||
if (arg_action == ACTION_TEST) {
|
if (arg_action == ACTION_TEST) {
|
||||||
manager_test_summary(m);
|
test_summary(m);
|
||||||
retval = EXIT_SUCCESS;
|
retval = EXIT_SUCCESS;
|
||||||
goto finish;
|
goto finish;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,89 +0,0 @@
|
|||||||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
|
||||||
|
|
||||||
#include "build.h"
|
|
||||||
#include "fd-util.h"
|
|
||||||
#include "fileio.h"
|
|
||||||
#include "hashmap.h"
|
|
||||||
#include "manager-dump.h"
|
|
||||||
#include "unit-serialize.h"
|
|
||||||
|
|
||||||
void manager_dump_jobs(Manager *s, FILE *f, const char *prefix) {
|
|
||||||
Job *j;
|
|
||||||
|
|
||||||
assert(s);
|
|
||||||
assert(f);
|
|
||||||
|
|
||||||
HASHMAP_FOREACH(j, s->jobs)
|
|
||||||
job_dump(j, f, prefix);
|
|
||||||
}
|
|
||||||
|
|
||||||
void manager_dump_units(Manager *s, FILE *f, const char *prefix) {
|
|
||||||
Unit *u;
|
|
||||||
const char *t;
|
|
||||||
|
|
||||||
assert(s);
|
|
||||||
assert(f);
|
|
||||||
|
|
||||||
HASHMAP_FOREACH_KEY(u, t, s->units)
|
|
||||||
if (u->id == t)
|
|
||||||
unit_dump(u, f, prefix);
|
|
||||||
}
|
|
||||||
|
|
||||||
void manager_dump(Manager *m, FILE *f, const char *prefix) {
|
|
||||||
assert(m);
|
|
||||||
assert(f);
|
|
||||||
|
|
||||||
fprintf(f, "%sManager: systemd " STRINGIFY(PROJECT_VERSION) " (" GIT_VERSION ")\n", strempty(prefix));
|
|
||||||
fprintf(f, "%sFeatures: %s\n", strempty(prefix), systemd_features);
|
|
||||||
|
|
||||||
for (ManagerTimestamp q = 0; q < _MANAGER_TIMESTAMP_MAX; q++) {
|
|
||||||
const dual_timestamp *t = m->timestamps + q;
|
|
||||||
char buf[CONST_MAX(FORMAT_TIMESPAN_MAX, FORMAT_TIMESTAMP_MAX)];
|
|
||||||
|
|
||||||
if (dual_timestamp_is_set(t))
|
|
||||||
fprintf(f, "%sTimestamp %s: %s\n",
|
|
||||||
strempty(prefix),
|
|
||||||
manager_timestamp_to_string(q),
|
|
||||||
timestamp_is_set(t->realtime) ? format_timestamp(buf, sizeof buf, t->realtime) :
|
|
||||||
format_timespan(buf, sizeof buf, t->monotonic, 1));
|
|
||||||
}
|
|
||||||
|
|
||||||
manager_dump_units(m, f, prefix);
|
|
||||||
manager_dump_jobs(m, f, prefix);
|
|
||||||
}
|
|
||||||
|
|
||||||
int manager_get_dump_string(Manager *m, char **ret) {
|
|
||||||
_cleanup_free_ char *dump = NULL;
|
|
||||||
_cleanup_fclose_ FILE *f = NULL;
|
|
||||||
size_t size;
|
|
||||||
int r;
|
|
||||||
|
|
||||||
assert(m);
|
|
||||||
assert(ret);
|
|
||||||
|
|
||||||
f = open_memstream_unlocked(&dump, &size);
|
|
||||||
if (!f)
|
|
||||||
return -errno;
|
|
||||||
|
|
||||||
manager_dump(m, f, NULL);
|
|
||||||
|
|
||||||
r = fflush_and_check(f);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
f = safe_fclose(f);
|
|
||||||
|
|
||||||
*ret = TAKE_PTR(dump);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void manager_test_summary(Manager *m) {
|
|
||||||
assert(m);
|
|
||||||
|
|
||||||
printf("-> By units:\n");
|
|
||||||
manager_dump_units(m, stdout, "\t");
|
|
||||||
|
|
||||||
printf("-> By jobs:\n");
|
|
||||||
manager_dump_jobs(m, stdout, "\t");
|
|
||||||
}
|
|
||||||
@ -1,12 +0,0 @@
|
|||||||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include "manager.h"
|
|
||||||
|
|
||||||
void manager_dump_jobs(Manager *s, FILE *f, const char *prefix);
|
|
||||||
void manager_dump_units(Manager *s, FILE *f, const char *prefix);
|
|
||||||
void manager_dump(Manager *s, FILE *f, const char *prefix);
|
|
||||||
int manager_get_dump_string(Manager *m, char **ret);
|
|
||||||
void manager_test_summary(Manager *m);
|
|
||||||
@ -55,7 +55,6 @@
|
|||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "macro.h"
|
#include "macro.h"
|
||||||
#include "manager.h"
|
#include "manager.h"
|
||||||
#include "manager-dump.h"
|
|
||||||
#include "memory-util.h"
|
#include "memory-util.h"
|
||||||
#include "mkdir.h"
|
#include "mkdir.h"
|
||||||
#include "parse-util.h"
|
#include "parse-util.h"
|
||||||
@ -2155,6 +2154,74 @@ int manager_load_startable_unit_or_warn(
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void manager_dump_jobs(Manager *s, FILE *f, const char *prefix) {
|
||||||
|
Job *j;
|
||||||
|
|
||||||
|
assert(s);
|
||||||
|
assert(f);
|
||||||
|
|
||||||
|
HASHMAP_FOREACH(j, s->jobs)
|
||||||
|
job_dump(j, f, prefix);
|
||||||
|
}
|
||||||
|
|
||||||
|
void manager_dump_units(Manager *s, FILE *f, const char *prefix) {
|
||||||
|
Unit *u;
|
||||||
|
const char *t;
|
||||||
|
|
||||||
|
assert(s);
|
||||||
|
assert(f);
|
||||||
|
|
||||||
|
HASHMAP_FOREACH_KEY(u, t, s->units)
|
||||||
|
if (u->id == t)
|
||||||
|
unit_dump(u, f, prefix);
|
||||||
|
}
|
||||||
|
|
||||||
|
void manager_dump(Manager *m, FILE *f, const char *prefix) {
|
||||||
|
assert(m);
|
||||||
|
assert(f);
|
||||||
|
|
||||||
|
for (ManagerTimestamp q = 0; q < _MANAGER_TIMESTAMP_MAX; q++) {
|
||||||
|
const dual_timestamp *t = m->timestamps + q;
|
||||||
|
char buf[CONST_MAX(FORMAT_TIMESPAN_MAX, FORMAT_TIMESTAMP_MAX)];
|
||||||
|
|
||||||
|
if (dual_timestamp_is_set(t))
|
||||||
|
fprintf(f, "%sTimestamp %s: %s\n",
|
||||||
|
strempty(prefix),
|
||||||
|
manager_timestamp_to_string(q),
|
||||||
|
timestamp_is_set(t->realtime) ? format_timestamp(buf, sizeof buf, t->realtime) :
|
||||||
|
format_timespan(buf, sizeof buf, t->monotonic, 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
manager_dump_units(m, f, prefix);
|
||||||
|
manager_dump_jobs(m, f, prefix);
|
||||||
|
}
|
||||||
|
|
||||||
|
int manager_get_dump_string(Manager *m, char **ret) {
|
||||||
|
_cleanup_free_ char *dump = NULL;
|
||||||
|
_cleanup_fclose_ FILE *f = NULL;
|
||||||
|
size_t size;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
assert(m);
|
||||||
|
assert(ret);
|
||||||
|
|
||||||
|
f = open_memstream_unlocked(&dump, &size);
|
||||||
|
if (!f)
|
||||||
|
return -errno;
|
||||||
|
|
||||||
|
manager_dump(m, f, NULL);
|
||||||
|
|
||||||
|
r = fflush_and_check(f);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
f = safe_fclose(f);
|
||||||
|
|
||||||
|
*ret = TAKE_PTR(dump);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void manager_clear_jobs(Manager *m) {
|
void manager_clear_jobs(Manager *m) {
|
||||||
Job *j;
|
Job *j;
|
||||||
|
|
||||||
|
|||||||
@ -485,6 +485,11 @@ int manager_add_job_by_name(Manager *m, JobType type, const char *name, JobMode
|
|||||||
int manager_add_job_by_name_and_warn(Manager *m, JobType type, const char *name, JobMode mode, Set *affected_jobs, Job **ret);
|
int manager_add_job_by_name_and_warn(Manager *m, JobType type, const char *name, JobMode mode, Set *affected_jobs, Job **ret);
|
||||||
int manager_propagate_reload(Manager *m, Unit *unit, JobMode mode, sd_bus_error *e);
|
int manager_propagate_reload(Manager *m, Unit *unit, JobMode mode, sd_bus_error *e);
|
||||||
|
|
||||||
|
void manager_dump_units(Manager *s, FILE *f, const char *prefix);
|
||||||
|
void manager_dump_jobs(Manager *s, FILE *f, const char *prefix);
|
||||||
|
void manager_dump(Manager *s, FILE *f, const char *prefix);
|
||||||
|
int manager_get_dump_string(Manager *m, char **ret);
|
||||||
|
|
||||||
void manager_clear_jobs(Manager *m);
|
void manager_clear_jobs(Manager *m);
|
||||||
|
|
||||||
void manager_unwatch_pid(Manager *m, pid_t pid);
|
void manager_unwatch_pid(Manager *m, pid_t pid);
|
||||||
|
|||||||
@ -85,8 +85,6 @@ libcore_sources = '''
|
|||||||
locale-setup.h
|
locale-setup.h
|
||||||
manager.c
|
manager.c
|
||||||
manager.h
|
manager.h
|
||||||
manager-dump.c
|
|
||||||
manager-dump.h
|
|
||||||
mount.c
|
mount.c
|
||||||
mount.h
|
mount.h
|
||||||
namespace.c
|
namespace.c
|
||||||
|
|||||||
@ -152,7 +152,7 @@ sd_int strverscmp_improved(const sd_char *a, const sd_char *b) {
|
|||||||
* Note that except for '~' prefixed segments, a string has more segments is newer.
|
* Note that except for '~' prefixed segments, a string has more segments is newer.
|
||||||
* So, this check must be after the '~' check. */
|
* So, this check must be after the '~' check. */
|
||||||
if (*a == '\0' || *b == '\0')
|
if (*a == '\0' || *b == '\0')
|
||||||
return CMP(*a, *b);
|
return strcmp(a, b);
|
||||||
|
|
||||||
/* Handle '-', which separates version and release, e.g 123.4-3.1.fc33.x86_64 */
|
/* Handle '-', which separates version and release, e.g 123.4-3.1.fc33.x86_64 */
|
||||||
if (*a == '-' || *b == '-') {
|
if (*a == '-' || *b == '-') {
|
||||||
@ -194,9 +194,9 @@ sd_int strverscmp_improved(const sd_char *a, const sd_char *b) {
|
|||||||
|
|
||||||
/* Find the leading numeric segments. One may be an empty string. So,
|
/* Find the leading numeric segments. One may be an empty string. So,
|
||||||
* numeric segments are always newer than alpha segments. */
|
* numeric segments are always newer than alpha segments. */
|
||||||
for (aa = a; isdigit(*aa); aa++)
|
for (aa = a; *aa != '\0' && isdigit(*aa); aa++)
|
||||||
;
|
;
|
||||||
for (bb = b; isdigit(*bb); bb++)
|
for (bb = b; *bb != '\0' && isdigit(*bb); bb++)
|
||||||
;
|
;
|
||||||
|
|
||||||
/* To compare numeric segments without parsing their values, first compare the
|
/* To compare numeric segments without parsing their values, first compare the
|
||||||
@ -211,9 +211,9 @@ sd_int strverscmp_improved(const sd_char *a, const sd_char *b) {
|
|||||||
return r;
|
return r;
|
||||||
} else {
|
} else {
|
||||||
/* Find the leading non-numeric segments. */
|
/* Find the leading non-numeric segments. */
|
||||||
for (aa = a; is_alpha(*aa); aa++)
|
for (aa = a; *aa != '\0' && is_alpha(*aa); aa++)
|
||||||
;
|
;
|
||||||
for (bb = b; is_alpha(*bb); bb++)
|
for (bb = b; *bb != '\0' && is_alpha(*bb); bb++)
|
||||||
;
|
;
|
||||||
|
|
||||||
/* Note that the segments are usually not NUL-terminated. */
|
/* Note that the segments are usually not NUL-terminated. */
|
||||||
|
|||||||
@ -743,7 +743,6 @@ int device_rename(sd_device *device, const char *name) {
|
|||||||
|
|
||||||
int device_shallow_clone(sd_device *old_device, sd_device **new_device) {
|
int device_shallow_clone(sd_device *old_device, sd_device **new_device) {
|
||||||
_cleanup_(sd_device_unrefp) sd_device *ret = NULL;
|
_cleanup_(sd_device_unrefp) sd_device *ret = NULL;
|
||||||
const char *subsystem;
|
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(old_device);
|
assert(old_device);
|
||||||
@ -757,12 +756,9 @@ int device_shallow_clone(sd_device *old_device, sd_device **new_device) {
|
|||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
if (sd_device_get_subsystem(old_device, &subsystem) >= 0) {
|
r = device_set_subsystem(ret, old_device->subsystem);
|
||||||
r = device_set_subsystem(ret, subsystem);
|
if (r < 0)
|
||||||
if (r < 0)
|
return r;
|
||||||
return r;
|
|
||||||
} else
|
|
||||||
ret->subsystem_set = true;
|
|
||||||
|
|
||||||
ret->devnum = old_device->devnum;
|
ret->devnum = old_device->devnum;
|
||||||
|
|
||||||
|
|||||||
@ -221,11 +221,11 @@ DEFINE_PRIVATE_STRING_TABLE_LOOKUP_TO_STRING(varlink_state, VarlinkState);
|
|||||||
log_debug("%s: " fmt, varlink_server_description(s), ##__VA_ARGS__)
|
log_debug("%s: " fmt, varlink_server_description(s), ##__VA_ARGS__)
|
||||||
|
|
||||||
static inline const char *varlink_description(Varlink *v) {
|
static inline const char *varlink_description(Varlink *v) {
|
||||||
return (v ? v->description : NULL) ?: "varlink";
|
return strna(v ? v->description : NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline const char *varlink_server_description(VarlinkServer *s) {
|
static inline const char *varlink_server_description(VarlinkServer *s) {
|
||||||
return (s ? s->description : NULL) ?: "varlink";
|
return strna(s ? s->description : NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void varlink_set_state(Varlink *v, VarlinkState state) {
|
static void varlink_set_state(Varlink *v, VarlinkState state) {
|
||||||
@ -233,10 +233,10 @@ static void varlink_set_state(Varlink *v, VarlinkState state) {
|
|||||||
assert(state >= 0 && state < _VARLINK_STATE_MAX);
|
assert(state >= 0 && state < _VARLINK_STATE_MAX);
|
||||||
|
|
||||||
if (v->state < 0)
|
if (v->state < 0)
|
||||||
varlink_log(v, "Setting state %s",
|
varlink_log(v, "varlink: setting state %s",
|
||||||
varlink_state_to_string(state));
|
varlink_state_to_string(state));
|
||||||
else
|
else
|
||||||
varlink_log(v, "Changing state %s → %s",
|
varlink_log(v, "varlink: changing state %s → %s",
|
||||||
varlink_state_to_string(v->state),
|
varlink_state_to_string(v->state),
|
||||||
varlink_state_to_string(state));
|
varlink_state_to_string(state));
|
||||||
|
|
||||||
|
|||||||
@ -5,7 +5,6 @@
|
|||||||
|
|
||||||
#include "bus-util.h"
|
#include "bus-util.h"
|
||||||
#include "manager.h"
|
#include "manager.h"
|
||||||
#include "manager-dump.h"
|
|
||||||
#include "rm-rf.h"
|
#include "rm-rf.h"
|
||||||
#include "service.h"
|
#include "service.h"
|
||||||
#include "special.h"
|
#include "special.h"
|
||||||
|
|||||||
@ -298,11 +298,8 @@ static int builtin_blkid(sd_device *dev, int argc, char *argv[], bool test) {
|
|||||||
return log_device_debug_errno(dev, r, "Failed to get device name: %m");
|
return log_device_debug_errno(dev, r, "Failed to get device name: %m");
|
||||||
|
|
||||||
fd = open(devnode, O_RDONLY|O_CLOEXEC|O_NONBLOCK);
|
fd = open(devnode, O_RDONLY|O_CLOEXEC|O_NONBLOCK);
|
||||||
if (fd < 0) {
|
if (fd < 0)
|
||||||
log_device_debug_errno(dev, errno, "Failed to open block device %s%s: %m",
|
return log_device_debug_errno(dev, errno, "Failed to open block device %s: %m", devnode);
|
||||||
devnode, errno == ENOENT ? ", ignoring" : "");
|
|
||||||
return errno == ENOENT ? 0 : -errno;
|
|
||||||
}
|
|
||||||
|
|
||||||
errno = 0;
|
errno = 0;
|
||||||
r = blkid_probe_set_device(pr, fd, offset, 0);
|
r = blkid_probe_set_device(pr, fd, offset, 0);
|
||||||
|
|||||||
@ -228,23 +228,18 @@ static size_t escape_path(const char *src, char *dest, size_t size) {
|
|||||||
/* manage "stack of names" with possibly specified device priorities */
|
/* manage "stack of names" with possibly specified device priorities */
|
||||||
static int link_update(sd_device *dev, const char *slink, bool add) {
|
static int link_update(sd_device *dev, const char *slink, bool add) {
|
||||||
_cleanup_free_ char *filename = NULL, *dirname = NULL;
|
_cleanup_free_ char *filename = NULL, *dirname = NULL;
|
||||||
const char *slink_name, *id;
|
|
||||||
char name_enc[PATH_MAX];
|
char name_enc[PATH_MAX];
|
||||||
|
const char *id;
|
||||||
int i, r, retries;
|
int i, r, retries;
|
||||||
|
|
||||||
assert(dev);
|
assert(dev);
|
||||||
assert(slink);
|
assert(slink);
|
||||||
|
|
||||||
slink_name = path_startswith(slink, "/dev");
|
|
||||||
if (!slink_name)
|
|
||||||
return log_device_debug_errno(dev, SYNTHETIC_ERRNO(EINVAL),
|
|
||||||
"Invalid symbolic link of device node: %s", slink);
|
|
||||||
|
|
||||||
r = device_get_device_id(dev, &id);
|
r = device_get_device_id(dev, &id);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return log_device_debug_errno(dev, r, "Failed to get device id: %m");
|
return log_device_debug_errno(dev, r, "Failed to get device id: %m");
|
||||||
|
|
||||||
escape_path(slink_name, name_enc, sizeof(name_enc));
|
escape_path(slink + STRLEN("/dev"), name_enc, sizeof(name_enc));
|
||||||
dirname = path_join("/run/udev/links/", name_enc);
|
dirname = path_join("/run/udev/links/", name_enc);
|
||||||
if (!dirname)
|
if (!dirname)
|
||||||
return log_oom();
|
return log_oom();
|
||||||
@ -344,11 +339,7 @@ int udev_node_update_old_links(sd_device *dev, sd_device *dev_old) {
|
|||||||
|
|
||||||
log_device_debug(dev, "Updating old name, '%s' no longer belonging to '%s'",
|
log_device_debug(dev, "Updating old name, '%s' no longer belonging to '%s'",
|
||||||
name, devpath);
|
name, devpath);
|
||||||
r = link_update(dev, name, false);
|
link_update(dev, name, false);
|
||||||
if (r < 0)
|
|
||||||
log_device_warning_errno(dev, r,
|
|
||||||
"Failed to update device symlink '%s', ignoring: %m",
|
|
||||||
name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -539,9 +530,7 @@ int udev_node_add(sd_device *dev, bool apply,
|
|||||||
FOREACH_DEVICE_DEVLINK(dev, devlink) {
|
FOREACH_DEVICE_DEVLINK(dev, devlink) {
|
||||||
r = link_update(dev, devlink, true);
|
r = link_update(dev, devlink, true);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
log_device_warning_errno(dev, r,
|
log_device_info_errno(dev, r, "Failed to update device symlinks: %m");
|
||||||
"Failed to update device symlink '%s', ignoring: %m",
|
|
||||||
devlink);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -558,9 +547,7 @@ int udev_node_remove(sd_device *dev) {
|
|||||||
FOREACH_DEVICE_DEVLINK(dev, devlink) {
|
FOREACH_DEVICE_DEVLINK(dev, devlink) {
|
||||||
r = link_update(dev, devlink, false);
|
r = link_update(dev, devlink, false);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
log_device_warning_errno(dev, r,
|
log_device_info_errno(dev, r, "Failed to update device symlinks: %m");
|
||||||
"Failed to update device symlink '%s', ignoring: %m",
|
|
||||||
devlink);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
r = xsprintf_dev_num_path_from_sd_device(dev, &filename);
|
r = xsprintf_dev_num_path_from_sd_device(dev, &filename);
|
||||||
|
|||||||
@ -83,14 +83,11 @@ int udev_watch_begin(int inotify_fd, sd_device *dev) {
|
|||||||
log_device_debug(dev, "Adding watch on '%s'", devnode);
|
log_device_debug(dev, "Adding watch on '%s'", devnode);
|
||||||
wd = inotify_add_watch(inotify_fd, devnode, IN_CLOSE_WRITE);
|
wd = inotify_add_watch(inotify_fd, devnode, IN_CLOSE_WRITE);
|
||||||
if (wd < 0) {
|
if (wd < 0) {
|
||||||
bool ignore = errno == ENOENT;
|
r = log_device_full_errno(dev, errno == ENOENT ? LOG_DEBUG : LOG_WARNING,
|
||||||
|
errno, "Failed to add device '%s' to watch: %m", devnode);
|
||||||
r = log_device_full_errno(dev, ignore ? LOG_DEBUG : LOG_WARNING, errno,
|
|
||||||
"Failed to add device '%s' to watch%s: %m",
|
|
||||||
devnode, ignore ? ", ignoring" : "");
|
|
||||||
|
|
||||||
(void) device_set_watch_handle(dev, -1);
|
(void) device_set_watch_handle(dev, -1);
|
||||||
return ignore ? 0 : r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
r = device_set_watch_handle(dev, wd);
|
r = device_set_watch_handle(dev, wd);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user