diff options
Diffstat (limited to 'src/shared')
-rw-r--r-- | src/shared/install.c | 24 | ||||
-rw-r--r-- | src/shared/install.h | 1 |
2 files changed, 13 insertions, 12 deletions
diff --git a/src/shared/install.c b/src/shared/install.c index ef1c3f584d..1a69337f5a 100644 --- a/src/shared/install.c +++ b/src/shared/install.c @@ -2003,25 +2003,24 @@ int unit_file_get_list( free(f->path); free(f); goto finish; - } else if (r > 0) + } else if (r > 0) { + f->state = UNIT_FILE_ENABLED; goto found; + } r = unit_file_can_install(&paths, root_dir, f->path, true); - if (r < 0) { + 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) { + } else if (r > 0) f->state = UNIT_FILE_DISABLED; - goto found; - } else { + else f->state = UNIT_FILE_STATIC; - goto found; - } - - free(f->path); - free(f); - continue; 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); diff --git a/src/shared/install.h b/src/shared/install.h index f02fa3efbd..55249914b1 100644 --- a/src/shared/install.h +++ b/src/shared/install.h @@ -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; |