aboutsummaryrefslogtreecommitdiff
path: root/src/backend/libpq/hba.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/libpq/hba.c')
-rw-r--r--src/backend/libpq/hba.c127
1 files changed, 60 insertions, 67 deletions
diff --git a/src/backend/libpq/hba.c b/src/backend/libpq/hba.c
index 081fc4977cb..80fe645c1a3 100644
--- a/src/backend/libpq/hba.c
+++ b/src/backend/libpq/hba.c
@@ -10,7 +10,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/libpq/hba.c,v 1.78 2001/11/12 04:29:23 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/libpq/hba.c,v 1.79 2002/01/09 19:13:40 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -111,7 +111,7 @@ next_token(FILE *fp, char *buf, const int bufsz)
static void
-read_to_eol(FILE *file)
+read_through_eol(FILE *file)
{
int c;
@@ -162,7 +162,7 @@ tokenize_file(FILE *file)
if (comment_ptr != NULL)
{
/* Found a comment, so skip the rest of the line */
- read_to_eol(file);
+ read_through_eol(file);
next_line = NIL;
}
@@ -1159,14 +1159,12 @@ GetCharSetByHost(char *TableName, int host, const char *DataDir)
OrigCharset[MAX_TOKEN],
DestCharset[MAX_TOKEN],
HostCharset[MAX_TOKEN],
- c,
- eof = false,
*map_file;
- int key = 0,
+ int key,
ChIndex = 0,
+ c,
i,
bufsize;
-
struct CharsetItem *ChArray[MAX_CHARSETS];
*TableName = '\0';
@@ -1174,95 +1172,90 @@ GetCharSetByHost(char *TableName, int host, const char *DataDir)
map_file = (char *) palloc(bufsize);
snprintf(map_file, bufsize, "%s/%s", DataDir, CHARSET_FILE);
file = AllocateFile(map_file, PG_BINARY_R);
+ pfree(map_file);
if (file == NULL)
{
/* XXX should we log a complaint? */
return;
}
- while (!eof)
+ while ((c = getc(file)) != EOF)
{
- c = getc(file);
- ungetc(c, file);
- if (c == EOF)
- eof = true;
+ if (c == '#')
+ read_through_eol(file);
else
{
- if (c == '#')
- read_to_eol(file);
- else
+ /* Read the key */
+ ungetc(c, file);
+ next_token(file, buf, sizeof(buf));
+ if (buf[0] != '\0')
{
- /* Read the key */
- next_token(file, buf, sizeof(buf));
- if (buf[0] != '\0')
+ key = 0;
+ if (strcasecmp(buf, "HostCharset") == 0)
+ key = KEY_HOST;
+ if (strcasecmp(buf, "BaseCharset") == 0)
+ key = KEY_BASE;
+ if (strcasecmp(buf, "RecodeTable") == 0)
+ key = KEY_TABLE;
+ switch (key)
{
- if (strcasecmp(buf, "HostCharset") == 0)
- key = KEY_HOST;
- if (strcasecmp(buf, "BaseCharset") == 0)
- key = KEY_BASE;
- if (strcasecmp(buf, "RecodeTable") == 0)
- key = KEY_TABLE;
- switch (key)
- {
- case KEY_HOST:
- /* Read the host */
- next_token(file, buf, sizeof(buf));
- if (buf[0] != '\0')
+ case KEY_HOST:
+ /* Read the host */
+ next_token(file, buf, sizeof(buf));
+ if (buf[0] != '\0')
+ {
+ if (CharSetInRange(buf, host))
{
- if (CharSetInRange(buf, host))
- {
- /* Read the charset */
- next_token(file, buf, sizeof(buf));
- if (buf[0] != '\0')
- strcpy(HostCharset, buf);
- }
+ /* Read the charset */
+ next_token(file, buf, sizeof(buf));
+ if (buf[0] != '\0')
+ strcpy(HostCharset, buf);
}
- break;
- case KEY_BASE:
- /* Read the base charset */
- next_token(file, buf, sizeof(buf));
- if (buf[0] != '\0')
- strcpy(BaseCharset, buf);
- break;
- case KEY_TABLE:
- /* Read the original charset */
+ }
+ break;
+ case KEY_BASE:
+ /* Read the base charset */
+ next_token(file, buf, sizeof(buf));
+ if (buf[0] != '\0')
+ strcpy(BaseCharset, buf);
+ break;
+ case KEY_TABLE:
+ /* Read the original charset */
+ next_token(file, buf, sizeof(buf));
+ if (buf[0] != '\0')
+ {
+ strcpy(OrigCharset, buf);
+ /* Read the destination charset */
next_token(file, buf, sizeof(buf));
if (buf[0] != '\0')
{
- strcpy(OrigCharset, buf);
- /* Read the destination charset */
+ strcpy(DestCharset, buf);
+ /* Read the table filename */
next_token(file, buf, sizeof(buf));
if (buf[0] != '\0')
{
- strcpy(DestCharset, buf);
- /* Read the table filename */
- next_token(file, buf, sizeof(buf));
- if (buf[0] != '\0')
- {
- ChArray[ChIndex] =
- (struct CharsetItem *) palloc(sizeof(struct CharsetItem));
- strcpy(ChArray[ChIndex]->Orig, OrigCharset);
- strcpy(ChArray[ChIndex]->Dest, DestCharset);
- strcpy(ChArray[ChIndex]->Table, buf);
- ChIndex++;
- }
+ ChArray[ChIndex] =
+ (struct CharsetItem *) palloc(sizeof(struct CharsetItem));
+ strcpy(ChArray[ChIndex]->Orig, OrigCharset);
+ strcpy(ChArray[ChIndex]->Dest, DestCharset);
+ strcpy(ChArray[ChIndex]->Table, buf);
+ ChIndex++;
}
}
- break;
- }
- read_to_eol(file);
+ }
+ break;
}
+ read_through_eol(file);
}
}
}
FreeFile(file);
- pfree(map_file);
for (i = 0; i < ChIndex; i++)
{
- if (!strcasecmp(BaseCharset, ChArray[i]->Orig) &&
- !strcasecmp(HostCharset, ChArray[i]->Dest))
+ if (strcasecmp(BaseCharset, ChArray[i]->Orig) == 0 &&
+ strcasecmp(HostCharset, ChArray[i]->Dest) == 0)
strncpy(TableName, ChArray[i]->Table, 79);
- pfree((struct CharsetItem *) ChArray[i]);
+ pfree(ChArray[i]);
}
}