summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Momjian <bruce@momjian.us>2002-04-15 23:35:51 +0000
committerBruce Momjian <bruce@momjian.us>2002-04-15 23:35:51 +0000
commit5b92d004fa8226ea52b696e647d0867d5bb1f076 (patch)
treeb5931a56200feca4a01dc68ae06cefaab9e9db66
parent394eec1068f1caea4c6ac4a3f2191eaef2a6719e (diff)
Fix for NOTIFY when NAMEDATALEN is nonstandard in server. Fix idea from
Tom Lane to move string storage to end of structure but keep pointer in the same location.
-rw-r--r--src/interfaces/libpq/fe-exec.c14
-rw-r--r--src/interfaces/libpq/libpq-fe.h5
2 files changed, 13 insertions, 6 deletions
diff --git a/src/interfaces/libpq/fe-exec.c b/src/interfaces/libpq/fe-exec.c
index 0633663c890..88fc1a9f00d 100644
--- a/src/interfaces/libpq/fe-exec.c
+++ b/src/interfaces/libpq/fe-exec.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.118 2002/04/08 03:48:10 ishii Exp $
+ * $Header: /cvsroot/pgsql/src/interfaces/libpq/fe-exec.c,v 1.119 2002/04/15 23:35:51 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -1510,8 +1510,16 @@ getNotify(PGconn *conn)
return EOF;
if (pqGets(&conn->workBuffer, conn))
return EOF;
- newNotify = (PGnotify *) malloc(sizeof(PGnotify));
- strncpy(newNotify->relname, conn->workBuffer.data, NAMEDATALEN);
+
+ /*
+ * Store the relation name right after the PQnotify structure so it can
+ * all be freed at once. We don't use NAMEDATALEN because we don't
+ * want to tie this interface to a specific server name length.
+ */
+ newNotify = (PGnotify *) malloc(sizeof(PGnotify) +
+ strlen(conn->workBuffer.data) + 1);
+ newNotify->relname = (char *)newNotify + sizeof(PGnotify);
+ strcpy(newNotify->relname, conn->workBuffer.data);
newNotify->be_pid = be_pid;
DLAddTail(conn->notifyList, DLNewElem(newNotify));
return 0;
diff --git a/src/interfaces/libpq/libpq-fe.h b/src/interfaces/libpq/libpq-fe.h
index b034b3992a1..7f77f8aec4f 100644
--- a/src/interfaces/libpq/libpq-fe.h
+++ b/src/interfaces/libpq/libpq-fe.h
@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California
*
- * $Id: libpq-fe.h,v 1.83 2002/03/05 06:07:26 momjian Exp $
+ * $Id: libpq-fe.h,v 1.84 2002/04/15 23:35:51 momjian Exp $
*
*-------------------------------------------------------------------------
*/
@@ -105,8 +105,7 @@ typedef struct pg_result PGresult;
*/
typedef struct pgNotify
{
- char relname[NAMEDATALEN]; /* name of relation containing
- * data */
+ char *relname; /* name of relation containing data */
int be_pid; /* process id of backend */
} PGnotify;