1010 *
1111 *
1212 * IDENTIFICATION
13- * $PostgreSQL: pgsql/src/backend/libpq/hba.c,v 1.164 2008/01/01 19:45:49 momjian Exp $
13+ * $PostgreSQL: pgsql/src/backend/libpq/hba.c,v 1.165 2008/07/24 17:43:45 tgl Exp $
1414 *
1515 *-------------------------------------------------------------------------
1616 */
@@ -98,7 +98,7 @@ pg_isblank(const char c)
9898 * Grab one token out of fp. Tokens are strings of non-blank
9999 * characters bounded by blank characters, commas, beginning of line, and
100100 * end of line. Blank means space or tab. Tokens can be delimited by
101- * double quotes (and usually are, in current usage ).
101+ * double quotes (this allows the inclusion of blanks, but not newlines ).
102102 *
103103 * The token, if any, is returned at *buf (a buffer of size bufsz).
104104 *
@@ -110,7 +110,9 @@ pg_isblank(const char c)
110110 * beginning of the next line or EOF, whichever comes first.
111111 *
112112 * Handle comments. Treat unquoted keywords that might be role names or
113- * database names specially, by appending a newline to them.
113+ * database names specially, by appending a newline to them. Also, when
114+ * a token is terminated by a comma, the comma is included in the returned
115+ * token.
114116 */
115117static bool
116118next_token (FILE * fp ,char * buf ,int bufsz )
@@ -139,7 +141,7 @@ next_token(FILE *fp, char *buf, int bufsz)
139141 * or unquoted whitespace.
140142 */
141143while (c != EOF && c != '\n' &&
142- (!pg_isblank (c )|| in_quote == true ))
144+ (!pg_isblank (c )|| in_quote ))
143145{
144146/* skip comments to EOL */
145147if (c == '#' && !in_quote )
@@ -165,11 +167,11 @@ next_token(FILE *fp, char *buf, int bufsz)
165167break ;
166168}
167169
168- if (c != '"' || ( c == '"' && was_quote ) )
170+ if (c != '"' || was_quote )
169171* buf ++ = c ;
170172
171173/* We pass back the comma so the caller knows there is more */
172- if (( pg_isblank ( c ) || c == ',' ) && !in_quote )
174+ if (c == ',' && !in_quote )
173175break ;
174176
175177/* Literal double-quote is two double-quotes */