env-util: add strv_env_assignf() helper
This commit is contained in:
@@ -458,6 +458,35 @@ int strv_env_assign(char ***l, const char *key, const char *value) {
|
||||
return strv_env_replace_consume(l, p);
|
||||
}
|
||||
|
||||
int strv_env_assignf(char ***l, const char *key, const char *valuef, ...) {
|
||||
int r;
|
||||
|
||||
assert(l);
|
||||
assert(key);
|
||||
|
||||
if (!env_name_is_valid(key))
|
||||
return -EINVAL;
|
||||
|
||||
if (!valuef) {
|
||||
strv_env_unset(*l, key);
|
||||
return 0;
|
||||
}
|
||||
|
||||
_cleanup_free_ char *value = NULL;
|
||||
va_list ap;
|
||||
va_start(ap, valuef);
|
||||
r = vasprintf(&value, valuef, ap);
|
||||
va_end(ap);
|
||||
if (r < 0)
|
||||
return -ENOMEM;
|
||||
|
||||
char *p = strjoin(key, "=", value);
|
||||
if (!p)
|
||||
return -ENOMEM;
|
||||
|
||||
return strv_env_replace_consume(l, p);
|
||||
}
|
||||
|
||||
int _strv_env_assign_many(char ***l, ...) {
|
||||
va_list ap;
|
||||
int r;
|
||||
|
||||
@@ -49,6 +49,7 @@ int strv_env_replace_consume(char ***l, char *p); /* In place ... */
|
||||
int strv_env_replace_strdup(char ***l, const char *assignment);
|
||||
int strv_env_replace_strdup_passthrough(char ***l, const char *assignment);
|
||||
int strv_env_assign(char ***l, const char *key, const char *value);
|
||||
int strv_env_assignf(char ***l, const char *key, const char *valuef, ...) _printf_(3, 4);
|
||||
int _strv_env_assign_many(char ***l, ...) _sentinel_;
|
||||
#define strv_env_assign_many(l, ...) _strv_env_assign_many(l, __VA_ARGS__, NULL)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user