]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/shared/install.h
install: allow paths like LookupPath.generator to be NULL
[thirdparty/systemd.git] / src / shared / install.h
CommitLineData
c2f1db8f 1#pragma once
83096483
LP
2
3/***
4 This file is part of systemd.
5
6 Copyright 2011 Lennart Poettering
7
8 systemd is free software; you can redistribute it and/or modify it
5430f7f2
LP
9 under the terms of the GNU Lesser General Public License as published by
10 the Free Software Foundation; either version 2.1 of the License, or
83096483
LP
11 (at your option) any later version.
12
13 systemd is distributed in the hope that it will be useful, but
14 WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5430f7f2 16 Lesser General Public License for more details.
83096483 17
5430f7f2 18 You should have received a copy of the GNU Lesser General Public License
83096483
LP
19 along with systemd; If not, see <http://www.gnu.org/licenses/>.
20***/
21
cab6235f
LP
22typedef enum UnitFileScope UnitFileScope;
23typedef enum UnitFileState UnitFileState;
24typedef enum UnitFilePresetMode UnitFilePresetMode;
25typedef enum UnitFileChangeType UnitFileChangeType;
0ec0deaa 26typedef enum UnitFileType UnitFileType;
cab6235f
LP
27typedef struct UnitFileChange UnitFileChange;
28typedef struct UnitFileList UnitFileList;
29typedef struct UnitFileInstallInfo UnitFileInstallInfo;
30
a8fbdf54
TA
31#include <stdbool.h>
32
83096483 33#include "hashmap.h"
a8fbdf54 34#include "macro.h"
a8ffe6fb 35#include "path-lookup.h"
0ec0deaa
LP
36#include "strv.h"
37#include "unit-name.h"
83096483 38
cab6235f 39enum UnitFileScope {
83096483
LP
40 UNIT_FILE_SYSTEM,
41 UNIT_FILE_GLOBAL,
42 UNIT_FILE_USER,
43 _UNIT_FILE_SCOPE_MAX,
44 _UNIT_FILE_SCOPE_INVALID = -1
cab6235f 45};
83096483 46
cab6235f 47enum UnitFileState {
83096483
LP
48 UNIT_FILE_ENABLED,
49 UNIT_FILE_ENABLED_RUNTIME,
50 UNIT_FILE_LINKED,
51 UNIT_FILE_LINKED_RUNTIME,
52 UNIT_FILE_MASKED,
53 UNIT_FILE_MASKED_RUNTIME,
54 UNIT_FILE_STATIC,
55 UNIT_FILE_DISABLED,
aedd4012 56 UNIT_FILE_INDIRECT,
f4139308 57 UNIT_FILE_GENERATED,
e4fca67f 58 UNIT_FILE_TRANSIENT,
0ec0deaa 59 UNIT_FILE_BAD,
83096483
LP
60 _UNIT_FILE_STATE_MAX,
61 _UNIT_FILE_STATE_INVALID = -1
cab6235f 62};
83096483 63
cab6235f 64enum UnitFilePresetMode {
d309c1c3
LP
65 UNIT_FILE_PRESET_FULL,
66 UNIT_FILE_PRESET_ENABLE_ONLY,
67 UNIT_FILE_PRESET_DISABLE_ONLY,
86bbe5bf 68 _UNIT_FILE_PRESET_MAX,
d309c1c3 69 _UNIT_FILE_PRESET_INVALID = -1
cab6235f 70};
d309c1c3 71
cab6235f 72enum UnitFileChangeType {
83096483
LP
73 UNIT_FILE_SYMLINK,
74 UNIT_FILE_UNLINK,
9a0a413a 75 UNIT_FILE_IS_MASKED,
83096483
LP
76 _UNIT_FILE_CHANGE_TYPE_MAX,
77 _UNIT_FILE_CHANGE_TYPE_INVALID = -1
cab6235f 78};
83096483 79
9a0a413a
ZJS
80static inline bool unit_file_change_is_modification(UnitFileChangeType type) {
81 return IN_SET(type, UNIT_FILE_SYMLINK, UNIT_FILE_UNLINK);
82}
83
cab6235f 84struct UnitFileChange {
83096483
LP
85 UnitFileChangeType type;
86 char *path;
87 char *source;
cab6235f 88};
83096483 89
cab6235f 90struct UnitFileList {
83096483
LP
91 char *path;
92 UnitFileState state;
cab6235f 93};
83096483 94
0ec0deaa
LP
95enum UnitFileType {
96 UNIT_FILE_TYPE_REGULAR,
97 UNIT_FILE_TYPE_SYMLINK,
98 UNIT_FILE_TYPE_MASKED,
99 _UNIT_FILE_TYPE_MAX,
100 _UNIT_FILE_TYPE_INVALID = -1,
101};
102
cab6235f 103struct UnitFileInstallInfo {
7584d236
ZJS
104 char *name;
105 char *path;
106
107 char **aliases;
108 char **wanted_by;
109 char **required_by;
aedd4012 110 char **also;
d54c4993
LP
111
112 char *default_instance;
0ec0deaa
LP
113
114 UnitFileType type;
115
116 char *symlink_target;
cab6235f 117};
7584d236 118
0ec0deaa
LP
119static inline bool UNIT_FILE_INSTALL_INFO_HAS_RULES(UnitFileInstallInfo *i) {
120 assert(i);
121
122 return !strv_isempty(i->aliases) ||
123 !strv_isempty(i->wanted_by) ||
124 !strv_isempty(i->required_by);
125}
126
127static inline bool UNIT_FILE_INSTALL_INFO_HAS_ALSO(UnitFileInstallInfo *i) {
128 assert(i);
129
130 return !strv_isempty(i->also);
131}
132
7195aa42
ZJS
133int unit_file_enable(UnitFileScope scope, bool runtime, const char *root_dir, char **files, bool force, UnitFileChange **changes, unsigned *n_changes);
134int unit_file_disable(UnitFileScope scope, bool runtime, const char *root_dir, char **files, UnitFileChange **changes, unsigned *n_changes);
135int unit_file_reenable(UnitFileScope scope, bool runtime, const char *root_dir, char **files, bool force, UnitFileChange **changes, unsigned *n_changes);
d309c1c3
LP
136int unit_file_preset(UnitFileScope scope, bool runtime, const char *root_dir, char **files, UnitFilePresetMode mode, bool force, UnitFileChange **changes, unsigned *n_changes);
137int unit_file_preset_all(UnitFileScope scope, bool runtime, const char *root_dir, UnitFilePresetMode mode, bool force, UnitFileChange **changes, unsigned *n_changes);
7195aa42
ZJS
138int unit_file_mask(UnitFileScope scope, bool runtime, const char *root_dir, char **files, bool force, UnitFileChange **changes, unsigned *n_changes);
139int unit_file_unmask(UnitFileScope scope, bool runtime, const char *root_dir, char **files, UnitFileChange **changes, unsigned *n_changes);
344ca755
LP
140int unit_file_link(UnitFileScope scope, bool runtime, const char *root_dir, char **files, bool force, UnitFileChange **changes, unsigned *n_changes);
141int unit_file_revert(UnitFileScope scope, const char *root_dir, char **files, UnitFileChange **changes, unsigned *n_changes);
718db961 142int unit_file_set_default(UnitFileScope scope, const char *root_dir, const char *file, bool force, UnitFileChange **changes, unsigned *n_changes);
99504dd4 143int unit_file_get_default(UnitFileScope scope, const char *root_dir, char **name);
0ec0deaa 144int unit_file_add_dependency(UnitFileScope scope, bool runtime, const char *root_dir, char **files, const char *target, UnitDependency dep, bool force, UnitFileChange **changes, unsigned *n_changes);
83096483 145
0ec0deaa 146int unit_file_get_state(UnitFileScope scope, const char *root_dir, const char *filename, UnitFileState *ret);
e735decc 147int unit_file_exists(UnitFileScope scope, const LookupPaths *paths, const char *name);
83096483
LP
148
149int unit_file_get_list(UnitFileScope scope, const char *root_dir, Hashmap *h);
0ec0deaa 150Hashmap* unit_file_list_free(Hashmap *h);
83096483 151
57ab2eab 152int unit_file_changes_add(UnitFileChange **changes, unsigned *n_changes, UnitFileChangeType type, const char *path, const char *source);
83096483
LP
153void unit_file_changes_free(UnitFileChange *changes, unsigned n_changes);
154
c2a8d7b0 155int unit_file_query_preset(UnitFileScope scope, const char *root_dir, const char *name);
83096483 156
44a6b1b6
ZJS
157const char *unit_file_state_to_string(UnitFileState s) _const_;
158UnitFileState unit_file_state_from_string(const char *s) _pure_;
83096483 159
44a6b1b6
ZJS
160const char *unit_file_change_type_to_string(UnitFileChangeType s) _const_;
161UnitFileChangeType unit_file_change_type_from_string(const char *s) _pure_;
d309c1c3
LP
162
163const char *unit_file_preset_mode_to_string(UnitFilePresetMode m) _const_;
164UnitFilePresetMode unit_file_preset_mode_from_string(const char *s) _pure_;