On Mon, Jun 02, 2014 at 06:03:27PM +0200, Michal Sekletar wrote:
This should make logic in locale_setup() work as intended, hence don't
parse /etc/locale.conf if admin passed to us explicit locale settings on
kernel cmdline.
---
src/shared/fileio.c | 28 ++--
1 file changed, 18 insertions(+), 10 deletions(-)
diff --git a/src/shared/fileio.c b/src/shared/fileio.c
index c7b2cd8..c77afd9 100644
--- a/src/shared/fileio.c
+++ b/src/shared/fileio.c
@@ -251,7 +251,8 @@ int read_full_file(const char *fn, char **contents,
size_t *size) {
static int parse_env_file_internal(
const char *fname,
const char *newline,
-int (*push) (const char *filename, unsigned line,
+int *n_pushed,
+int (*push) (const char *filename, unsigned line, int
*n_pushed,
const char *key, char *value, void *userdata),
void *userdata) {
@@ -340,7 +341,7 @@ static int parse_env_file_internal(
if (last_key_whitespace != (size_t) -1)
key[last_key_whitespace] = 0;
-r = push(fname, line, key, value, userdata);
+r = push(fname, line, n_pushed, key, value,
userdata);
if (r 0)
goto fail;
@@ -385,7 +386,7 @@ static int parse_env_file_internal(
if (last_key_whitespace != (size_t) -1)
key[last_key_whitespace] = 0;
-r = push(fname, line, key, value, userdata);
+r = push(fname, line, n_pushed, key, value,
userdata);
if (r 0)
goto fail;
@@ -520,7 +521,7 @@ static int parse_env_file_internal(
if (last_key_whitespace != (size_t) -1)
key[last_key_whitespace] = 0;
-r = push(fname, line, key, value, userdata);
+r = push(fname, line, n_pushed, key, value, userdata);
if (r 0)
goto fail;
}
@@ -532,7 +533,7 @@ fail:
return r;
}
-static int parse_env_file_push(const char *filename, unsigned line,
+static int parse_env_file_push(const char *filename, unsigned line, int
*n_pushed,
const char *key, char *value, void *userdata)
{
const char *k;
@@ -565,6 +566,10 @@ static int parse_env_file_push(const char *filename,
unsigned line,
va_end(aq);
free(*v);
*v = value;
+
+if (n_pushed)
+(*n_pushed)++;
+
return 1;
}
}
@@ -579,19 +584,19 @@ int parse_env_file(
const char *newline, ...) {
va_list ap;
-int r;
+int r, n_pushed = 0;
if (!newline)
newline = NEWLINE;
va_start(ap, newline);
-r = parse_env_file_internal(fname, newline, parse_env_file_push,
ap);
+r = parse_env_file_internal(fname, newline, n_pushed,
parse_env_file_push, ap);
va_end(ap);
-return r;
+return r 0 ? r : n_pushed;
}
-static int load_env_file_push(const char *filename, unsigned line,
+static int load_env_file_push(const char *filename, unsigned line, int
*n_pushed,
const char *key, char *value, void *userdata) {
char ***m = userdata;
char *p;
@@ -621,6 +626,9 @@ static int load_env_file_push(const char *filename,
unsigned line,
if (r 0)
return r;
+if (n_pushed)
+(*n_pushed)++;
+
free(value);
return 0;
}
@@ -632,7 +640,7 @@ int load_env_file(const char *fname, const char *newline,
char ***rl) {
if (!newline)
newline = NEWLINE;
-r = parse_env_file_internal(fname, newline, load_env_file_push, m);
+r = parse_env_file_internal(fname, newline, NULL,
load_env_file_push, m);
if (r 0) {
strv_free(m);
return r;
--
1.9.0
Probably got lost in the backlog. Let me know if there is anything wrong with
this submission.
Michal
___
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel