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 {
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to