]>
git.ipfire.org Git - thirdparty/systemd.git/blob - src/basic/replace-var.c
1 /* SPDX-License-Identifier: LGPL-2.1+ */
3 This file is part of systemd.
5 Copyright 2012 Lennart Poettering
13 #include "alloc-util.h"
15 #include "replace-var.h"
16 #include "string-util.h"
19 * Generic infrastructure for replacing @FOO@ style variables in
20 * strings. Will call a callback for each replacement.
23 static int get_variable(const char *b
, char **r
) {
33 k
= strspn(b
+ 1, UPPERCASE_LETTERS
"_");
34 if (k
<= 0 || b
[k
+1] != '@')
37 t
= strndup(b
+ 1, k
);
45 char *replace_var(const char *text
, char *(*lookup
)(const char *variable
, void *userdata
), void *userdata
) {
61 _cleanup_free_
char *v
= NULL
, *n
= NULL
;
66 k
= get_variable(f
, &v
);
74 n
= lookup(v
, userdata
);
81 nl
= l
- skip
+ strlen(n
);
82 a
= realloc(r
, nl
+ 1);