svn commit: r273273 - head/contrib/openpam/lib/libpam
Dag-Erling Smørgrav
des at FreeBSD.org
Sun Oct 19 11:06:55 UTC 2014
Author: des
Date: Sun Oct 19 11:06:54 2014
New Revision: 273273
URL: https://svnweb.freebsd.org/changeset/base/273273
Log:
Merge upstream r825: fix line continuation in whitespace
Modified:
head/contrib/openpam/lib/libpam/openpam_readword.c
Directory Properties:
head/contrib/openpam/ (props changed)
Modified: head/contrib/openpam/lib/libpam/openpam_readword.c
==============================================================================
--- head/contrib/openpam/lib/libpam/openpam_readword.c Sun Oct 19 08:47:27 2014 (r273272)
+++ head/contrib/openpam/lib/libpam/openpam_readword.c Sun Oct 19 11:06:54 2014 (r273273)
@@ -55,18 +55,35 @@ openpam_readword(FILE *f, int *lineno, s
{
char *word;
size_t size, len;
- int ch, comment, escape, quote;
+ int ch, escape, quote;
int serrno;
errno = 0;
/* skip initial whitespace */
- comment = 0;
- while ((ch = getc(f)) != EOF && ch != '\n') {
- if (ch == '#')
- comment = 1;
- if (!is_lws(ch) && !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, s
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, s
} 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 {
More information about the svn-src-head
mailing list