X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Ffileio.c;h=3f242edc600a1b0a864820639b3073dbfb309bb4;hb=db5372091664c977a937f6bc0fe4484363be0669;hp=400a416162639e164cabb3a0c08d184a6f3bc585;hpb=fec6fc6baeca4d306cc70a61a08aef7b69da0172;p=elogind.git diff --git a/src/shared/fileio.c b/src/shared/fileio.c index 400a41616..3f242edc6 100644 --- a/src/shared/fileio.c +++ b/src/shared/fileio.c @@ -209,7 +209,9 @@ static int parse_env_file_internal( switch (state) { case PRE_KEY: - if (strchr(COMMENTS, c)) + if (startswith(p, "export ")) + p+=6; + else if (strchr(COMMENTS, c)) state = COMMENT; else if (!strchr(WHITESPACE, c)) { state = KEY; @@ -255,7 +257,7 @@ static int parse_env_file_internal( break; case PRE_VALUE: - if (strchr(newline, c)) { + if (strchr(newline, c) || strchr(COMMENTS, c)) { state = PRE_KEY; key[n_key] = 0; @@ -529,11 +531,11 @@ static void write_env_var(FILE *f, const char *v) { p++; fwrite(v, 1, p-v, f); - if (string_has_cc(p) || chars_intersect(p, WHITESPACE "\'\"\\")) { + if (string_has_cc(p) || chars_intersect(p, WHITESPACE "\'\"\\`$")) { fputc('\"', f); for (; *p; p++) { - if (strchr("\'\"\\", *p)) + if (strchr("\'\"\\`$", *p)) fputc('\\', f); fputc(*p, f);