OSDN Git Service

Fix unportable, non-spec-compliant use of offsetof() with a nonconstant
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 26 Nov 2001 22:31:08 +0000 (22:31 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 26 Nov 2001 22:31:08 +0000 (22:31 +0000)
member offset.

src/backend/postmaster/pgstat.c

index b77c129..c01d047 100644 (file)
@@ -16,7 +16,7 @@
  *
  *     Copyright (c) 2001, PostgreSQL Global Development Group
  *
- *     $Header: /cvsroot/pgsql/src/backend/postmaster/pgstat.c,v 1.14 2001/10/25 05:49:40 momjian Exp $
+ *     $Header: /cvsroot/pgsql/src/backend/postmaster/pgstat.c,v 1.15 2001/11/26 22:31:08 tgl Exp $
  * ----------
  */
 #include "postgres.h"
@@ -464,7 +464,8 @@ pgstat_report_tabstat(void)
        for (i = 0; i < pgStatTabstatUsed; i++)
        {
                n = pgStatTabstatMessages[i]->m_nentries;
-               len = offsetof(PgStat_MsgTabstat, m_entry[n]);
+               len = offsetof(PgStat_MsgTabstat, m_entry[0]) +
+                       n * sizeof(PgStat_TableEntry);
 
                pgStatTabstatMessages[i]->m_xact_commit = pgStatXactCommit;
                pgStatTabstatMessages[i]->m_xact_rollback = pgStatXactRollback;
@@ -573,7 +574,8 @@ pgstat_vacuum_tabstat(void)
                 */
                if (msg.m_nentries >= PGSTAT_NUM_TABPURGE)
                {
-                       len = offsetof(PgStat_MsgTabpurge, m_tableid[msg.m_nentries]);
+                       len = offsetof(PgStat_MsgTabpurge, m_tableid[0])
+                               + msg.m_nentries * sizeof(Oid);
 
                        pgstat_setheader(&msg.m_hdr, PGSTAT_MTYPE_TABPURGE);
                        pgstat_send(&msg, len);
@@ -587,7 +589,8 @@ pgstat_vacuum_tabstat(void)
         */
        if (msg.m_nentries > 0)
        {
-               len = offsetof(PgStat_MsgTabpurge, m_tableid[msg.m_nentries]);
+               len = offsetof(PgStat_MsgTabpurge, m_tableid[0])
+                       + msg.m_nentries * sizeof(Oid);
 
                pgstat_setheader(&msg.m_hdr, PGSTAT_MTYPE_TABPURGE);
                pgstat_send(&msg, len);