}
// Sets an environment variable
-int pakfire_env_set(struct pakfire_env* env, const char* key, const char* value) {
+int pakfire_env_set(struct pakfire_env* env, const char* key, const char* format, ...) {
+ char value[PATH_MAX];
+ va_list args;
int r;
// Find the index where to write this value to
if (i >= ENVIRON_SIZE)
return -ENOBUFS;
+ // Format the value
+ va_start(args, format);
+ r = pakfire_string_vformat(value, format, args);
+ va_end(args);
+ if (r < 0)
+ return r;
+
// Free any previous value
if (env->env[i])
free(env->env[i]);
continue;
// Set value
- r = pakfire_env_set(env, key, val);
+ r = pakfire_env_set(env, key, "%s", val);
if (key)
free(key);
char** pakfire_env_get_envp(struct pakfire_env* env);
const char* pakfire_env_get(struct pakfire_env* env, const char* key);
-int pakfire_env_set(struct pakfire_env* env, const char* key, const char* value);
+int pakfire_env_set(struct pakfire_env* env, const char* key, const char* format, ...)
+ __attribute__((format(printf, 3, 4)));
int pakfire_env_import(struct pakfire_env* env, const char** e);
// Set default environment
for (const struct environ* e = ENV; e->key; e++) {
- r = pakfire_env_set(j->env, e->key, e->val);
+ r = pakfire_env_set(j->env, e->key, "%s", e->val);
if (r < 0)
goto ERROR;
}
}
// Set container UUID
- r = pakfire_env_set(j->env, "container_uuid", pakfire_jail_uuid(j));
+ r = pakfire_env_set(j->env, "container_uuid", "%s", pakfire_jail_uuid(j));
if (r < 0)
goto ERROR;
// Copy TERM
char* TERM = secure_getenv("TERM");
if (TERM) {
- r = pakfire_env_set(env, "TERM", TERM);
+ r = pakfire_env_set(env, "TERM", "%s", TERM);
if (r < 0)
goto ERROR;
}
// Copy LANG
char* LANG = secure_getenv("LANG");
if (LANG) {
- r = pakfire_env_set(env, "LANG", LANG);
+ r = pakfire_env_set(env, "LANG", "%s", LANG);
if (r < 0)
goto ERROR;
}
continue;
// Store the value
- r = pakfire_env_set(env, d->name, value);
+ r = pakfire_env_set(env, d->name, "%s", value);
free(value);
if (r < 0)
return r;