Support line continuation in whitespace.

git-svn-id: svn+ssh://svn.openpam.org/svn/openpam/trunk@792 185d5e19-27fe-0310-9dcf-9bff6b9f3609
This commit is contained in:
Dag-Erling Smørgrav 2014-03-17 14:11:41 +00:00
parent 4614107c94
commit e58f05403e
1 changed files with 23 additions and 7 deletions

View File

@ -61,12 +61,29 @@ openpam_readword(FILE *f, int *lineno, size_t *lenp)
errno = 0;
/* skip initial whitespace */
comment = 0;
while ((ch = getc(f)) != EOF && ch != '\n') {
if (ch == '#')
comment = 1;
if (!is_lws(ch) && !comment)
comment = escape = quote = 0;
while ((ch = getc(f)) != EOF) {
if (ch == '\n') {
/* either EOL or line continuation */
if (!escape)
break;
if (lineno != NULL)
++*lineno;
escape = 0;
} else if (escape) {
/* escaped something else */
break;
} else if (ch == '#') {
/* comment: until EOL, no continuation */
while ((ch = getc(f)) != EOF)
if (ch == '\n')
break;
break;
} else if (ch == '\\') {
escape = 1;
} else if (!is_ws(ch)) {
break;
}
}
if (ch == EOF)
return (NULL);
@ -76,7 +93,6 @@ openpam_readword(FILE *f, int *lineno, size_t *lenp)
word = NULL;
size = len = 0;
escape = quote = 0;
while ((ch = fgetc(f)) != EOF && (!is_ws(ch) || quote || escape)) {
if (ch == '\\' && !escape && quote != '\'') {
/* escape next character */
@ -90,7 +106,7 @@ openpam_readword(FILE *f, int *lineno, size_t *lenp)
} else if (ch == quote && !escape) {
/* end quote */
quote = 0;
} else if (ch == '\n' && escape && quote != '\'') {
} else if (ch == '\n' && escape) {
/* line continuation */
escape = 0;
} else {