aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/libpq/hba.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/backend/libpq/hba.c b/src/backend/libpq/hba.c
index 181e0c67b8d..4054b898928 100644
--- a/src/backend/libpq/hba.c
+++ b/src/backend/libpq/hba.c
@@ -10,7 +10,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/libpq/hba.c,v 1.164 2008/01/01 19:45:49 momjian Exp $
+ * $PostgreSQL: pgsql/src/backend/libpq/hba.c,v 1.165 2008/07/24 17:43:45 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -98,7 +98,7 @@ pg_isblank(const char c)
* Grab one token out of fp. Tokens are strings of non-blank
* characters bounded by blank characters, commas, beginning of line, and
* end of line. Blank means space or tab. Tokens can be delimited by
- * double quotes (and usually are, in current usage).
+ * double quotes (this allows the inclusion of blanks, but not newlines).
*
* The token, if any, is returned at *buf (a buffer of size bufsz).
*
@@ -110,7 +110,9 @@ pg_isblank(const char c)
* beginning of the next line or EOF, whichever comes first.
*
* Handle comments. Treat unquoted keywords that might be role names or
- * database names specially, by appending a newline to them.
+ * database names specially, by appending a newline to them. Also, when
+ * a token is terminated by a comma, the comma is included in the returned
+ * token.
*/
static bool
next_token(FILE *fp, char *buf, int bufsz)
@@ -139,7 +141,7 @@ next_token(FILE *fp, char *buf, int bufsz)
* or unquoted whitespace.
*/
while (c != EOF && c != '\n' &&
- (!pg_isblank(c) || in_quote == true))
+ (!pg_isblank(c) || in_quote))
{
/* skip comments to EOL */
if (c == '#' && !in_quote)
@@ -165,11 +167,11 @@ next_token(FILE *fp, char *buf, int bufsz)
break;
}
- if (c != '"' || (c == '"' && was_quote))
+ if (c != '"' || was_quote)
*buf++ = c;
/* We pass back the comma so the caller knows there is more */
- if ((pg_isblank(c) || c == ',') && !in_quote)
+ if (c == ',' && !in_quote)
break;
/* Literal double-quote is two double-quotes */