#include "tmpfile-util.h"
#include "utf8.h"
+typedef int (*push_env_func_t)(
+ const char *filename,
+ unsigned line,
+ const char *key,
+ char *value,
+ void *userdata);
+
static int parse_env_file_internal(
FILE *f,
const char *fname,
- int (*push) (const char *filename, unsigned line,
- const char *key, char *value, void *userdata),
+ push_env_func_t push,
void *userdata) {
size_t n_key = 0, n_value = 0, last_value_whitespace = SIZE_MAX, last_key_whitespace = SIZE_MAX;
COMMENT_ESCAPE
} state = PRE_KEY;
+ assert(f || fname);
+ assert(push);
+
if (f)
r = read_full_stream(f, &contents, NULL);
else
const char *filename, unsigned line,
const char *key, char *value) {
+ assert(key);
+
if (!utf8_is_valid(key)) {
_cleanup_free_ char *p = NULL;
va_list aq, *ap = userdata;
int r;
+ assert(key);
+
r = check_utf8ness_and_warn(filename, line, key, value);
if (r < 0)
return r;
int r;
va_list aq;
+ assert(f || fname);
+
va_copy(aq, ap);
r = parse_env_file_internal(f, fname, parse_env_file_push, &aq);
va_end(aq);
va_list ap;
int r;
+ assert(f || fname);
+
va_start(ap, fname);
r = parse_env_filev(f, fname, ap);
va_end(ap);
const char *filename, unsigned line,
const char *key, char *value,
void *userdata) {
+
char ***m = userdata;
char *p;
int r;
+ assert(key);
+
r = check_utf8ness_and_warn(filename, line, key, value);
if (r < 0)
return r;
return 0;
}
-int load_env_file(FILE *f, const char *fname, char ***rl) {
+int load_env_file(FILE *f, const char *fname, char ***ret) {
_cleanup_strv_free_ char **m = NULL;
int r;
+ assert(f || fname);
+ assert(ret);
+
r = parse_env_file_internal(f, fname, load_env_file_push, &m);
if (r < 0)
return r;
- *rl = TAKE_PTR(m);
+ *ret = TAKE_PTR(m);
return 0;
}
char ***m = ASSERT_PTR(userdata);
int r;
+ assert(key);
+
r = check_utf8ness_and_warn(filename, line, key, value);
if (r < 0)
return r;
return strv_extend(m, "");
}
-int load_env_file_pairs(FILE *f, const char *fname, char ***rl) {
+int load_env_file_pairs(FILE *f, const char *fname, char ***ret) {
_cleanup_strv_free_ char **m = NULL;
int r;
+ assert(f || fname);
+
r = parse_env_file_internal(f, fname, load_env_file_push_pairs, &m);
if (r < 0)
return r;
- *rl = TAKE_PTR(m);
+ *ret = TAKE_PTR(m);
return 0;
}
char ***env = ASSERT_PTR(userdata);
char *expanded_value;
+ assert(key);
+
if (!value) {
log_error("%s:%u: invalid syntax (around \"%s\"), ignoring.", strna(filename), line, key);
return 0;
FILE *f,
const char *fname) {
+ assert(env);
+ assert(f || fname);
+
/* NOTE: this function supports braceful and braceless variable expansions,
* plus "extended" substitutions, unlike other exported parsing functions.
*/
static void write_env_var(FILE *f, const char *v) {
const char *p;
+ assert(f);
+ assert(v);
+
p = strchr(v, '=');
if (!p) {
/* Fallback */
int parse_env_filev(FILE *f, const char *fname, va_list ap);
int parse_env_file_sentinel(FILE *f, const char *fname, ...) _sentinel_;
#define parse_env_file(f, fname, ...) parse_env_file_sentinel(f, fname, __VA_ARGS__, NULL)
-int load_env_file(FILE *f, const char *fname, char ***l);
-int load_env_file_pairs(FILE *f, const char *fname, char ***l);
+int load_env_file(FILE *f, const char *fname, char ***ret);
+int load_env_file_pairs(FILE *f, const char *fname, char ***ret);
int merge_env_file(char ***env, FILE *f, const char *fname);