Use FLEXIBLE_ARRAY_MEMBER in some more places.
authorTom Lane <tgl@sss.pgh.pa.us>
Fri, 20 Feb 2015 22:32:01 +0000 (17:32 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Fri, 20 Feb 2015 22:32:01 +0000 (17:32 -0500)
Fix a batch of structs that are only visible within individual .c files.

Michael Paquier

src/backend/access/nbtree/nbtutils.c
src/backend/access/transam/multixact.c
src/backend/access/transam/twophase.c
src/backend/commands/tablespace.c
src/backend/commands/trigger.c
src/backend/executor/nodeAgg.c
src/backend/postmaster/checkpointer.c
src/backend/storage/ipc/pmsignal.c
src/backend/storage/ipc/procarray.c
src/backend/utils/cache/inval.c
src/backend/utils/cache/typcache.c

index 43e048cc0c04e451eb8e2c288329619c0a2c1d6f..379dac98a57c97eb8e95200050a11df4612c7107 100644 (file)
@@ -1836,7 +1836,7 @@ typedef struct BTVacInfo
        BTCycleId       cycle_ctr;              /* cycle ID most recently assigned */
        int                     num_vacuums;    /* number of currently active VACUUMs */
        int                     max_vacuums;    /* allocated length of vacuums[] array */
-       BTOneVacInfo vacuums[1];        /* VARIABLE LENGTH ARRAY */
+       BTOneVacInfo vacuums[FLEXIBLE_ARRAY_MEMBER];
 } BTVacInfo;
 
 static BTVacInfo *btvacinfo;
@@ -1984,7 +1984,7 @@ BTreeShmemSize(void)
 {
        Size            size;
 
-       size = offsetof(BTVacInfo, vacuums[0]);
+       size = offsetof(BTVacInfo, vacuums);
        size = add_size(size, mul_size(MaxBackends, sizeof(BTOneVacInfo)));
        return size;
 }
index b2cf770f9f7c0a8480347df6ff8921af4c29b58b..f9ca0283e256a05fe435e15a1eb62e1096d0e325 100644 (file)
@@ -258,7 +258,7 @@ typedef struct MultiXactStateData
         * stored in pg_control and used as truncation point for pg_multixact.  At
         * checkpoint or restartpoint, unneeded segments are removed.
         */
-       MultiXactId perBackendXactIds[1];       /* VARIABLE LENGTH ARRAY */
+       MultiXactId perBackendXactIds[FLEXIBLE_ARRAY_MEMBER];
 } MultiXactStateData;
 
 /*
@@ -1744,8 +1744,9 @@ MultiXactShmemSize(void)
 {
        Size            size;
 
+       /* We need 2*MaxOldestSlot + 1 perBackendXactIds[] entries */
 #define SHARED_MULTIXACT_STATE_SIZE \
-       add_size(sizeof(MultiXactStateData), \
+       add_size(offsetof(MultiXactStateData, perBackendXactIds) + sizeof(MultiXactId), \
                         mul_size(sizeof(MultiXactId) * 2, MaxOldestSlot))
 
        size = SHARED_MULTIXACT_STATE_SIZE;
index 6c7029edf0b91894e5755ea65c9d3d218b1a3cd5..6edc22704cc5b00a08d1154c49a2152063264398 100644 (file)
@@ -134,12 +134,9 @@ typedef struct TwoPhaseStateData
        /* Number of valid prepXacts entries. */
        int                     numPrepXacts;
 
-       /*
-        * There are max_prepared_xacts items in this array, but C wants a
-        * fixed-size array.
-        */
-       GlobalTransaction prepXacts[1];         /* VARIABLE LENGTH ARRAY */
-} TwoPhaseStateData;                   /* VARIABLE LENGTH STRUCT */
+       /* There are max_prepared_xacts items in this array */
+       GlobalTransaction prepXacts[FLEXIBLE_ARRAY_MEMBER];
+} TwoPhaseStateData;
 
 static TwoPhaseStateData *TwoPhaseState;
 
index e098b9f9685a1bddd85acfa77f139516ebdd605c..03cc8fe8d800faff9c2c21365aa3cdcf4f7e1a62 100644 (file)
@@ -1088,7 +1088,7 @@ GetDefaultTablespace(char relpersistence)
 typedef struct
 {
        int                     numSpcs;
-       Oid                     tblSpcs[1];             /* VARIABLE LENGTH ARRAY */
+       Oid                     tblSpcs[FLEXIBLE_ARRAY_MEMBER];
 } temp_tablespaces_extra;
 
 /* check_hook: validate new temp_tablespaces */
index 5c1c1beb2b8553536b896e7491b1b9668541015d..a84e86ef805b4af0889609db1b905a13901847fb 100644 (file)
@@ -3005,7 +3005,7 @@ typedef struct SetConstraintStateData
        bool            all_isdeferred;
        int                     numstates;              /* number of trigstates[] entries in use */
        int                     numalloc;               /* allocated size of trigstates[] */
-       SetConstraintTriggerData trigstates[1];         /* VARIABLE LENGTH ARRAY */
+       SetConstraintTriggerData trigstates[FLEXIBLE_ARRAY_MEMBER];
 } SetConstraintStateData;
 
 typedef SetConstraintStateData *SetConstraintState;
@@ -4398,8 +4398,8 @@ SetConstraintStateCreate(int numalloc)
         */
        state = (SetConstraintState)
                MemoryContextAllocZero(TopTransactionContext,
-                                                          sizeof(SetConstraintStateData) +
-                                                  (numalloc - 1) *sizeof(SetConstraintTriggerData));
+                                                          offsetof(SetConstraintStateData, trigstates) +
+                                                  numalloc * sizeof(SetConstraintTriggerData));
 
        state->numalloc = numalloc;
 
@@ -4440,8 +4440,8 @@ SetConstraintStateAddItem(SetConstraintState state,
                newalloc = Max(newalloc, 8);    /* in case original has size 0 */
                state = (SetConstraintState)
                        repalloc(state,
-                                        sizeof(SetConstraintStateData) +
-                                        (newalloc - 1) *sizeof(SetConstraintTriggerData));
+                                        offsetof(SetConstraintStateData, trigstates) +
+                                        newalloc * sizeof(SetConstraintTriggerData));
                state->numalloc = newalloc;
                Assert(state->numstates < state->numalloc);
        }
index 8079d97764318fdda3f939ae7165e79e220232df..9ff0eff6d7b90771b4649e9f41f783df0deed19b 100644 (file)
@@ -297,9 +297,9 @@ typedef struct AggHashEntryData *AggHashEntry;
 typedef struct AggHashEntryData
 {
        TupleHashEntryData shared;      /* common header for hash table entries */
-       /* per-aggregate transition status array - must be last! */
-       AggStatePerGroupData pergroup[1];       /* VARIABLE LENGTH ARRAY */
-}      AggHashEntryData;       /* VARIABLE LENGTH STRUCT */
+       /* per-aggregate transition status array */
+       AggStatePerGroupData pergroup[FLEXIBLE_ARRAY_MEMBER];
+}      AggHashEntryData;
 
 
 static void initialize_aggregates(AggState *aggstate,
@@ -941,8 +941,8 @@ build_hash_table(AggState *aggstate)
        Assert(node->aggstrategy == AGG_HASHED);
        Assert(node->numGroups > 0);
 
-       entrysize = sizeof(AggHashEntryData) +
-               (aggstate->numaggs - 1) * sizeof(AggStatePerGroupData);
+       entrysize = offsetof(AggHashEntryData, pergroup) +
+               aggstate->numaggs * sizeof(AggStatePerGroupData);
 
        aggstate->hashtable = BuildTupleHashTable(node->numCols,
                                                                                          node->grpColIdx,
@@ -1013,8 +1013,8 @@ hash_agg_entry_size(int numAggs)
        Size            entrysize;
 
        /* This must match build_hash_table */
-       entrysize = sizeof(AggHashEntryData) +
-               (numAggs - 1) * sizeof(AggStatePerGroupData);
+       entrysize = offsetof(AggHashEntryData, pergroup) +
+               numAggs * sizeof(AggStatePerGroupData);
        entrysize = MAXALIGN(entrysize);
        /* Account for hashtable overhead (assuming fill factor = 1) */
        entrysize += 3 * sizeof(void *);
index 237be121dd658fc4e305e0562e6e291d453a766f..cfad08d5528e992191c89139278ed4c159dad3ef 100644 (file)
@@ -130,7 +130,7 @@ typedef struct
 
        int                     num_requests;   /* current # of requests */
        int                     max_requests;   /* allocated array size */
-       CheckpointerRequest requests[1];        /* VARIABLE LENGTH ARRAY */
+       CheckpointerRequest requests[FLEXIBLE_ARRAY_MEMBER];
 } CheckpointerShmemStruct;
 
 static CheckpointerShmemStruct *CheckpointerShmem;
index 0c89eb7d9d0cf7baa06eafe286a4c38f54eab970..ea3fe20549189acb551efa868e922d7ef75a3b88 100644 (file)
@@ -66,7 +66,7 @@ struct PMSignalData
        /* per-child-process flags */
        int                     num_child_flags;        /* # of entries in PMChildFlags[] */
        int                     next_child_flag;        /* next slot to try to assign */
-       sig_atomic_t PMChildFlags[1];           /* VARIABLE LENGTH ARRAY */
+       sig_atomic_t PMChildFlags[FLEXIBLE_ARRAY_MEMBER];
 };
 
 NON_EXEC_STATIC volatile PMSignalData *PMSignalState = NULL;
index a1ebc72d8d55730aace019f565055794f5b44720..8eaec0ca6eda7bb66301cf3cb8b5811ca8ad6c78 100644 (file)
@@ -90,11 +90,8 @@ typedef struct ProcArrayStruct
        /* oldest catalog xmin of any replication slot */
        TransactionId replication_slot_catalog_xmin;
 
-       /*
-        * We declare pgprocnos[] as 1 entry because C wants a fixed-size array,
-        * but actually it is maxProcs entries long.
-        */
-       int                     pgprocnos[1];   /* VARIABLE LENGTH ARRAY */
+       /* indexes into allPgXact[], has PROCARRAY_MAXPROCS entries */
+       int                     pgprocnos[FLEXIBLE_ARRAY_MEMBER];
 } ProcArrayStruct;
 
 static ProcArrayStruct *procArray;
index 0f2192c7252f8ef264c77f27b744aec5588049f6..8826a5d50b22ddcfed3972d10fae35e168965aec 100644 (file)
@@ -122,8 +122,8 @@ typedef struct InvalidationChunk
        struct InvalidationChunk *next;         /* list link */
        int                     nitems;                 /* # items currently stored in chunk */
        int                     maxitems;               /* size of allocated array in this chunk */
-       SharedInvalidationMessage msgs[1];      /* VARIABLE LENGTH ARRAY */
-} InvalidationChunk;                   /* VARIABLE LENGTH STRUCTURE */
+       SharedInvalidationMessage msgs[FLEXIBLE_ARRAY_MEMBER];
+} InvalidationChunk;
 
 typedef struct InvalidationListHeader
 {
@@ -225,8 +225,8 @@ AddInvalidationMessage(InvalidationChunk **listHdr,
 #define FIRSTCHUNKSIZE 32
                chunk = (InvalidationChunk *)
                        MemoryContextAlloc(CurTransactionContext,
-                                                          sizeof(InvalidationChunk) +
-                                       (FIRSTCHUNKSIZE - 1) *sizeof(SharedInvalidationMessage));
+                                                          offsetof(InvalidationChunk, msgs) +
+                                       FIRSTCHUNKSIZE * sizeof(SharedInvalidationMessage));
                chunk->nitems = 0;
                chunk->maxitems = FIRSTCHUNKSIZE;
                chunk->next = *listHdr;
@@ -239,8 +239,8 @@ AddInvalidationMessage(InvalidationChunk **listHdr,
 
                chunk = (InvalidationChunk *)
                        MemoryContextAlloc(CurTransactionContext,
-                                                          sizeof(InvalidationChunk) +
-                                                (chunksize - 1) *sizeof(SharedInvalidationMessage));
+                                                          offsetof(InvalidationChunk, msgs) +
+                                                chunksize * sizeof(SharedInvalidationMessage));
                chunk->nitems = 0;
                chunk->maxitems = chunksize;
                chunk->next = *listHdr;
index 82b66683d167432cdfa25bfb7d35e94d330a4516..04927184379d4f1f9d61d55de35ac9b61163f6c9 100644 (file)
@@ -93,7 +93,7 @@ typedef struct TypeCacheEnumData
        Oid                     bitmap_base;    /* OID corresponding to bit 0 of bitmapset */
        Bitmapset  *sorted_values;      /* Set of OIDs known to be in order */
        int                     num_values;             /* total number of values in enum */
-       EnumItem        enum_values[1]; /* VARIABLE LENGTH ARRAY */
+       EnumItem        enum_values[FLEXIBLE_ARRAY_MEMBER];
 } TypeCacheEnumData;
 
 /*