]>
Commit | Line | Data |
---|---|---|
53e1b683 | 1 | /* SPDX-License-Identifier: LGPL-2.1+ */ |
c2f1db8f | 2 | #pragma once |
84e3543e | 3 | |
a8fbdf54 | 4 | #include <stdbool.h> |
a3c4eb07 LP |
5 | |
6 | typedef struct LookupPaths LookupPaths; | |
a3c4eb07 LP |
7 | |
8 | #include "install.h" | |
29686440 | 9 | #include "macro.h" |
a8ffe6fb | 10 | |
4943d143 | 11 | typedef enum LookupPathsFlags { |
ef31828d LP |
12 | LOOKUP_PATHS_EXCLUDE_GENERATED = 1 << 0, |
13 | LOOKUP_PATHS_TEMPORARY_GENERATED = 1 << 1, | |
14 | LOOKUP_PATHS_SPLIT_USR = 1 << 2, | |
4943d143 LP |
15 | } LookupPathsFlags; |
16 | ||
a3c4eb07 | 17 | struct LookupPaths { |
80b1ae32 LP |
18 | /* Where we look for unit files. This includes the individual special paths below, but also any vendor |
19 | * supplied, static unit file paths. */ | |
a3c4eb07 | 20 | char **search_path; |
a0f84a10 | 21 | |
80b1ae32 LP |
22 | /* Where we shall create or remove our installation symlinks, aka "configuration", and where the user/admin |
23 | * shall place his own unit files. */ | |
a0f84a10 LP |
24 | char *persistent_config; |
25 | char *runtime_config; | |
26 | ||
0cd4628d LP |
27 | /* Where units from a portable service image shall be placed. */ |
28 | char *persistent_attached; | |
29 | char *runtime_attached; | |
30 | ||
80b1ae32 LP |
31 | /* Where to place generated unit files (i.e. those a "generator" tool generated). Note the special semantics of |
32 | * this directory: the generators are flushed each time a "systemctl daemon-reload" is issued. The user should | |
33 | * not alter these directories directly. */ | |
a3c4eb07 LP |
34 | char *generator; |
35 | char *generator_early; | |
36 | char *generator_late; | |
e4bb56c7 | 37 | |
80b1ae32 LP |
38 | /* Where to place transient unit files (i.e. those created dynamically via the bus API). Note the special |
39 | * semantics of this directory: all units created transiently have their unit files removed as the transient | |
40 | * unit is unloaded. The user should not alter this directory directly. */ | |
39591351 LP |
41 | char *transient; |
42 | ||
80b1ae32 LP |
43 | /* Where the snippets created by "systemctl set-property" are placed. Note that for transient units, the |
44 | * snippets are placed in the transient directory though (see above). The user should not alter this directory | |
45 | * directly. */ | |
46 | char *persistent_control; | |
47 | char *runtime_control; | |
48 | ||
e4bb56c7 LP |
49 | /* The root directory prepended to all items above, or NULL */ |
50 | char *root_dir; | |
a1f31f47 ZJS |
51 | |
52 | /* A temporary directory when running in test mode, to be nuked */ | |
53 | char *temporary_dir; | |
a3c4eb07 | 54 | }; |
84e3543e | 55 | |
4943d143 | 56 | int lookup_paths_init(LookupPaths *p, UnitFileScope scope, LookupPathsFlags flags, const char *root_dir); |
0cd4628d | 57 | |
ca4adeb7 ZJS |
58 | int xdg_user_dirs(char ***ret_config_dirs, char ***ret_data_dirs); |
59 | int xdg_user_runtime_dir(char **ret, const char *suffix); | |
60 | int xdg_user_config_dir(char **ret, const char *suffix); | |
61 | int xdg_user_data_dir(char **ret, const char *suffix); | |
0cd4628d | 62 | |
d2561cfd ZJS |
63 | bool path_is_user_data_dir(const char *path); |
64 | bool path_is_user_config_dir(const char *path); | |
59ccf93d | 65 | |
a1453343 LP |
66 | int lookup_paths_reduce(LookupPaths *p); |
67 | ||
cd64fd56 LP |
68 | int lookup_paths_mkdir_generator(LookupPaths *p); |
69 | void lookup_paths_trim_generator(LookupPaths *p); | |
07a78643 | 70 | void lookup_paths_flush_generator(LookupPaths *p); |
cd64fd56 | 71 | |
cab6235f | 72 | void lookup_paths_free(LookupPaths *p); |
a69b4fb0 LP |
73 | |
74 | char **generator_binary_paths(UnitFileScope scope); |