Ignore BOM in config files
Fixes #2823. Also remove unnecessary feof check.
This commit is contained in:
parent
e31512b1c9
commit
9dd7ea9a7d
|
@ -28,6 +28,7 @@
|
|||
#include "missing.h"
|
||||
|
||||
#define UTF8_REPLACEMENT_CHARACTER "\xef\xbf\xbd"
|
||||
#define UTF8_BYTE_ORDER_MARK "\xef\xbb\xbf"
|
||||
|
||||
bool unichar_is_valid(char32_t c);
|
||||
|
||||
|
|
|
@ -294,7 +294,7 @@ int config_parse(const char *unit,
|
|||
_cleanup_free_ char *section = NULL, *continuation = NULL;
|
||||
_cleanup_fclose_ FILE *ours = NULL;
|
||||
unsigned line = 0, section_line = 0;
|
||||
bool section_ignored = false;
|
||||
bool section_ignored = false, allow_bom = true;
|
||||
int r;
|
||||
|
||||
assert(filename);
|
||||
|
@ -314,11 +314,11 @@ int config_parse(const char *unit,
|
|||
|
||||
fd_warn_permissions(filename, fileno(f));
|
||||
|
||||
while (!feof(f)) {
|
||||
char l[LINE_MAX], *p, *c = NULL, *e;
|
||||
for (;;) {
|
||||
char buf[LINE_MAX], *l, *p, *c = NULL, *e;
|
||||
bool escaped = false;
|
||||
|
||||
if (!fgets(l, sizeof(l), f)) {
|
||||
if (!fgets(buf, sizeof buf, f)) {
|
||||
if (feof(f))
|
||||
break;
|
||||
|
||||
|
@ -326,6 +326,11 @@ int config_parse(const char *unit,
|
|||
return -errno;
|
||||
}
|
||||
|
||||
l = buf;
|
||||
if (allow_bom && startswith(l, UTF8_BYTE_ORDER_MARK))
|
||||
l += strlen(UTF8_BYTE_ORDER_MARK);
|
||||
allow_bom = false;
|
||||
|
||||
truncate_nl(l);
|
||||
|
||||
if (continuation) {
|
||||
|
|
Loading…
Reference in a new issue