Line data Source code
1 : /* SPDX-License-Identifier: LGPL-2.1+ */
2 : #pragma once
3 :
4 : typedef enum UnitFilePresetMode UnitFilePresetMode;
5 : typedef enum UnitFileChangeType UnitFileChangeType;
6 : typedef enum UnitFileFlags UnitFileFlags;
7 : typedef enum UnitFileType UnitFileType;
8 : typedef struct UnitFileChange UnitFileChange;
9 : typedef struct UnitFileList UnitFileList;
10 : typedef struct UnitFileInstallInfo UnitFileInstallInfo;
11 :
12 : #include <stdbool.h>
13 :
14 : #include "hashmap.h"
15 : #include "macro.h"
16 : #include "path-lookup.h"
17 : #include "strv.h"
18 : #include "unit-name.h"
19 :
20 : enum UnitFilePresetMode {
21 : UNIT_FILE_PRESET_FULL,
22 : UNIT_FILE_PRESET_ENABLE_ONLY,
23 : UNIT_FILE_PRESET_DISABLE_ONLY,
24 : _UNIT_FILE_PRESET_MAX,
25 : _UNIT_FILE_PRESET_INVALID = -1
26 : };
27 :
28 : enum UnitFileChangeType {
29 : UNIT_FILE_SYMLINK,
30 : UNIT_FILE_UNLINK,
31 : UNIT_FILE_IS_MASKED,
32 : UNIT_FILE_IS_DANGLING,
33 : _UNIT_FILE_CHANGE_TYPE_MAX,
34 : _UNIT_FILE_CHANGE_TYPE_INVALID = INT_MIN
35 : };
36 :
37 : enum UnitFileFlags {
38 : UNIT_FILE_RUNTIME = 1 << 0,
39 : UNIT_FILE_FORCE = 1 << 1,
40 : UNIT_FILE_DRY_RUN = 1 << 2,
41 : };
42 :
43 : /* type can either one of the UnitFileChangeTypes listed above, or a negative error.
44 : * If source is specified, it should be the contents of the path symlink.
45 : * In case of an error, source should be the existing symlink contents or NULL
46 : */
47 : struct UnitFileChange {
48 : int type; /* UnitFileChangeType or bust */
49 : char *path;
50 : char *source;
51 : };
52 :
53 0 : static inline bool unit_file_changes_have_modification(const UnitFileChange* changes, size_t n_changes) {
54 : size_t i;
55 0 : for (i = 0; i < n_changes; i++)
56 0 : if (IN_SET(changes[i].type, UNIT_FILE_SYMLINK, UNIT_FILE_UNLINK))
57 0 : return true;
58 0 : return false;
59 : }
60 :
61 : struct UnitFileList {
62 : char *path;
63 : UnitFileState state;
64 : };
65 :
66 : enum UnitFileType {
67 : UNIT_FILE_TYPE_REGULAR,
68 : UNIT_FILE_TYPE_SYMLINK,
69 : UNIT_FILE_TYPE_MASKED,
70 : _UNIT_FILE_TYPE_MAX,
71 : _UNIT_FILE_TYPE_INVALID = -1,
72 : };
73 :
74 : struct UnitFileInstallInfo {
75 : char *name;
76 : char *path;
77 :
78 : char **aliases;
79 : char **wanted_by;
80 : char **required_by;
81 : char **also;
82 :
83 : char *default_instance;
84 : char *symlink_target;
85 :
86 : UnitFileType type;
87 : bool auxiliary;
88 : };
89 :
90 : int unit_file_enable(
91 : UnitFileScope scope,
92 : UnitFileFlags flags,
93 : const char *root_dir,
94 : char **files,
95 : UnitFileChange **changes,
96 : size_t *n_changes);
97 : int unit_file_disable(
98 : UnitFileScope scope,
99 : UnitFileFlags flags,
100 : const char *root_dir,
101 : char **files,
102 : UnitFileChange **changes,
103 : size_t *n_changes);
104 : int unit_file_reenable(
105 : UnitFileScope scope,
106 : UnitFileFlags flags,
107 : const char *root_dir,
108 : char **files,
109 : UnitFileChange **changes,
110 : size_t *n_changes);
111 : int unit_file_preset(
112 : UnitFileScope scope,
113 : UnitFileFlags flags,
114 : const char *root_dir,
115 : char **files,
116 : UnitFilePresetMode mode,
117 : UnitFileChange **changes,
118 : size_t *n_changes);
119 : int unit_file_preset_all(
120 : UnitFileScope scope,
121 : UnitFileFlags flags,
122 : const char *root_dir,
123 : UnitFilePresetMode mode,
124 : UnitFileChange **changes,
125 : size_t *n_changes);
126 : int unit_file_mask(
127 : UnitFileScope scope,
128 : UnitFileFlags flags,
129 : const char *root_dir,
130 : char **files,
131 : UnitFileChange **changes,
132 : size_t *n_changes);
133 : int unit_file_unmask(
134 : UnitFileScope scope,
135 : UnitFileFlags flags,
136 : const char *root_dir,
137 : char **files,
138 : UnitFileChange **changes,
139 : size_t *n_changes);
140 : int unit_file_link(
141 : UnitFileScope scope,
142 : UnitFileFlags flags,
143 : const char *root_dir,
144 : char **files,
145 : UnitFileChange **changes,
146 : size_t *n_changes);
147 : int unit_file_revert(
148 : UnitFileScope scope,
149 : const char *root_dir,
150 : char **files,
151 : UnitFileChange **changes,
152 : size_t *n_changes);
153 : int unit_file_set_default(
154 : UnitFileScope scope,
155 : UnitFileFlags flags,
156 : const char *root_dir,
157 : const char *file,
158 : UnitFileChange **changes,
159 : size_t *n_changes);
160 : int unit_file_get_default(
161 : UnitFileScope scope,
162 : const char *root_dir,
163 : char **name);
164 : int unit_file_add_dependency(
165 : UnitFileScope scope,
166 : UnitFileFlags flags,
167 : const char *root_dir,
168 : char **files,
169 : const char *target,
170 : UnitDependency dep,
171 : UnitFileChange **changes,
172 : size_t *n_changes);
173 :
174 : int unit_file_lookup_state(
175 : UnitFileScope scope,
176 : const LookupPaths *paths,
177 : const char *name,
178 : UnitFileState *ret);
179 :
180 : int unit_file_get_state(UnitFileScope scope, const char *root_dir, const char *filename, UnitFileState *ret);
181 : int unit_file_exists(UnitFileScope scope, const LookupPaths *paths, const char *name);
182 :
183 : int unit_file_get_list(UnitFileScope scope, const char *root_dir, Hashmap *h, char **states, char **patterns);
184 : Hashmap* unit_file_list_free(Hashmap *h);
185 :
186 : int unit_file_changes_add(UnitFileChange **changes, size_t *n_changes, UnitFileChangeType type, const char *path, const char *source);
187 : void unit_file_changes_free(UnitFileChange *changes, size_t n_changes);
188 : void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *changes, size_t n_changes, bool quiet);
189 :
190 : int unit_file_query_preset(UnitFileScope scope, const char *root_dir, const char *name);
191 :
192 : const char *unit_file_state_to_string(UnitFileState s) _const_;
193 : UnitFileState unit_file_state_from_string(const char *s) _pure_;
194 : /* from_string conversion is unreliable because of the overlap between -EPERM and -1 for error. */
195 :
196 : const char *unit_file_change_type_to_string(UnitFileChangeType s) _const_;
197 : UnitFileChangeType unit_file_change_type_from_string(const char *s) _pure_;
198 :
199 : const char *unit_file_preset_mode_to_string(UnitFilePresetMode m) _const_;
200 : UnitFilePresetMode unit_file_preset_mode_from_string(const char *s) _pure_;
|