]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
basic: add replace_env_n function
authorRay Strode <rstrode@redhat.com>
Tue, 9 Aug 2016 14:20:22 +0000 (10:20 -0400)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 21 Feb 2017 04:32:53 +0000 (23:32 -0500)
It's like replace_env, but lets you pass in a substring.

src/basic/env-util.c
src/basic/env-util.h

index f37085467390b6f16093ecdb3c8f596eedf681f4..1b955ff1d54e468c15d1f580a012a24a6cad3827 100644 (file)
@@ -519,7 +519,7 @@ char **strv_env_clean_with_callback(char **e, void (*invalid_callback)(const cha
         return e;
 }
 
-char *replace_env(const char *format, char **env, unsigned flags) {
+char *replace_env_n(const char *format, size_t n, char **env, unsigned flags) {
         enum {
                 WORD,
                 CURLY,
@@ -530,10 +530,11 @@ char *replace_env(const char *format, char **env, unsigned flags) {
         const char *e, *word = format;
         char *k;
         _cleanup_free_ char *r = NULL;
+        size_t i;
 
         assert(format);
 
-        for (e = format; *e; e ++) {
+        for (e = format, i = 0; *e && i < n; e ++, i ++) {
 
                 switch (state) {
 
@@ -614,6 +615,7 @@ char *replace_env(const char *format, char **env, unsigned flags) {
                                 r = k;
 
                                 word = e--;
+                                i--;
                                 state = WORD;
                         }
                         break;
index 03bbc6af008f8dfef3ebf4144a81aee5d7316ef3..43a1371f5e53395e0a4aefe29dbed99bd863260f 100644 (file)
@@ -34,9 +34,13 @@ enum {
         REPLACE_ENV_ALLOW_BRACELESS = 2u,
 };
 
-char *replace_env(const char *format, char **env, unsigned flags);
+char *replace_env_n(const char *format, size_t n, char **env, unsigned flags);
 char **replace_env_argv(char **argv, char **env);
 
+static inline char *replace_env(const char *format, char **env, unsigned flags) {
+        return replace_env_n(format, strlen(format), env, flags);
+}
+
 bool strv_env_is_valid(char **e);
 #define strv_env_clean(l) strv_env_clean_with_callback(l, NULL, NULL)
 char **strv_env_clean_with_callback(char **l, void (*invalid_callback)(const char *p, void *userdata), void *userdata);