]>
Commit | Line | Data |
---|---|---|
db9ecf05 | 1 | /* SPDX-License-Identifier: LGPL-2.1-or-later */ |
c2f1db8f | 2 | #pragma once |
9e2f7c11 | 3 | |
e82f30d1 LP |
4 | #include "string-util.h" |
5 | ||
303ee601 | 6 | typedef int (*SpecifierCallback)(char specifier, const void *data, const void *userdata, char **ret); |
9e2f7c11 LP |
7 | |
8 | typedef struct Specifier { | |
9 | const char specifier; | |
10 | const SpecifierCallback lookup; | |
303ee601 | 11 | const void *data; |
9e2f7c11 LP |
12 | } Specifier; |
13 | ||
303ee601 | 14 | int specifier_printf(const char *text, const Specifier table[], const void *userdata, char **ret); |
9e2f7c11 | 15 | |
303ee601 | 16 | int specifier_string(char specifier, const void *data, const void *userdata, char **ret); |
d848b9cb | 17 | |
303ee601 ZJS |
18 | int specifier_machine_id(char specifier, const void *data, const void *userdata, char **ret); |
19 | int specifier_boot_id(char specifier, const void *data, const void *userdata, char **ret); | |
20 | int specifier_host_name(char specifier, const void *data, const void *userdata, char **ret); | |
e97708fa | 21 | int specifier_short_host_name(char specifier, const void *data, const void *userdata, char **ret); |
303ee601 | 22 | int specifier_kernel_release(char specifier, const void *data, const void *userdata, char **ret); |
268f5a54 LP |
23 | int specifier_architecture(char specifier, const void *data, const void *userdata, char **ret); |
24 | int specifier_os_id(char specifier, const void *data, const void *userdata, char **ret); | |
25 | int specifier_os_version_id(char specifier, const void *data, const void *userdata, char **ret); | |
26 | int specifier_os_build_id(char specifier, const void *data, const void *userdata, char **ret); | |
27 | int specifier_os_variant_id(char specifier, const void *data, const void *userdata, char **ret); | |
e82f30d1 | 28 | |
303ee601 ZJS |
29 | int specifier_group_name(char specifier, const void *data, const void *userdata, char **ret); |
30 | int specifier_group_id(char specifier, const void *data, const void *userdata, char **ret); | |
31 | int specifier_user_name(char specifier, const void *data, const void *userdata, char **ret); | |
32 | int specifier_user_id(char specifier, const void *data, const void *userdata, char **ret); | |
33 | int specifier_user_home(char specifier, const void *data, const void *userdata, char **ret); | |
34 | int specifier_user_shell(char specifier, const void *data, const void *userdata, char **ret); | |
36444d22 | 35 | |
303ee601 ZJS |
36 | int specifier_tmp_dir(char specifier, const void *data, const void *userdata, char **ret); |
37 | int specifier_var_tmp_dir(char specifier, const void *data, const void *userdata, char **ret); | |
b294e594 | 38 | |
2824aa07 LP |
39 | /* Typically, in places where one of the above specifier is to be resolved the other similar ones are to be |
40 | * resolved, too. Hence let's define common macros for the relevant array entries. */ | |
41 | #define COMMON_SYSTEM_SPECIFIERS \ | |
42 | { 'm', specifier_machine_id, NULL }, \ | |
43 | { 'b', specifier_boot_id, NULL }, \ | |
44 | { 'H', specifier_host_name, NULL }, \ | |
45 | { 'l', specifier_short_host_name, NULL }, \ | |
46 | { 'v', specifier_kernel_release, NULL }, \ | |
47 | { 'a', specifier_architecture, NULL }, \ | |
48 | { 'o', specifier_os_id, NULL }, \ | |
49 | { 'w', specifier_os_version_id, NULL }, \ | |
50 | { 'B', specifier_os_build_id, NULL }, \ | |
51 | { 'W', specifier_os_variant_id, NULL } | |
52 | ||
53 | #define COMMON_CREDS_SPECIFIERS \ | |
54 | { 'g', specifier_group_name, NULL }, \ | |
55 | { 'G', specifier_group_id, NULL }, \ | |
56 | { 'U', specifier_user_id, NULL }, \ | |
57 | { 'u', specifier_user_name, NULL } | |
58 | ||
59 | #define COMMON_TMP_SPECIFIERS \ | |
60 | { 'T', specifier_tmp_dir, NULL }, \ | |
61 | { 'V', specifier_var_tmp_dir, NULL } | |
62 | ||
e82f30d1 LP |
63 | static inline char* specifier_escape(const char *string) { |
64 | return strreplace(string, "%", "%%"); | |
65 | } | |
66 | ||
67 | int specifier_escape_strv(char **l, char ***ret); |