]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/basic/replace-var.c
1 /* SPDX-License-Identifier: LGPL-2.1+ */
8 #include "alloc-util.h"
10 #include "replace-var.h"
11 #include "string-util.h"
14 * Generic infrastructure for replacing @FOO@ style variables in
15 * strings. Will call a callback for each replacement.
18 static int get_variable(const char *b
, char **r
) {
28 k
= strspn(b
+ 1, UPPERCASE_LETTERS
"_");
29 if (k
<= 0 || b
[k
+1] != '@')
32 t
= strndup(b
+ 1, k
);
40 char *replace_var(const char *text
, char *(*lookup
)(const char *variable
, void *userdata
), void *userdata
) {
56 _cleanup_free_
char *v
= NULL
, *n
= NULL
;
61 k
= get_variable(f
, &v
);
69 n
= lookup(v
, userdata
);
76 nl
= l
- skip
+ strlen(n
);
77 a
= realloc(r
, nl
+ 1);