mirror of
https://github.com/postgres/postgres.git
synced 2025-07-07 00:36:50 +03:00
Still had a few MULTIBYTE problems when client encoding was
different from database's ...
This commit is contained in:
@ -15,13 +15,13 @@
|
|||||||
*
|
*
|
||||||
* Copyright (c) 1994, Regents of the University of California
|
* Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $Id: pqformat.c,v 1.2 1999/04/25 19:27:44 tgl Exp $
|
* $Id: pqformat.c,v 1.3 1999/04/25 21:50:56 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
* INTERFACE ROUTINES
|
* INTERFACE ROUTINES
|
||||||
* Message output:
|
* Message assembly and output:
|
||||||
* pq_beginmessage - initialize StringInfo buffer
|
* pq_beginmessage - initialize StringInfo buffer
|
||||||
* pq_sendbyte - append a raw byte to a StringInfo buffer
|
* pq_sendbyte - append a raw byte to a StringInfo buffer
|
||||||
* pq_sendint - append a binary integer to a StringInfo buffer
|
* pq_sendint - append a binary integer to a StringInfo buffer
|
||||||
@ -33,6 +33,9 @@
|
|||||||
* the regular StringInfo routines, but this is discouraged since required
|
* the regular StringInfo routines, but this is discouraged since required
|
||||||
* MULTIBYTE conversion may not occur.
|
* MULTIBYTE conversion may not occur.
|
||||||
*
|
*
|
||||||
|
* Special-case message output:
|
||||||
|
* pq_puttextmessage - generate a MULTIBYTE-converted message in one step
|
||||||
|
*
|
||||||
* Message input:
|
* Message input:
|
||||||
* pq_getint - get an integer from connection
|
* pq_getint - get an integer from connection
|
||||||
* pq_getstr - get a null terminated string from connection
|
* pq_getstr - get a null terminated string from connection
|
||||||
@ -209,6 +212,32 @@ pq_endmessage(StringInfo buf)
|
|||||||
buf->data = NULL;
|
buf->data = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* --------------------------------
|
||||||
|
* pq_puttextmessage - generate a MULTIBYTE-converted message in one step
|
||||||
|
*
|
||||||
|
* This is the same as the pqcomm.c routine pq_putmessage, except that
|
||||||
|
* the message body is a null-terminated string to which MULTIBYTE
|
||||||
|
* conversion applies.
|
||||||
|
*
|
||||||
|
* returns 0 if OK, EOF if trouble
|
||||||
|
* --------------------------------
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
pq_puttextmessage(char msgtype, const char *str)
|
||||||
|
{
|
||||||
|
int slen = strlen(str);
|
||||||
|
#ifdef MULTIBYTE
|
||||||
|
const char *p;
|
||||||
|
p = (const char *) pg_server_to_client((unsigned char *) str, slen);
|
||||||
|
if (p != str) /* actual conversion has been done? */
|
||||||
|
{
|
||||||
|
str = p;
|
||||||
|
slen = strlen(str);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return pq_putmessage(msgtype, str, slen+1);
|
||||||
|
}
|
||||||
|
|
||||||
/* --------------------------------
|
/* --------------------------------
|
||||||
* pq_getint - get an integer from connection
|
* pq_getint - get an integer from connection
|
||||||
*
|
*
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/tcop/dest.c,v 1.27 1999/04/25 19:27:45 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/backend/tcop/dest.c,v 1.28 1999/04/25 21:50:57 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -138,7 +138,7 @@ BeginCommand(char *pname,
|
|||||||
* send fe info on tuples we're about to send
|
* send fe info on tuples we're about to send
|
||||||
* ----------------
|
* ----------------
|
||||||
*/
|
*/
|
||||||
pq_putmessage('P', pname, strlen(pname)+1);
|
pq_puttextmessage('P', pname);
|
||||||
|
|
||||||
/* ----------------
|
/* ----------------
|
||||||
* if this is a retrieve, then we send back the tuple
|
* if this is a retrieve, then we send back the tuple
|
||||||
@ -272,7 +272,7 @@ EndCommand(char *commandTag, CommandDest dest)
|
|||||||
* ----------------
|
* ----------------
|
||||||
*/
|
*/
|
||||||
sprintf(buf, "%s%s", commandTag, CommandInfo);
|
sprintf(buf, "%s%s", commandTag, CommandInfo);
|
||||||
pq_putmessage('C', buf, strlen(buf)+1);
|
pq_puttextmessage('C', buf);
|
||||||
CommandInfo[0] = '\0';
|
CommandInfo[0] = '\0';
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* IDENTIFICATION
|
||||||
* $Header: /cvsroot/pgsql/src/backend/utils/error/elog.c,v 1.42 1999/04/25 03:19:11 tgl Exp $
|
* $Header: /cvsroot/pgsql/src/backend/utils/error/elog.c,v 1.43 1999/04/25 21:50:57 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -31,6 +31,7 @@
|
|||||||
#include "postgres.h"
|
#include "postgres.h"
|
||||||
#include "miscadmin.h"
|
#include "miscadmin.h"
|
||||||
#include "libpq/libpq.h"
|
#include "libpq/libpq.h"
|
||||||
|
#include "libpq/pqformat.h"
|
||||||
#include "storage/proc.h"
|
#include "storage/proc.h"
|
||||||
#include "tcop/tcopprot.h"
|
#include "tcop/tcopprot.h"
|
||||||
#include "utils/trace.h"
|
#include "utils/trace.h"
|
||||||
@ -201,8 +202,7 @@ elog(int lev, const char *fmt,...)
|
|||||||
msgtype = 'E';
|
msgtype = 'E';
|
||||||
}
|
}
|
||||||
/* exclude the timestamp from msg sent to frontend */
|
/* exclude the timestamp from msg sent to frontend */
|
||||||
pq_putmessage(msgtype, line + TIMESTAMP_SIZE,
|
pq_puttextmessage(msgtype, line + TIMESTAMP_SIZE);
|
||||||
strlen(line + TIMESTAMP_SIZE) + 1);
|
|
||||||
/*
|
/*
|
||||||
* This flush is normally not necessary, since postgres.c will
|
* This flush is normally not necessary, since postgres.c will
|
||||||
* flush out waiting data when control returns to the main loop.
|
* flush out waiting data when control returns to the main loop.
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
*
|
*
|
||||||
* Copyright (c) 1994, Regents of the University of California
|
* Copyright (c) 1994, Regents of the University of California
|
||||||
*
|
*
|
||||||
* $Id: pqformat.h,v 1.2 1999/04/25 19:27:47 tgl Exp $
|
* $Id: pqformat.h,v 1.3 1999/04/25 21:50:58 tgl Exp $
|
||||||
*
|
*
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
@ -24,6 +24,8 @@ extern void pq_sendstring(StringInfo buf, const char *str);
|
|||||||
extern void pq_sendint(StringInfo buf, int i, int b);
|
extern void pq_sendint(StringInfo buf, int i, int b);
|
||||||
extern void pq_endmessage(StringInfo buf);
|
extern void pq_endmessage(StringInfo buf);
|
||||||
|
|
||||||
|
extern int pq_puttextmessage(char msgtype, const char *str);
|
||||||
|
|
||||||
extern int pq_getint(int *result, int b);
|
extern int pq_getint(int *result, int b);
|
||||||
extern int pq_getstr(char *s, int maxlen);
|
extern int pq_getstr(char *s, int maxlen);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user