when determining unit file list, include invalid unit names in an "invalid" state
This commit is contained in:
parent
802840582c
commit
b5b46d5995
|
@ -1,3 +1,4 @@
|
|||
/test-unit-file
|
||||
/test-log
|
||||
/test-journal-verify
|
||||
/test-journal-match
|
||||
|
|
12
Makefile.am
12
Makefile.am
|
@ -1120,13 +1120,15 @@ noinst_PROGRAMS += \
|
|||
test-install \
|
||||
test-watchdog \
|
||||
test-unit-name \
|
||||
test-log
|
||||
test-log \
|
||||
test-unit-file
|
||||
|
||||
TESTS += \
|
||||
test-job-type \
|
||||
test-env-replace \
|
||||
test-strv \
|
||||
test-unit-name
|
||||
test-unit-name \
|
||||
test-unit-file
|
||||
|
||||
test_engine_SOURCES = \
|
||||
src/test/test-engine.c
|
||||
|
@ -1176,6 +1178,12 @@ test_unit_name_SOURCES = \
|
|||
test_unit_name_LDADD = \
|
||||
libsystemd-core.la
|
||||
|
||||
test_unit_file_SOURCES = \
|
||||
src/test/test-unit-file.c
|
||||
|
||||
test_unit_file_LDADD = \
|
||||
libsystemd-core.la
|
||||
|
||||
test_log_SOURCES = \
|
||||
src/test/test-log.c
|
||||
|
||||
|
|
2
TODO
2
TODO
|
@ -49,6 +49,8 @@ Bugfixes:
|
|||
|
||||
Features:
|
||||
|
||||
* Document word splitting syntax for ExecStart= and friends
|
||||
|
||||
* merge: github.com/systemd/python-systemd
|
||||
|
||||
* when writing journal entries order field items by their address to improve speed on rotating media
|
||||
|
|
|
@ -1999,29 +1999,28 @@ int unit_file_get_list(
|
|||
}
|
||||
|
||||
r = find_symlinks_in_scope(scope, root_dir, de->d_name, &f->state);
|
||||
if (r < 0) {
|
||||
free(f->path);
|
||||
free(f);
|
||||
goto finish;
|
||||
} else if (r > 0)
|
||||
goto found;
|
||||
|
||||
r = unit_file_can_install(&paths, root_dir, f->path, true);
|
||||
if (r < 0) {
|
||||
free(f->path);
|
||||
free(f);
|
||||
goto finish;
|
||||
} else if (r > 0) {
|
||||
f->state = UNIT_FILE_DISABLED;
|
||||
goto found;
|
||||
} else {
|
||||
f->state = UNIT_FILE_STATIC;
|
||||
f->state = UNIT_FILE_ENABLED;
|
||||
goto found;
|
||||
}
|
||||
|
||||
free(f->path);
|
||||
free(f);
|
||||
continue;
|
||||
r = unit_file_can_install(&paths, root_dir, f->path, true);
|
||||
if (r == -EINVAL || /* Invalid setting? */
|
||||
r == -EBADMSG || /* Invalid format? */
|
||||
r == -ENOENT /* Included file not found? */)
|
||||
f->state = UNIT_FILE_INVALID;
|
||||
else if (r < 0) {
|
||||
free(f->path);
|
||||
free(f);
|
||||
goto finish;
|
||||
} else if (r > 0)
|
||||
f->state = UNIT_FILE_DISABLED;
|
||||
else
|
||||
f->state = UNIT_FILE_STATIC;
|
||||
|
||||
found:
|
||||
r = hashmap_put(h, path_get_file_name(f->path), f);
|
||||
|
@ -2051,7 +2050,8 @@ static const char* const unit_file_state_table[_UNIT_FILE_STATE_MAX] = {
|
|||
[UNIT_FILE_MASKED] = "masked",
|
||||
[UNIT_FILE_MASKED_RUNTIME] = "masked-runtime",
|
||||
[UNIT_FILE_STATIC] = "static",
|
||||
[UNIT_FILE_DISABLED] = "disabled"
|
||||
[UNIT_FILE_DISABLED] = "disabled",
|
||||
[UNIT_FILE_INVALID] = "invalid",
|
||||
};
|
||||
|
||||
DEFINE_STRING_TABLE_LOOKUP(unit_file_state, UnitFileState);
|
||||
|
|
|
@ -40,6 +40,7 @@ typedef enum UnitFileState {
|
|||
UNIT_FILE_MASKED_RUNTIME,
|
||||
UNIT_FILE_STATIC,
|
||||
UNIT_FILE_DISABLED,
|
||||
UNIT_FILE_INVALID,
|
||||
_UNIT_FILE_STATE_MAX,
|
||||
_UNIT_FILE_STATE_INVALID = -1
|
||||
} UnitFileState;
|
||||
|
|
|
@ -585,7 +585,8 @@ static void output_unit_file_list(const UnitFileList *units, unsigned c) {
|
|||
|
||||
if (u->state == UNIT_FILE_MASKED ||
|
||||
u->state == UNIT_FILE_MASKED_RUNTIME ||
|
||||
u->state == UNIT_FILE_DISABLED) {
|
||||
u->state == UNIT_FILE_DISABLED ||
|
||||
u->state == UNIT_FILE_INVALID) {
|
||||
on = ansi_highlight_red(true);
|
||||
off = ansi_highlight_red(false);
|
||||
} else if (u->state == UNIT_FILE_ENABLED) {
|
||||
|
|
|
@ -0,0 +1,52 @@
|
|||
/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
|
||||
|
||||
/***
|
||||
This file is part of systemd.
|
||||
|
||||
Copyright 2012 Lennart Poettering
|
||||
|
||||
systemd is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU Lesser General Public License as published by
|
||||
the Free Software Foundation; either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
systemd is distributed in the hope that it will be useful, but
|
||||
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||
***/
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <stddef.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "install.h"
|
||||
#include "util.h"
|
||||
#include "macro.h"
|
||||
#include "hashmap.h"
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
|
||||
int r;
|
||||
Hashmap *h;
|
||||
Iterator i;
|
||||
UnitFileList *p;
|
||||
|
||||
h = hashmap_new(string_hash_func, string_compare_func);
|
||||
assert(h);
|
||||
|
||||
r = unit_file_get_list(UNIT_FILE_SYSTEM, NULL, h);
|
||||
log_info("%s", strerror(-r));
|
||||
assert(r >= 0);
|
||||
|
||||
HASHMAP_FOREACH(p, h, i)
|
||||
printf("%s = %s\n", p->path, unit_file_state_to_string(p->state));
|
||||
|
||||
unit_file_list_free(h);
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue