mirror of
https://github.com/systemd/systemd.git
synced 2024-10-31 16:21:26 +03:00
Merge pull request #18651 from poettering/einval-followup
two follow-up fixes for the enum einvalification
This commit is contained in:
commit
a63b54eda5
@ -2062,9 +2062,9 @@ static int install_error(
|
||||
|
||||
for (size_t i = 0; i < n_changes; i++)
|
||||
|
||||
switch(changes[i].type) {
|
||||
switch(changes[i].type_or_errno) {
|
||||
|
||||
case 0 ... INT_MAX:
|
||||
case 0 ... _UNIT_FILE_CHANGE_TYPE_MAX: /* not errors */
|
||||
continue;
|
||||
|
||||
case -EEXIST:
|
||||
@ -2106,7 +2106,8 @@ static int install_error(
|
||||
goto found;
|
||||
|
||||
default:
|
||||
r = sd_bus_error_set_errnof(error, changes[i].type, "File %s: %m", changes[i].path);
|
||||
assert(changes[i].type_or_errno < 0); /* other errors */
|
||||
r = sd_bus_error_set_errnof(error, changes[i].type_or_errno, "File %s: %m", changes[i].path);
|
||||
goto found;
|
||||
}
|
||||
|
||||
@ -2151,14 +2152,14 @@ static int reply_unit_file_changes_and_free(
|
||||
|
||||
for (size_t i = 0; i < n_changes; i++) {
|
||||
|
||||
if (changes[i].type < 0) {
|
||||
if (changes[i].type_or_errno < 0) {
|
||||
bad = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
r = sd_bus_message_append(
|
||||
reply, "(sss)",
|
||||
unit_file_change_type_to_string(changes[i].type),
|
||||
unit_file_change_type_to_string(changes[i].type_or_errno),
|
||||
changes[i].path,
|
||||
changes[i].source);
|
||||
if (r < 0)
|
||||
@ -2542,7 +2543,7 @@ static int method_get_unit_file_links(sd_bus_message *message, void *userdata, s
|
||||
return log_error_errno(r, "Failed to get file links for %s: %m", name);
|
||||
|
||||
for (i = 0; i < n_changes; i++)
|
||||
if (changes[i].type == UNIT_FILE_UNLINK) {
|
||||
if (changes[i].type_or_errno == UNIT_FILE_UNLINK) {
|
||||
r = sd_bus_message_append(reply, "s", changes[i].path);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include "dirent-util.h"
|
||||
#include "discover-image.h"
|
||||
#include "dissect-image.h"
|
||||
#include "errno-list.h"
|
||||
#include "fd-util.h"
|
||||
#include "fileio.h"
|
||||
#include "fs-util.h"
|
||||
@ -591,7 +592,7 @@ static int unit_file_is_active(
|
||||
static int portable_changes_add(
|
||||
PortableChange **changes,
|
||||
size_t *n_changes,
|
||||
PortableChangeType type,
|
||||
int type_or_errno, /* PORTABLE_COPY, PORTABLE_SYMLINK, … if positive, or errno if negative */
|
||||
const char *path,
|
||||
const char *source) {
|
||||
|
||||
@ -601,6 +602,11 @@ static int portable_changes_add(
|
||||
assert(path);
|
||||
assert(!changes == !n_changes);
|
||||
|
||||
if (type_or_errno >= 0)
|
||||
assert(type_or_errno < _PORTABLE_CHANGE_TYPE_MAX);
|
||||
else
|
||||
assert(type_or_errno >= -ERRNO_MAX);
|
||||
|
||||
if (!changes)
|
||||
return 0;
|
||||
|
||||
@ -624,7 +630,7 @@ static int portable_changes_add(
|
||||
}
|
||||
|
||||
c[(*n_changes)++] = (PortableChange) {
|
||||
.type = type,
|
||||
.type_or_errno = type_or_errno,
|
||||
.path = TAKE_PTR(p),
|
||||
.source = TAKE_PTR(s),
|
||||
};
|
||||
@ -635,7 +641,7 @@ static int portable_changes_add(
|
||||
static int portable_changes_add_with_prefix(
|
||||
PortableChange **changes,
|
||||
size_t *n_changes,
|
||||
PortableChangeType type,
|
||||
int type_or_errno,
|
||||
const char *prefix,
|
||||
const char *path,
|
||||
const char *source) {
|
||||
@ -653,7 +659,7 @@ static int portable_changes_add_with_prefix(
|
||||
source = prefix_roota(prefix, source);
|
||||
}
|
||||
|
||||
return portable_changes_add(changes, n_changes, type, path, source);
|
||||
return portable_changes_add(changes, n_changes, type_or_errno, path, source);
|
||||
}
|
||||
|
||||
void portable_changes_free(PortableChange *changes, size_t n_changes) {
|
||||
@ -1417,7 +1423,7 @@ static const char* const portable_change_type_table[_PORTABLE_CHANGE_TYPE_MAX] =
|
||||
[PORTABLE_WRITE] = "write",
|
||||
};
|
||||
|
||||
DEFINE_STRING_TABLE_LOOKUP(portable_change_type, PortableChangeType);
|
||||
DEFINE_STRING_TABLE_LOOKUP(portable_change_type, int);
|
||||
|
||||
static const char* const portable_state_table[_PORTABLE_STATE_MAX] = {
|
||||
[PORTABLE_DETACHED] = "detached",
|
||||
|
@ -24,7 +24,9 @@ typedef enum PortableFlags {
|
||||
PORTABLE_REATTACH = 1 << 3,
|
||||
} PortableFlags;
|
||||
|
||||
typedef enum PortableChangeType {
|
||||
/* This enum is anonymous, since we usually store it in an 'int', as we overload it with negative errno
|
||||
* values. */
|
||||
enum {
|
||||
PORTABLE_COPY,
|
||||
PORTABLE_SYMLINK,
|
||||
PORTABLE_UNLINK,
|
||||
@ -32,7 +34,7 @@ typedef enum PortableChangeType {
|
||||
PORTABLE_MKDIR,
|
||||
_PORTABLE_CHANGE_TYPE_MAX,
|
||||
_PORTABLE_CHANGE_TYPE_INVALID = -EINVAL,
|
||||
} PortableChangeType;
|
||||
};
|
||||
|
||||
typedef enum PortableState {
|
||||
PORTABLE_DETACHED,
|
||||
@ -47,7 +49,7 @@ typedef enum PortableState {
|
||||
} PortableState;
|
||||
|
||||
typedef struct PortableChange {
|
||||
int type; /* PortableFileChangeType or negative error number */
|
||||
int type_or_errno; /* PORTABLE_COPY, PORTABLE_SYMLINK, … if positive, errno if negative */
|
||||
char *path;
|
||||
char *source;
|
||||
} PortableChange;
|
||||
@ -68,8 +70,8 @@ int portable_get_profiles(char ***ret);
|
||||
|
||||
void portable_changes_free(PortableChange *changes, size_t n_changes);
|
||||
|
||||
const char *portable_change_type_to_string(PortableChangeType t) _const_;
|
||||
PortableChangeType portable_change_type_from_string(const char *t) _pure_;
|
||||
const char *portable_change_type_to_string(int t) _const_;
|
||||
int portable_change_type_from_string(const char *t) _pure_;
|
||||
|
||||
const char *portable_state_to_string(PortableState t) _const_;
|
||||
PortableState portable_state_from_string(const char *t) _pure_;
|
||||
|
@ -457,8 +457,11 @@ static int reply_portable_compose_message(sd_bus_message *reply, const PortableC
|
||||
return r;
|
||||
|
||||
for (i = 0; i < n_changes; i++) {
|
||||
if (changes[i].type_or_errno < 0)
|
||||
continue;
|
||||
|
||||
r = sd_bus_message_append(reply, "(sss)",
|
||||
portable_change_type_to_string(changes[i].type),
|
||||
portable_change_type_to_string(changes[i].type_or_errno),
|
||||
changes[i].path,
|
||||
changes[i].source);
|
||||
if (r < 0)
|
||||
|
@ -483,7 +483,7 @@ static int normalize_portable_changes(
|
||||
}
|
||||
|
||||
changes[n_changes++] = (PortableChange) {
|
||||
.type = changes_detached[i].type,
|
||||
.type_or_errno = changes_detached[i].type_or_errno,
|
||||
.path = TAKE_PTR(path),
|
||||
.source = TAKE_PTR(source),
|
||||
};
|
||||
|
@ -2388,7 +2388,7 @@ int bus_deserialize_and_dump_unit_file_changes(sd_bus_message *m, bool quiet, Un
|
||||
while ((r = sd_bus_message_read(m, "(sss)", &type, &path, &source)) > 0) {
|
||||
/* We expect only "success" changes to be sent over the bus.
|
||||
Hence, reject anything negative. */
|
||||
UnitFileChangeType ch = unit_file_change_type_from_string(type);
|
||||
int ch = unit_file_change_type_from_string(type);
|
||||
if (ch < 0) {
|
||||
log_notice_errno(ch, "Manager reported unknown change type \"%s\" for path \"%s\", ignoring.",
|
||||
type, path);
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include "conf-parser.h"
|
||||
#include "def.h"
|
||||
#include "dirent-util.h"
|
||||
#include "errno-list.h"
|
||||
#include "extract-word.h"
|
||||
#include "fd-util.h"
|
||||
#include "fileio.h"
|
||||
@ -261,7 +262,7 @@ static const char* config_path_from_flags(const LookupPaths *paths, UnitFileFlag
|
||||
int unit_file_changes_add(
|
||||
UnitFileChange **changes,
|
||||
size_t *n_changes,
|
||||
int type,
|
||||
int type_or_errno, /* UNIT_FILE_SYMLINK, _UNLINK, _IS_MASKED, _IS_DANGLING if positive or errno if negative */
|
||||
const char *path,
|
||||
const char *source) {
|
||||
|
||||
@ -271,6 +272,11 @@ int unit_file_changes_add(
|
||||
assert(path);
|
||||
assert(!changes == !n_changes);
|
||||
|
||||
if (type_or_errno >= 0)
|
||||
assert(type_or_errno < _UNIT_FILE_CHANGE_TYPE_MAX);
|
||||
else
|
||||
assert(type_or_errno >= -ERRNO_MAX);
|
||||
|
||||
if (!changes)
|
||||
return 0;
|
||||
|
||||
@ -280,19 +286,25 @@ int unit_file_changes_add(
|
||||
*changes = c;
|
||||
|
||||
p = strdup(path);
|
||||
if (source)
|
||||
s = strdup(source);
|
||||
|
||||
if (!p || (source && !s))
|
||||
if (!p)
|
||||
return -ENOMEM;
|
||||
|
||||
path_simplify(p, false);
|
||||
if (s)
|
||||
path_simplify(s, false);
|
||||
|
||||
c[*n_changes] = (UnitFileChange) { type, p, s };
|
||||
p = s = NULL;
|
||||
(*n_changes) ++;
|
||||
if (source) {
|
||||
s = strdup(source);
|
||||
if (!s)
|
||||
return -ENOMEM;
|
||||
|
||||
path_simplify(s, false);
|
||||
}
|
||||
|
||||
c[(*n_changes)++] = (UnitFileChange) {
|
||||
.type_or_errno = type_or_errno,
|
||||
.path = TAKE_PTR(p),
|
||||
.source = TAKE_PTR(s),
|
||||
};
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -315,9 +327,9 @@ void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *chang
|
||||
assert(verb || r >= 0);
|
||||
|
||||
for (size_t i = 0; i < n_changes; i++) {
|
||||
assert(verb || changes[i].type >= 0);
|
||||
assert(verb || changes[i].type_or_errno >= 0);
|
||||
|
||||
switch(changes[i].type) {
|
||||
switch(changes[i].type_or_errno) {
|
||||
case UNIT_FILE_SYMLINK:
|
||||
if (!quiet)
|
||||
log_info("Created symlink %s %s %s.",
|
||||
@ -340,45 +352,45 @@ void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *chang
|
||||
break;
|
||||
case -EEXIST:
|
||||
if (changes[i].source)
|
||||
log_error_errno(changes[i].type,
|
||||
log_error_errno(changes[i].type_or_errno,
|
||||
"Failed to %s unit, file %s already exists and is a symlink to %s.",
|
||||
verb, changes[i].path, changes[i].source);
|
||||
else
|
||||
log_error_errno(changes[i].type,
|
||||
log_error_errno(changes[i].type_or_errno,
|
||||
"Failed to %s unit, file %s already exists.",
|
||||
verb, changes[i].path);
|
||||
logged = true;
|
||||
break;
|
||||
case -ERFKILL:
|
||||
log_error_errno(changes[i].type, "Failed to %s unit, unit %s is masked.",
|
||||
log_error_errno(changes[i].type_or_errno, "Failed to %s unit, unit %s is masked.",
|
||||
verb, changes[i].path);
|
||||
logged = true;
|
||||
break;
|
||||
case -EADDRNOTAVAIL:
|
||||
log_error_errno(changes[i].type, "Failed to %s unit, unit %s is transient or generated.",
|
||||
log_error_errno(changes[i].type_or_errno, "Failed to %s unit, unit %s is transient or generated.",
|
||||
verb, changes[i].path);
|
||||
logged = true;
|
||||
break;
|
||||
case -EUCLEAN:
|
||||
log_error_errno(changes[i].type,
|
||||
log_error_errno(changes[i].type_or_errno,
|
||||
"Failed to %s unit, \"%s\" is not a valid unit name.",
|
||||
verb, changes[i].path);
|
||||
logged = true;
|
||||
break;
|
||||
case -ELOOP:
|
||||
log_error_errno(changes[i].type, "Failed to %s unit, refusing to operate on linked unit file %s",
|
||||
log_error_errno(changes[i].type_or_errno, "Failed to %s unit, refusing to operate on linked unit file %s",
|
||||
verb, changes[i].path);
|
||||
logged = true;
|
||||
break;
|
||||
|
||||
case -ENOENT:
|
||||
log_error_errno(changes[i].type, "Failed to %s unit, unit %s does not exist.", verb, changes[i].path);
|
||||
log_error_errno(changes[i].type_or_errno, "Failed to %s unit, unit %s does not exist.", verb, changes[i].path);
|
||||
logged = true;
|
||||
break;
|
||||
|
||||
default:
|
||||
assert(changes[i].type < 0);
|
||||
log_error_errno(changes[i].type, "Failed to %s unit, file %s: %m.",
|
||||
assert(changes[i].type_or_errno < 0);
|
||||
log_error_errno(changes[i].type_or_errno, "Failed to %s unit, file %s: %m.",
|
||||
verb, changes[i].path);
|
||||
logged = true;
|
||||
}
|
||||
@ -3464,7 +3476,7 @@ static const char* const unit_file_change_type_table[_UNIT_FILE_CHANGE_TYPE_MAX]
|
||||
[UNIT_FILE_IS_DANGLING] = "dangling",
|
||||
};
|
||||
|
||||
DEFINE_STRING_TABLE_LOOKUP(unit_file_change_type, UnitFileChangeType);
|
||||
DEFINE_STRING_TABLE_LOOKUP(unit_file_change_type, int);
|
||||
|
||||
static const char* const unit_file_preset_mode_table[_UNIT_FILE_PRESET_MAX] = {
|
||||
[UNIT_FILE_PRESET_FULL] = "full",
|
||||
|
@ -25,7 +25,9 @@ enum UnitFilePresetMode {
|
||||
_UNIT_FILE_PRESET_INVALID = -EINVAL,
|
||||
};
|
||||
|
||||
enum UnitFileChangeType {
|
||||
/* This enum type is anonymous, since we usually store it in an 'int', as we overload it with negative errno
|
||||
* values. */
|
||||
enum {
|
||||
UNIT_FILE_SYMLINK,
|
||||
UNIT_FILE_UNLINK,
|
||||
UNIT_FILE_IS_MASKED,
|
||||
@ -42,20 +44,18 @@ enum UnitFileFlags {
|
||||
_UNIT_FILE_FLAGS_MASK_PUBLIC = UNIT_FILE_RUNTIME|UNIT_FILE_PORTABLE|UNIT_FILE_FORCE,
|
||||
};
|
||||
|
||||
/* type can either one of the UnitFileChangeTypes listed above, or a negative error.
|
||||
* If source is specified, it should be the contents of the path symlink.
|
||||
* In case of an error, source should be the existing symlink contents or NULL
|
||||
*/
|
||||
/* type can either one of the UNIT_FILE_SYMLINK, UNIT_FILE_UNLINK, … listed above, or a negative errno value.
|
||||
* If source is specified, it should be the contents of the path symlink. In case of an error, source should
|
||||
* be the existing symlink contents or NULL. */
|
||||
struct UnitFileChange {
|
||||
int type; /* UnitFileChangeType or bust */
|
||||
int type_or_errno; /* UNIT_FILE_SYMLINK, … if positive, errno if negative */
|
||||
char *path;
|
||||
char *source;
|
||||
};
|
||||
|
||||
static inline bool unit_file_changes_have_modification(const UnitFileChange* changes, size_t n_changes) {
|
||||
size_t i;
|
||||
for (i = 0; i < n_changes; i++)
|
||||
if (IN_SET(changes[i].type, UNIT_FILE_SYMLINK, UNIT_FILE_UNLINK))
|
||||
for (size_t i = 0; i < n_changes; i++)
|
||||
if (IN_SET(changes[i].type_or_errno, UNIT_FILE_SYMLINK, UNIT_FILE_UNLINK))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
@ -206,8 +206,8 @@ const char *unit_file_state_to_string(UnitFileState s) _const_;
|
||||
UnitFileState unit_file_state_from_string(const char *s) _pure_;
|
||||
/* from_string conversion is unreliable because of the overlap between -EPERM and -1 for error. */
|
||||
|
||||
const char *unit_file_change_type_to_string(UnitFileChangeType s) _const_;
|
||||
UnitFileChangeType unit_file_change_type_from_string(const char *s) _pure_;
|
||||
const char *unit_file_change_type_to_string(int s) _const_;
|
||||
int unit_file_change_type_from_string(const char *s) _pure_;
|
||||
|
||||
const char *unit_file_preset_mode_to_string(UnitFilePresetMode m) _const_;
|
||||
UnitFilePresetMode unit_file_preset_mode_from_string(const char *s) _pure_;
|
||||
|
@ -23,7 +23,7 @@ static int show_installation_targets_client_side(const char *name) {
|
||||
return log_error_errno(r, "Failed to get file links for %s: %m", name);
|
||||
|
||||
for (size_t i = 0; i < n_changes; i++)
|
||||
if (changes[i].type == UNIT_FILE_UNLINK)
|
||||
if (changes[i].type_or_errno == UNIT_FILE_UNLINK)
|
||||
printf(" %s\n", changes[i].path);
|
||||
|
||||
return 0;
|
||||
|
@ -55,7 +55,7 @@ static void test_basic_mask_and_enable(const char *root) {
|
||||
|
||||
assert_se(unit_file_mask(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0);
|
||||
assert_se(n_changes == 1);
|
||||
assert_se(changes[0].type == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
||||
assert_se(streq(changes[0].source, "/dev/null"));
|
||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/a.service");
|
||||
assert_se(streq(changes[0].path, p));
|
||||
@ -75,7 +75,7 @@ static void test_basic_mask_and_enable(const char *root) {
|
||||
|
||||
assert_se(unit_file_unmask(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0);
|
||||
assert_se(n_changes == 1);
|
||||
assert_se(changes[0].type == UNIT_FILE_UNLINK);
|
||||
assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
|
||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/a.service");
|
||||
assert_se(streq(changes[0].path, p));
|
||||
unit_file_changes_free(changes, n_changes);
|
||||
@ -83,7 +83,7 @@ static void test_basic_mask_and_enable(const char *root) {
|
||||
|
||||
assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) == 1);
|
||||
assert_se(n_changes == 1);
|
||||
assert_se(changes[0].type == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/a.service"));
|
||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/a.service");
|
||||
assert_se(streq(changes[0].path, p));
|
||||
@ -103,7 +103,7 @@ static void test_basic_mask_and_enable(const char *root) {
|
||||
|
||||
assert_se(unit_file_disable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0);
|
||||
assert_se(n_changes == 1);
|
||||
assert_se(changes[0].type == UNIT_FILE_UNLINK);
|
||||
assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
|
||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/a.service");
|
||||
assert_se(streq(changes[0].path, p));
|
||||
unit_file_changes_free(changes, n_changes);
|
||||
@ -123,7 +123,7 @@ static void test_basic_mask_and_enable(const char *root) {
|
||||
/* Let's enable this indirectly via a symlink */
|
||||
assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("d.service"), &changes, &n_changes) >= 0);
|
||||
assert_se(n_changes == 1);
|
||||
assert_se(changes[0].type == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/a.service"));
|
||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/a.service");
|
||||
assert_se(streq(changes[0].path, p));
|
||||
@ -139,10 +139,10 @@ static void test_basic_mask_and_enable(const char *root) {
|
||||
|
||||
assert_se(unit_file_reenable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("b.service"), &changes, &n_changes) >= 0);
|
||||
assert_se(n_changes == 2);
|
||||
assert_se(changes[0].type == UNIT_FILE_UNLINK);
|
||||
assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
|
||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/a.service");
|
||||
assert_se(streq(changes[0].path, p));
|
||||
assert_se(changes[1].type == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
|
||||
assert_se(streq(changes[1].source, "/usr/lib/systemd/system/a.service"));
|
||||
assert_se(streq(changes[1].path, p));
|
||||
unit_file_changes_free(changes, n_changes);
|
||||
@ -224,7 +224,7 @@ static void test_linked_units(const char *root) {
|
||||
/* First, let's link the unit into the search path */
|
||||
assert_se(unit_file_link(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("/opt/linked.service"), &changes, &n_changes) >= 0);
|
||||
assert_se(n_changes == 1);
|
||||
assert_se(changes[0].type == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
||||
assert_se(streq(changes[0].source, "/opt/linked.service"));
|
||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked.service");
|
||||
assert_se(streq(changes[0].path, p));
|
||||
@ -236,7 +236,7 @@ static void test_linked_units(const char *root) {
|
||||
/* Let's unlink it from the search path again */
|
||||
assert_se(unit_file_disable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("linked.service"), &changes, &n_changes) >= 0);
|
||||
assert_se(n_changes == 1);
|
||||
assert_se(changes[0].type == UNIT_FILE_UNLINK);
|
||||
assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
|
||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked.service");
|
||||
assert_se(streq(changes[0].path, p));
|
||||
unit_file_changes_free(changes, n_changes);
|
||||
@ -250,7 +250,7 @@ static void test_linked_units(const char *root) {
|
||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/linked.service");
|
||||
q = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked.service");
|
||||
for (i = 0 ; i < n_changes; i++) {
|
||||
assert_se(changes[i].type == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[i].type_or_errno == UNIT_FILE_SYMLINK);
|
||||
assert_se(streq(changes[i].source, "/opt/linked.service"));
|
||||
|
||||
if (p && streq(changes[i].path, p))
|
||||
@ -272,7 +272,7 @@ static void test_linked_units(const char *root) {
|
||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/linked.service");
|
||||
q = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked.service");
|
||||
for (i = 0; i < n_changes; i++) {
|
||||
assert_se(changes[i].type == UNIT_FILE_UNLINK);
|
||||
assert_se(changes[i].type_or_errno == UNIT_FILE_UNLINK);
|
||||
|
||||
if (p && streq(changes[i].path, p))
|
||||
p = NULL;
|
||||
@ -292,7 +292,7 @@ static void test_linked_units(const char *root) {
|
||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/linked2.service");
|
||||
q = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked2.service");
|
||||
for (i = 0 ; i < n_changes; i++) {
|
||||
assert_se(changes[i].type == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[i].type_or_errno == UNIT_FILE_SYMLINK);
|
||||
assert_se(streq(changes[i].source, "/opt/linked2.service"));
|
||||
|
||||
if (p && streq(changes[i].path, p))
|
||||
@ -308,7 +308,7 @@ static void test_linked_units(const char *root) {
|
||||
|
||||
assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("linked3.service"), &changes, &n_changes) >= 0);
|
||||
assert_se(n_changes == 1);
|
||||
assert_se(changes[0].type == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
||||
assert_se(startswith(changes[0].path, root));
|
||||
assert_se(endswith(changes[0].path, "linked3.service"));
|
||||
assert_se(streq(changes[0].source, "/opt/linked3.service"));
|
||||
@ -332,7 +332,7 @@ static void test_default(const char *root) {
|
||||
|
||||
assert_se(unit_file_set_default(UNIT_FILE_SYSTEM, 0, root, "idontexist.target", &changes, &n_changes) == -ENOENT);
|
||||
assert_se(n_changes == 1);
|
||||
assert_se(changes[0].type == -ENOENT);
|
||||
assert_se(changes[0].type_or_errno == -ENOENT);
|
||||
assert_se(streq_ptr(changes[0].path, "idontexist.target"));
|
||||
unit_file_changes_free(changes, n_changes);
|
||||
changes = NULL; n_changes = 0;
|
||||
@ -341,7 +341,7 @@ static void test_default(const char *root) {
|
||||
|
||||
assert_se(unit_file_set_default(UNIT_FILE_SYSTEM, 0, root, "test-default.target", &changes, &n_changes) >= 0);
|
||||
assert_se(n_changes == 1);
|
||||
assert_se(changes[0].type == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/test-default-real.target"));
|
||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR "/" SPECIAL_DEFAULT_TARGET);
|
||||
assert_se(streq(changes[0].path, p));
|
||||
@ -371,7 +371,7 @@ static void test_add_dependency(const char *root) {
|
||||
|
||||
assert_se(unit_file_add_dependency(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("add-dependency-test-service.service"), "add-dependency-test-target.target", UNIT_WANTS, &changes, &n_changes) >= 0);
|
||||
assert_se(n_changes == 1);
|
||||
assert_se(changes[0].type == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/real-add-dependency-test-service.service"));
|
||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/real-add-dependency-test-target.target.wants/real-add-dependency-test-service.service");
|
||||
assert_se(streq(changes[0].path, p));
|
||||
@ -412,7 +412,7 @@ static void test_template_enable(const char *root) {
|
||||
|
||||
assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("template@.service"), &changes, &n_changes) >= 0);
|
||||
assert_se(n_changes == 1);
|
||||
assert_se(changes[0].type == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/template@.service"));
|
||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/template@def.service");
|
||||
assert_se(streq(changes[0].path, p));
|
||||
@ -428,7 +428,7 @@ static void test_template_enable(const char *root) {
|
||||
|
||||
assert_se(unit_file_disable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("template@.service"), &changes, &n_changes) >= 0);
|
||||
assert_se(n_changes == 1);
|
||||
assert_se(changes[0].type == UNIT_FILE_UNLINK);
|
||||
assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
|
||||
assert_se(streq(changes[0].path, p));
|
||||
unit_file_changes_free(changes, n_changes);
|
||||
changes = NULL; n_changes = 0;
|
||||
@ -443,7 +443,7 @@ static void test_template_enable(const char *root) {
|
||||
log_info("== %s with template@foo.service enabled ==", __func__);
|
||||
|
||||
assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("template@foo.service"), &changes, &n_changes) >= 0);
|
||||
assert_se(changes[0].type == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/template@.service"));
|
||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/template@foo.service");
|
||||
assert_se(streq(changes[0].path, p));
|
||||
@ -459,7 +459,7 @@ static void test_template_enable(const char *root) {
|
||||
|
||||
assert_se(unit_file_disable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("template@foo.service"), &changes, &n_changes) >= 0);
|
||||
assert_se(n_changes == 1);
|
||||
assert_se(changes[0].type == UNIT_FILE_UNLINK);
|
||||
assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
|
||||
assert_se(streq(changes[0].path, p));
|
||||
unit_file_changes_free(changes, n_changes);
|
||||
changes = NULL; n_changes = 0;
|
||||
@ -476,7 +476,7 @@ static void test_template_enable(const char *root) {
|
||||
log_info("== %s with template-symlink@quux.service enabled ==", __func__);
|
||||
|
||||
assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("template-symlink@quux.service"), &changes, &n_changes) >= 0);
|
||||
assert_se(changes[0].type == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/template@.service"));
|
||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/template@quux.service");
|
||||
assert_se(streq(changes[0].path, p));
|
||||
@ -522,7 +522,7 @@ static void test_indirect(const char *root) {
|
||||
|
||||
assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("indirectc.service"), &changes, &n_changes) >= 0);
|
||||
assert_se(n_changes == 1);
|
||||
assert_se(changes[0].type == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/indirectb.service"));
|
||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/indirectb.service");
|
||||
assert_se(streq(changes[0].path, p));
|
||||
@ -535,7 +535,7 @@ static void test_indirect(const char *root) {
|
||||
|
||||
assert_se(unit_file_disable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("indirectc.service"), &changes, &n_changes) >= 0);
|
||||
assert_se(n_changes == 1);
|
||||
assert_se(changes[0].type == UNIT_FILE_UNLINK);
|
||||
assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
|
||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/indirectb.service");
|
||||
assert_se(streq(changes[0].path, p));
|
||||
unit_file_changes_free(changes, n_changes);
|
||||
@ -574,7 +574,7 @@ static void test_preset_and_list(const char *root) {
|
||||
|
||||
assert_se(unit_file_preset(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("preset-yes.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
|
||||
assert_se(n_changes == 1);
|
||||
assert_se(changes[0].type == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/preset-yes.service"));
|
||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/preset-yes.service");
|
||||
assert_se(streq(changes[0].path, p));
|
||||
@ -586,7 +586,7 @@ static void test_preset_and_list(const char *root) {
|
||||
|
||||
assert_se(unit_file_disable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("preset-yes.service"), &changes, &n_changes) >= 0);
|
||||
assert_se(n_changes == 1);
|
||||
assert_se(changes[0].type == UNIT_FILE_UNLINK);
|
||||
assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
|
||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/preset-yes.service");
|
||||
assert_se(streq(changes[0].path, p));
|
||||
unit_file_changes_free(changes, n_changes);
|
||||
@ -611,11 +611,11 @@ static void test_preset_and_list(const char *root) {
|
||||
|
||||
for (i = 0; i < n_changes; i++) {
|
||||
|
||||
if (changes[i].type == UNIT_FILE_SYMLINK) {
|
||||
if (changes[i].type_or_errno == UNIT_FILE_SYMLINK) {
|
||||
assert_se(streq(changes[i].source, "/usr/lib/systemd/system/preset-yes.service"));
|
||||
assert_se(streq(changes[i].path, p));
|
||||
} else
|
||||
assert_se(changes[i].type == UNIT_FILE_UNLINK);
|
||||
assert_se(changes[i].type_or_errno == UNIT_FILE_UNLINK);
|
||||
}
|
||||
|
||||
unit_file_changes_free(changes, n_changes);
|
||||
@ -678,7 +678,7 @@ static void test_revert(const char *root) {
|
||||
/* Revert the override file */
|
||||
assert_se(unit_file_revert(UNIT_FILE_SYSTEM, root, STRV_MAKE("xx.service"), &changes, &n_changes) >= 0);
|
||||
assert_se(n_changes == 1);
|
||||
assert_se(changes[0].type == UNIT_FILE_UNLINK);
|
||||
assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
|
||||
assert_se(streq(changes[0].path, p));
|
||||
unit_file_changes_free(changes, n_changes);
|
||||
changes = NULL; n_changes = 0;
|
||||
@ -690,11 +690,11 @@ static void test_revert(const char *root) {
|
||||
/* Revert the dropin file */
|
||||
assert_se(unit_file_revert(UNIT_FILE_SYSTEM, root, STRV_MAKE("xx.service"), &changes, &n_changes) >= 0);
|
||||
assert_se(n_changes == 2);
|
||||
assert_se(changes[0].type == UNIT_FILE_UNLINK);
|
||||
assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
|
||||
assert_se(streq(changes[0].path, p));
|
||||
|
||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/xx.service.d");
|
||||
assert_se(changes[1].type == UNIT_FILE_UNLINK);
|
||||
assert_se(changes[1].type_or_errno == UNIT_FILE_UNLINK);
|
||||
assert_se(streq(changes[1].path, p));
|
||||
unit_file_changes_free(changes, n_changes);
|
||||
changes = NULL; n_changes = 0;
|
||||
@ -730,7 +730,7 @@ static void test_preset_order(const char *root) {
|
||||
|
||||
assert_se(unit_file_preset(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("prefix-1.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
|
||||
assert_se(n_changes == 1);
|
||||
assert_se(changes[0].type == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/prefix-1.service"));
|
||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/prefix-1.service");
|
||||
assert_se(streq(changes[0].path, p));
|
||||
@ -842,8 +842,8 @@ static void test_with_dropin(const char *root) {
|
||||
|
||||
assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-1.service"), &changes, &n_changes) == 1);
|
||||
assert_se(n_changes == 2);
|
||||
assert_se(changes[0].type == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[1].type == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
|
||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-1.service"));
|
||||
assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-1.service"));
|
||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-1.service");
|
||||
@ -856,8 +856,8 @@ static void test_with_dropin(const char *root) {
|
||||
assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-2.service"), &changes, &n_changes) == 1);
|
||||
assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-2.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
||||
assert_se(n_changes == 2);
|
||||
assert_se(changes[0].type == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[1].type == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
|
||||
assert_se(streq(changes[0].source, SYSTEM_CONFIG_UNIT_DIR"/with-dropin-2.service"));
|
||||
assert_se(streq(changes[1].source, SYSTEM_CONFIG_UNIT_DIR"/with-dropin-2.service"));
|
||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-2.service");
|
||||
@ -870,8 +870,8 @@ static void test_with_dropin(const char *root) {
|
||||
assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-3.service"), &changes, &n_changes) == 1);
|
||||
assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-3.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
||||
assert_se(n_changes == 2);
|
||||
assert_se(changes[0].type == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[1].type == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
|
||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-3.service"));
|
||||
assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-3.service"));
|
||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-3.service");
|
||||
@ -884,8 +884,8 @@ static void test_with_dropin(const char *root) {
|
||||
assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-4a.service"), &changes, &n_changes) == 2);
|
||||
assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-3.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
||||
assert_se(n_changes == 2);
|
||||
assert_se(changes[0].type == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[1].type == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
|
||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-4a.service"));
|
||||
assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-4b.service"));
|
||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-4a.service");
|
||||
@ -954,8 +954,8 @@ static void test_with_dropin_template(const char *root) {
|
||||
|
||||
assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-1@instance-1.service"), &changes, &n_changes) == 1);
|
||||
assert_se(n_changes == 2);
|
||||
assert_se(changes[0].type == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[1].type == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
|
||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-1@.service"));
|
||||
assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-1@.service"));
|
||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-1@instance-1.service");
|
||||
@ -967,8 +967,8 @@ static void test_with_dropin_template(const char *root) {
|
||||
|
||||
assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-2@instance-1.service"), &changes, &n_changes) == 1);
|
||||
assert_se(n_changes == 2);
|
||||
assert_se(changes[0].type == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[1].type == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK);
|
||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-2@.service"));
|
||||
assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-2@.service"));
|
||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-2@instance-1.service");
|
||||
@ -980,7 +980,7 @@ static void test_with_dropin_template(const char *root) {
|
||||
|
||||
assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-2@instance-2.service"), &changes, &n_changes) == 1);
|
||||
assert_se(n_changes == 1);
|
||||
assert_se(changes[0].type == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-2@.service"));
|
||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-2@instance-2.service");
|
||||
assert_se(streq(changes[0].path, p));
|
||||
@ -989,7 +989,7 @@ static void test_with_dropin_template(const char *root) {
|
||||
|
||||
assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-3@.service"), &changes, &n_changes) == 1);
|
||||
assert_se(n_changes == 1);
|
||||
assert_se(changes[0].type == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
||||
assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-3@.service"));
|
||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-3@instance-2.service");
|
||||
assert_se(streq(changes[0].path, p));
|
||||
@ -1030,7 +1030,7 @@ static void test_preset_multiple_instances(const char *root) {
|
||||
assert_se(unit_file_preset(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("foo@bar0.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0);
|
||||
assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "foo@bar0.service", &state) >= 0 && state == UNIT_FILE_ENABLED);
|
||||
assert_se(n_changes == 1);
|
||||
assert_se(changes[0].type == UNIT_FILE_SYMLINK);
|
||||
assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK);
|
||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/foo@bar0.service");
|
||||
assert_se(streq(changes[0].path, p));
|
||||
unit_file_changes_free(changes, n_changes);
|
||||
@ -1038,7 +1038,7 @@ static void test_preset_multiple_instances(const char *root) {
|
||||
|
||||
assert_se(unit_file_disable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("foo@bar0.service"), &changes, &n_changes) >= 0);
|
||||
assert_se(n_changes == 1);
|
||||
assert_se(changes[0].type == UNIT_FILE_UNLINK);
|
||||
assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK);
|
||||
p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/foo@bar0.service");
|
||||
assert_se(streq(changes[0].path, p));
|
||||
unit_file_changes_free(changes, n_changes);
|
||||
|
@ -12,9 +12,9 @@ static void dump_changes(UnitFileChange *c, unsigned n) {
|
||||
assert_se(n == 0 || c);
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
if (c[i].type == UNIT_FILE_UNLINK)
|
||||
if (c[i].type_or_errno == UNIT_FILE_UNLINK)
|
||||
printf("rm '%s'\n", c[i].path);
|
||||
else if (c[i].type == UNIT_FILE_SYMLINK)
|
||||
else if (c[i].type_or_errno == UNIT_FILE_SYMLINK)
|
||||
printf("ln -s '%s' '%s'\n", c[i].source, c[i].path);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user