]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
pg_dump: Use pg_malloc_object() and pg_malloc_array()
authorMichael Paquier <michael@paquier.xyz>
Fri, 13 Feb 2026 10:48:35 +0000 (19:48 +0900)
committerMichael Paquier <michael@paquier.xyz>
Fri, 13 Feb 2026 10:48:35 +0000 (19:48 +0900)
The idea is to encourage more the use of these allocation routines
across the tree, as these offer stronger type safety guarantees than
pg_malloc() & co (type cast in the result, sizeof() embedded).  This set
of changes is dedicated to the pg_dump code.

Similar work has been done as of 31d3847a37be, as one example.

Author: Peter Smith <smithpb2250@gmail.com>
Reviewed-by: Aleksander Alekseev <aleksander@tigerdata.com>
Discussion: https://postgr.es/m/CAHut+PvpGPDLhkHAoxw_g3jdrYxA1m16a8uagbgH3TGWSKtXNQ@mail.gmail.com

14 files changed:
src/bin/pg_dump/compress_gzip.c
src/bin/pg_dump/compress_io.c
src/bin/pg_dump/compress_lz4.c
src/bin/pg_dump/compress_none.c
src/bin/pg_dump/compress_zstd.c
src/bin/pg_dump/connectdb.c
src/bin/pg_dump/dumputils.c
src/bin/pg_dump/parallel.c
src/bin/pg_dump/pg_backup_archiver.c
src/bin/pg_dump/pg_backup_custom.c
src/bin/pg_dump/pg_backup_directory.c
src/bin/pg_dump/pg_dump.c
src/bin/pg_dump/pg_dump_sort.c
src/bin/pg_dump/pg_dumpall.c

index 41a3d059f98f7196a37839c32530bba561f719d4..c9ce8a53aaaf9fcb4dfd8858f86cc02fcd7311c9 100644 (file)
@@ -57,8 +57,8 @@ DeflateCompressorInit(CompressorState *cs)
        GzipCompressorState *gzipcs;
        z_streamp       zp;
 
-       gzipcs = (GzipCompressorState *) pg_malloc0(sizeof(GzipCompressorState));
-       zp = gzipcs->zp = (z_streamp) pg_malloc(sizeof(z_stream));
+       gzipcs = pg_malloc0_object(GzipCompressorState);
+       zp = gzipcs->zp = pg_malloc_object(z_stream);
        zp->zalloc = Z_NULL;
        zp->zfree = Z_NULL;
        zp->opaque = Z_NULL;
@@ -178,7 +178,7 @@ ReadDataFromArchiveGzip(ArchiveHandle *AH, CompressorState *cs)
        char       *buf;
        size_t          buflen;
 
-       zp = (z_streamp) pg_malloc(sizeof(z_stream));
+       zp = pg_malloc_object(z_stream);
        zp->zalloc = Z_NULL;
        zp->zfree = Z_NULL;
        zp->opaque = Z_NULL;
index af47ef88839c9be75f6b7354d684e534952e68b2..52652b0d979daced9dbce4da03265067840b1f2d 100644 (file)
@@ -125,7 +125,7 @@ AllocateCompressor(const pg_compress_specification compression_spec,
 {
        CompressorState *cs;
 
-       cs = (CompressorState *) pg_malloc0(sizeof(CompressorState));
+       cs = pg_malloc0_object(CompressorState);
        cs->readF = readF;
        cs->writeF = writeF;
 
@@ -195,7 +195,7 @@ InitCompressFileHandle(const pg_compress_specification compression_spec)
 {
        CompressFileHandle *CFH;
 
-       CFH = pg_malloc0(sizeof(CompressFileHandle));
+       CFH = pg_malloc0_object(CompressFileHandle);
 
        if (compression_spec.algorithm == PG_COMPRESSION_NONE)
                InitCompressFileHandleNone(CFH, compression_spec);
index 20a8741d3cab8d604d074cd0c7b5baeaf3094287..b72bad130ad6d26d4736e298c3988dad6c46687e 100644 (file)
@@ -305,7 +305,7 @@ InitCompressorLZ4(CompressorState *cs, const pg_compress_specification compressi
        if (cs->readF)
                return;
 
-       state = pg_malloc0(sizeof(*state));
+       state = pg_malloc0_object(LZ4State);
        if (cs->compression_spec.level >= 0)
                state->prefs.compressionLevel = cs->compression_spec.level;
 
@@ -754,7 +754,7 @@ InitCompressFileHandleLZ4(CompressFileHandle *CFH,
        CFH->get_error_func = LZ4Stream_get_error;
 
        CFH->compression_spec = compression_spec;
-       state = pg_malloc0(sizeof(*state));
+       state = pg_malloc0_object(LZ4State);
        if (CFH->compression_spec.level >= 0)
                state->prefs.compressionLevel = CFH->compression_spec.level;
 
index 9997519e3512f7e8f829590b51a1880318eded63..d862d8ca6e960c96fc913e0530850ac012e3e0d2 100644 (file)
@@ -124,7 +124,7 @@ InitCompressorNone(CompressorState *cs,
        {
                NoneCompressorState *nonecs;
 
-               nonecs = (NoneCompressorState *) pg_malloc(sizeof(NoneCompressorState));
+               nonecs = pg_malloc_object(NoneCompressorState);
                nonecs->buflen = DEFAULT_IO_BUFFER_SIZE;
                nonecs->buffer = pg_malloc(nonecs->buflen);
                nonecs->bufdata = 0;
index 889691aa0c2cea275204182b56a6c40174dc794e..cf2db2649ac07f1f6325d1b92680822a02e29a42 100644 (file)
@@ -219,7 +219,7 @@ InitCompressorZstd(CompressorState *cs,
 
        cs->compression_spec = compression_spec;
 
-       zstdcs = (ZstdCompressorState *) pg_malloc0(sizeof(*zstdcs));
+       zstdcs = pg_malloc0_object(ZstdCompressorState);
        cs->private_data = zstdcs;
 
        /* We expect that exactly one of readF/writeF is specified */
index 388d29d0aeb8414c0098f7a9d993b30b31be13b3..f3ce8b1cfb10e2b2310d78dd0118514d40071964 100644 (file)
@@ -89,8 +89,8 @@ ConnectDatabase(const char *dbname, const char *connection_string,
                                        argcount++;
                        }
 
-                       keywords = pg_malloc0((argcount + 1) * sizeof(*keywords));
-                       values = pg_malloc0((argcount + 1) * sizeof(*values));
+                       keywords = pg_malloc0_array(const char *, (argcount + 1));
+                       values = pg_malloc0_array(const char *, (argcount + 1));
 
                        for (conn_opt = conn_opts; conn_opt->keyword != NULL; conn_opt++)
                        {
@@ -105,8 +105,8 @@ ConnectDatabase(const char *dbname, const char *connection_string,
                }
                else
                {
-                       keywords = pg_malloc0((argcount + 1) * sizeof(*keywords));
-                       values = pg_malloc0((argcount + 1) * sizeof(*values));
+                       keywords = pg_malloc0_array(const char *, (argcount + 1));
+                       values = pg_malloc0_array(const char *, (argcount + 1));
                }
 
                if (pghost)
index acfa3f22cc8a665461feeffbf4beda55847471cd..5bc77fed9747e39fe6098d8422b6245d00152fbf 100644 (file)
@@ -160,7 +160,7 @@ buildACLCommands(const char *name, const char *subname, const char *nspname,
         * Besides, a false mismatch will just cause the output to be a little
         * more verbose than it really needed to be.
         */
-       grantitems = (char **) pg_malloc(naclitems * sizeof(char *));
+       grantitems = pg_malloc_array(char *, naclitems);
        for (i = 0; i < naclitems; i++)
        {
                bool            found = false;
@@ -176,7 +176,7 @@ buildACLCommands(const char *name, const char *subname, const char *nspname,
                if (!found)
                        grantitems[ngrantitems++] = aclitems[i];
        }
-       revokeitems = (char **) pg_malloc(nbaseitems * sizeof(char *));
+       revokeitems = pg_malloc_array(char *, nbaseitems);
        for (i = 0; i < nbaseitems; i++)
        {
                bool            found = false;
@@ -774,8 +774,8 @@ SplitGUCList(char *rawstring, char separator,
         * overestimate of the number of pointers we could need.  Allow one for
         * list terminator.
         */
-       *namelist = nextptr = (char **)
-               pg_malloc((strlen(rawstring) / 2 + 2) * sizeof(char *));
+       *namelist = nextptr =
+               pg_malloc_array(char *, (strlen(rawstring) / 2 + 2));
        *nextptr = NULL;
 
        while (isspace((unsigned char) *nextp))
index ddaf08faa301d1110f4cfab5c873f2b83db6f745..56cb2c1f32dce1af5990c722e431970a2b23e9e1 100644 (file)
@@ -469,7 +469,7 @@ WaitForTerminatingWorkers(ParallelState *pstate)
                }
 #else                                                  /* WIN32 */
                /* On Windows, we must use WaitForMultipleObjects() */
-               HANDLE     *lpHandles = pg_malloc(sizeof(HANDLE) * pstate->numWorkers);
+               HANDLE     *lpHandles = pg_malloc_array(HANDLE, pstate->numWorkers);
                int                     nrun = 0;
                DWORD           ret;
                uintptr_t       hThread;
@@ -903,7 +903,7 @@ ParallelBackupStart(ArchiveHandle *AH)
 
        Assert(AH->public.numWorkers > 0);
 
-       pstate = (ParallelState *) pg_malloc(sizeof(ParallelState));
+       pstate = pg_malloc_object(ParallelState);
 
        pstate->numWorkers = AH->public.numWorkers;
        pstate->te = NULL;
@@ -913,10 +913,10 @@ ParallelBackupStart(ArchiveHandle *AH)
                return pstate;
 
        /* Create status arrays, being sure to initialize all fields to 0 */
-       pstate->te = (TocEntry **)
-               pg_malloc0(pstate->numWorkers * sizeof(TocEntry *));
-       pstate->parallelSlot = (ParallelSlot *)
-               pg_malloc0(pstate->numWorkers * sizeof(ParallelSlot));
+       pstate->te =
+               pg_malloc0_array(TocEntry *, pstate->numWorkers);
+       pstate->parallelSlot =
+               pg_malloc0_array(ParallelSlot, pstate->numWorkers);
 
 #ifdef WIN32
        /* Make fmtId() and fmtQualifiedId() use thread-local storage */
@@ -969,7 +969,7 @@ ParallelBackupStart(ArchiveHandle *AH)
 
 #ifdef WIN32
                /* Create transient structure to pass args to worker function */
-               wi = (WorkerInfo *) pg_malloc(sizeof(WorkerInfo));
+               wi = pg_malloc_object(WorkerInfo);
 
                wi->AH = AH;
                wi->slot = slot;
index 35d3a07915d0757f5f26ba6d73339d5cb71dd8a5..9007f7a0c431aee04972d8125956cfe42909e8a9 100644 (file)
@@ -134,7 +134,7 @@ static void StrictNamesCheck(RestoreOptions *ropt);
 DumpOptions *
 NewDumpOptions(void)
 {
-       DumpOptions *opts = (DumpOptions *) pg_malloc(sizeof(DumpOptions));
+       DumpOptions *opts = pg_malloc_object(DumpOptions);
 
        InitDumpOptions(opts);
        return opts;
@@ -1107,7 +1107,7 @@ NewRestoreOptions(void)
 {
        RestoreOptions *opts;
 
-       opts = (RestoreOptions *) pg_malloc0(sizeof(RestoreOptions));
+       opts = pg_malloc0_object(RestoreOptions);
 
        /* set any fields that shouldn't default to zeroes */
        opts->format = archUnknown;
@@ -1244,7 +1244,7 @@ ArchiveEntry(Archive *AHX, CatalogId catalogId, DumpId dumpId,
        ArchiveHandle *AH = (ArchiveHandle *) AHX;
        TocEntry   *newToc;
 
-       newToc = (TocEntry *) pg_malloc0(sizeof(TocEntry));
+       newToc = pg_malloc0_object(TocEntry);
 
        AH->tocCount++;
        if (dumpId > AH->maxDumpId)
@@ -1272,7 +1272,7 @@ ArchiveEntry(Archive *AHX, CatalogId catalogId, DumpId dumpId,
 
        if (opts->nDeps > 0)
        {
-               newToc->dependencies = (DumpId *) pg_malloc(opts->nDeps * sizeof(DumpId));
+               newToc->dependencies = pg_malloc_array(DumpId, opts->nDeps);
                memcpy(newToc->dependencies, opts->deps, opts->nDeps * sizeof(DumpId));
                newToc->nDeps = opts->nDeps;
        }
@@ -1575,7 +1575,7 @@ SortTocFromFile(Archive *AHX)
        StringInfoData linebuf;
 
        /* Allocate space for the 'wanted' array, and init it */
-       ropt->idWanted = (bool *) pg_malloc0(sizeof(bool) * AH->maxDumpId);
+       ropt->idWanted = pg_malloc0_array(bool, AH->maxDumpId);
 
        /* Setup the file */
        fh = fopen(ropt->tocFile, PG_BINARY_R);
@@ -1990,8 +1990,8 @@ buildTocEntryArrays(ArchiveHandle *AH)
        DumpId          maxDumpId = AH->maxDumpId;
        TocEntry   *te;
 
-       AH->tocsByDumpId = (TocEntry **) pg_malloc0((maxDumpId + 1) * sizeof(TocEntry *));
-       AH->tableDataId = (DumpId *) pg_malloc0((maxDumpId + 1) * sizeof(DumpId));
+       AH->tocsByDumpId = pg_malloc0_array(TocEntry *, (maxDumpId + 1));
+       AH->tableDataId = pg_malloc0_array(DumpId, (maxDumpId + 1));
 
        for (te = AH->toc->next; te != AH->toc; te = te->next)
        {
@@ -2385,7 +2385,7 @@ _allocAH(const char *FileSpec, const ArchiveFormat fmt,
        pg_log_debug("allocating AH for %s, format %d",
                                 FileSpec ? FileSpec : "(stdio)", fmt);
 
-       AH = (ArchiveHandle *) pg_malloc0(sizeof(ArchiveHandle));
+       AH = pg_malloc0_object(ArchiveHandle);
 
        AH->version = K_VERS_SELF;
 
@@ -2422,7 +2422,7 @@ _allocAH(const char *FileSpec, const ArchiveFormat fmt,
        AH->currTablespace = NULL;      /* ditto */
        AH->currTableAm = NULL;         /* ditto */
 
-       AH->toc = (TocEntry *) pg_malloc0(sizeof(TocEntry));
+       AH->toc = pg_malloc0_object(TocEntry);
 
        AH->toc->next = AH->toc;
        AH->toc->prev = AH->toc;
@@ -2509,7 +2509,7 @@ WriteDataChunks(ArchiveHandle *AH, ParallelState *pstate)
                TocEntry  **tes;
                int                     ntes;
 
-               tes = (TocEntry **) pg_malloc(AH->tocCount * sizeof(TocEntry *));
+               tes = pg_malloc_array(TocEntry *, AH->tocCount);
                ntes = 0;
                for (te = AH->toc->next; te != AH->toc; te = te->next)
                {
@@ -2720,7 +2720,7 @@ ReadToc(ArchiveHandle *AH)
 
        for (i = 0; i < AH->tocCount; i++)
        {
-               te = (TocEntry *) pg_malloc0(sizeof(TocEntry));
+               te = pg_malloc0_object(TocEntry);
                te->dumpId = ReadInt(AH);
 
                if (te->dumpId > AH->maxDumpId)
@@ -2817,7 +2817,7 @@ ReadToc(ArchiveHandle *AH)
                if (AH->version >= K_VERS_1_5)
                {
                        depSize = 100;
-                       deps = (DumpId *) pg_malloc(sizeof(DumpId) * depSize);
+                       deps = pg_malloc_array(DumpId, depSize);
                        depIdx = 0;
                        for (;;)
                        {
@@ -2827,7 +2827,7 @@ ReadToc(ArchiveHandle *AH)
                                if (depIdx >= depSize)
                                {
                                        depSize *= 2;
-                                       deps = (DumpId *) pg_realloc(deps, sizeof(DumpId) * depSize);
+                                       deps = pg_realloc_array(deps, DumpId, depSize);
                                }
                                sscanf(tmp, "%d", &deps[depIdx]);
                                free(tmp);
@@ -2836,7 +2836,7 @@ ReadToc(ArchiveHandle *AH)
 
                        if (depIdx > 0)         /* We have a non-null entry */
                        {
-                               deps = (DumpId *) pg_realloc(deps, sizeof(DumpId) * depIdx);
+                               deps = pg_realloc_array(deps, DumpId, depIdx);
                                te->dependencies = deps;
                                te->nDeps = depIdx;
                        }
@@ -4882,7 +4882,7 @@ fix_dependencies(ArchiveHandle *AH)
                                {
                                        if (strcmp(te2->desc, "BLOBS") == 0)
                                        {
-                                               te->dependencies = (DumpId *) pg_malloc(sizeof(DumpId));
+                                               te->dependencies = pg_malloc_object(DumpId);
                                                te->dependencies[0] = te2->dumpId;
                                                te->nDeps++;
                                                te->depCount++;
@@ -4925,7 +4925,7 @@ fix_dependencies(ArchiveHandle *AH)
        for (te = AH->toc->next; te != AH->toc; te = te->next)
        {
                if (te->nRevDeps > 0)
-                       te->revDeps = (DumpId *) pg_malloc(te->nRevDeps * sizeof(DumpId));
+                       te->revDeps = pg_malloc_array(DumpId, te->nRevDeps);
                te->nRevDeps = 0;
        }
 
@@ -5040,7 +5040,7 @@ identify_locking_dependencies(ArchiveHandle *AH, TocEntry *te)
         * difference between a dependency on a table and a dependency on its
         * data, so that closer analysis would be needed here.
         */
-       lockids = (DumpId *) pg_malloc(te->nDeps * sizeof(DumpId));
+       lockids = pg_malloc_array(DumpId, te->nDeps);
        nlockids = 0;
        for (i = 0; i < te->nDeps; i++)
        {
@@ -5058,7 +5058,7 @@ identify_locking_dependencies(ArchiveHandle *AH, TocEntry *te)
                return;
        }
 
-       te->lockDeps = pg_realloc(lockids, nlockids * sizeof(DumpId));
+       te->lockDeps = pg_realloc_array(lockids, DumpId, nlockids);
        te->nLockDeps = nlockids;
 }
 
@@ -5148,11 +5148,11 @@ CloneArchive(ArchiveHandle *AH)
        ArchiveHandle *clone;
 
        /* Make a "flat" copy */
-       clone = (ArchiveHandle *) pg_malloc(sizeof(ArchiveHandle));
+       clone = pg_malloc_object(ArchiveHandle);
        memcpy(clone, AH, sizeof(ArchiveHandle));
 
        /* Likewise flat-copy the RestoreOptions, so we can alter them locally */
-       clone->public.ropt = (RestoreOptions *) pg_malloc(sizeof(RestoreOptions));
+       clone->public.ropt = pg_malloc_object(RestoreOptions);
        memcpy(clone->public.ropt, AH->public.ropt, sizeof(RestoreOptions));
 
        /* Handle format-independent fields */
index 2226520dffca9a092ad09605e1880d7c77321156..529906209400f80f3d68aa7dcfb4c58de6a5d604 100644 (file)
@@ -136,7 +136,7 @@ InitArchiveFmt_Custom(ArchiveHandle *AH)
        AH->WorkerJobRestorePtr = _WorkerJobRestoreCustom;
 
        /* Set up a private area. */
-       ctx = (lclContext *) pg_malloc0(sizeof(lclContext));
+       ctx = pg_malloc0_object(lclContext);
        AH->formatData = ctx;
 
        /*
@@ -199,7 +199,7 @@ _ArchiveEntry(ArchiveHandle *AH, TocEntry *te)
 {
        lclTocEntry *ctx;
 
-       ctx = (lclTocEntry *) pg_malloc0(sizeof(lclTocEntry));
+       ctx = pg_malloc0_object(lclTocEntry);
        if (te->dataDumper)
                ctx->dataState = K_OFFSET_POS_NOT_SET;
        else
@@ -240,7 +240,7 @@ _ReadExtraToc(ArchiveHandle *AH, TocEntry *te)
 
        if (ctx == NULL)
        {
-               ctx = (lclTocEntry *) pg_malloc0(sizeof(lclTocEntry));
+               ctx = pg_malloc0_object(lclTocEntry);
                te->formatData = ctx;
        }
 
@@ -893,7 +893,7 @@ _Clone(ArchiveHandle *AH)
        /*
         * Each thread must have private lclContext working state.
         */
-       AH->formatData = (lclContext *) pg_malloc(sizeof(lclContext));
+       AH->formatData = pg_malloc_object(lclContext);
        memcpy(AH->formatData, ctx, sizeof(lclContext));
        ctx = (lclContext *) AH->formatData;
 
index cd4036ead82a2a9a3f40b0a6f846d5d1c8e0ed14..d6a1428c67a634535223905ab6ef8d9179019f80 100644 (file)
@@ -140,7 +140,7 @@ InitArchiveFmt_Directory(ArchiveHandle *AH)
        AH->WorkerJobDumpPtr = _WorkerJobDumpDirectory;
 
        /* Set up our private context */
-       ctx = (lclContext *) pg_malloc0(sizeof(lclContext));
+       ctx = pg_malloc0_object(lclContext);
        AH->formatData = ctx;
 
        ctx->dataFH = NULL;
@@ -200,7 +200,7 @@ _ArchiveEntry(ArchiveHandle *AH, TocEntry *te)
        lclTocEntry *tctx;
        char            fn[MAXPGPATH];
 
-       tctx = (lclTocEntry *) pg_malloc0(sizeof(lclTocEntry));
+       tctx = pg_malloc0_object(lclTocEntry);
        if (strcmp(te->desc, "BLOBS") == 0)
        {
                snprintf(fn, MAXPGPATH, "blobs_%d.toc", te->dumpId);
@@ -252,7 +252,7 @@ _ReadExtraToc(ArchiveHandle *AH, TocEntry *te)
 
        if (tctx == NULL)
        {
-               tctx = (lclTocEntry *) pg_malloc0(sizeof(lclTocEntry));
+               tctx = pg_malloc0_object(lclTocEntry);
                te->formatData = tctx;
        }
 
@@ -769,7 +769,7 @@ _Clone(ArchiveHandle *AH)
 {
        lclContext *ctx = (lclContext *) AH->formatData;
 
-       AH->formatData = (lclContext *) pg_malloc(sizeof(lclContext));
+       AH->formatData = pg_malloc_object(lclContext);
        memcpy(AH->formatData, ctx, sizeof(lclContext));
        ctx = (lclContext *) AH->formatData;
 
index 2c3754d020fbabc2885533eb06870b08591ebd53..b4b7c234e206987c57e3a7e35e3152cc931d20c3 100644 (file)
@@ -1541,7 +1541,7 @@ setup_connection(Archive *AH, const char *dumpencoding,
         * Initialize prepared-query state to "nothing prepared".  We do this here
         * so that a parallel dump worker will have its own state.
         */
-       AH->is_prepared = (bool *) pg_malloc0(NUM_PREP_QUERIES * sizeof(bool));
+       AH->is_prepared = pg_malloc0_array(bool, NUM_PREP_QUERIES);
 
        /*
         * Start transaction-snapshot mode transaction to dump consistent data.
@@ -2569,7 +2569,7 @@ dumpTableData_insert(Archive *fout, const void *dcontext)
         * actual column value --- but we can save a few cycles by fetching nulls
         * rather than the uninteresting-to-us value.
         */
-       attgenerated = (char *) pg_malloc(tbinfo->numatts * sizeof(char));
+       attgenerated = pg_malloc_array(char, tbinfo->numatts);
        appendPQExpBufferStr(q, "DECLARE _pg_dump_cursor CURSOR FOR SELECT ");
        nfields = 0;
        for (i = 0; i < tbinfo->numatts; i++)
@@ -3070,7 +3070,7 @@ makeTableDataInfo(DumpOptions *dopt, TableInfo *tbinfo)
                return;
 
        /* OK, let's dump it */
-       tdinfo = (TableDataInfo *) pg_malloc(sizeof(TableDataInfo));
+       tdinfo = pg_malloc_object(TableDataInfo);
 
        if (tbinfo->relkind == RELKIND_MATVIEW)
                tdinfo->dobj.objType = DO_REFRESH_MATVIEW;
@@ -4087,14 +4087,14 @@ getLOs(Archive *fout)
                 * Create a "BLOBS" data item for the group, too. This is just a
                 * placeholder for sorting; it carries no data now.
                 */
-               lodata = (DumpableObject *) pg_malloc(sizeof(DumpableObject));
+               lodata = pg_malloc_object(DumpableObject);
                lodata->objType = DO_LARGE_OBJECT_DATA;
                lodata->catId = nilCatalogId;
                AssignDumpId(lodata);
                lodata->name = pg_strdup(namebuf);
                lodata->components |= DUMP_COMPONENT_DATA;
                /* Set up explicit dependency from data to metadata */
-               lodata->dependencies = (DumpId *) pg_malloc(sizeof(DumpId));
+               lodata->dependencies = pg_malloc_object(DumpId);
                lodata->dependencies[0] = loinfo->dobj.dumpId;
                lodata->nDeps = lodata->allocDeps = 1;
        }
@@ -4310,7 +4310,7 @@ getPolicies(Archive *fout, TableInfo tblinfo[], int numTables)
                         * Note: use tableoid 0 so that this object won't be mistaken for
                         * something that pg_depend entries apply to.
                         */
-                       polinfo = pg_malloc(sizeof(PolicyInfo));
+                       polinfo = pg_malloc_object(PolicyInfo);
                        polinfo->dobj.objType = DO_POLICY;
                        polinfo->dobj.catId.tableoid = 0;
                        polinfo->dobj.catId.oid = tbinfo->dobj.catId.oid;
@@ -4366,7 +4366,7 @@ getPolicies(Archive *fout, TableInfo tblinfo[], int numTables)
                i_polqual = PQfnumber(res, "polqual");
                i_polwithcheck = PQfnumber(res, "polwithcheck");
 
-               polinfo = pg_malloc(ntups * sizeof(PolicyInfo));
+               polinfo = pg_malloc_array(PolicyInfo, ntups);
 
                for (j = 0; j < ntups; j++)
                {
@@ -4608,7 +4608,7 @@ getPublications(Archive *fout)
        i_pubviaroot = PQfnumber(res, "pubviaroot");
        i_pubgencols = PQfnumber(res, "pubgencols");
 
-       pubinfo = pg_malloc(ntups * sizeof(PublicationInfo));
+       pubinfo = pg_malloc_array(PublicationInfo, ntups);
 
        for (i = 0; i < ntups; i++)
        {
@@ -4787,7 +4787,7 @@ getPublicationNamespaces(Archive *fout)
        i_pnnspid = PQfnumber(res, "pnnspid");
 
        /* this allocation may be more than we need */
-       pubsinfo = pg_malloc(ntups * sizeof(PublicationSchemaInfo));
+       pubsinfo = pg_malloc_array(PublicationSchemaInfo, ntups);
        j = 0;
 
        for (i = 0; i < ntups; i++)
@@ -4886,7 +4886,7 @@ getPublicationTables(Archive *fout, TableInfo tblinfo[], int numTables)
        i_prattrs = PQfnumber(res, "prattrs");
 
        /* this allocation may be more than we need */
-       pubrinfo = pg_malloc(ntups * sizeof(PublicationRelInfo));
+       pubrinfo = pg_malloc_array(PublicationRelInfo, ntups);
        j = 0;
 
        for (i = 0; i < ntups; i++)
@@ -5263,7 +5263,7 @@ getSubscriptions(Archive *fout)
        i_suborigin = PQfnumber(res, "suborigin");
        i_suboriginremotelsn = PQfnumber(res, "suboriginremotelsn");
 
-       subinfo = pg_malloc(ntups * sizeof(SubscriptionInfo));
+       subinfo = pg_malloc_array(SubscriptionInfo, ntups);
 
        for (i = 0; i < ntups; i++)
        {
@@ -5357,7 +5357,7 @@ getSubscriptionRelations(Archive *fout)
        i_srsubstate = PQfnumber(res, "srsubstate");
        i_srsublsn = PQfnumber(res, "srsublsn");
 
-       subrinfo = pg_malloc(ntups * sizeof(SubRelInfo));
+       subrinfo = pg_malloc_array(SubRelInfo, ntups);
        for (int i = 0; i < ntups; i++)
        {
                Oid                     cur_srsubid = atooid(PQgetvalue(res, i, i_srsubid));
@@ -5837,8 +5837,8 @@ collectBinaryUpgradeClassOids(Archive *fout)
        res = ExecuteSqlQuery(fout, query, PGRES_TUPLES_OK);
 
        nbinaryUpgradeClassOids = PQntuples(res);
-       binaryUpgradeClassOids = (BinaryUpgradeClassOidItem *)
-               pg_malloc(nbinaryUpgradeClassOids * sizeof(BinaryUpgradeClassOidItem));
+       binaryUpgradeClassOids =
+               pg_malloc_array(BinaryUpgradeClassOidItem, nbinaryUpgradeClassOids);
 
        for (int i = 0; i < nbinaryUpgradeClassOids; i++)
        {
@@ -6019,7 +6019,7 @@ getNamespaces(Archive *fout)
 
        ntups = PQntuples(res);
 
-       nsinfo = (NamespaceInfo *) pg_malloc(ntups * sizeof(NamespaceInfo));
+       nsinfo = pg_malloc_array(NamespaceInfo, ntups);
 
        i_tableoid = PQfnumber(res, "tableoid");
        i_oid = PQfnumber(res, "oid");
@@ -6151,7 +6151,7 @@ getExtensions(Archive *fout, int *numExtensions)
        if (ntups == 0)
                goto cleanup;
 
-       extinfo = (ExtensionInfo *) pg_malloc(ntups * sizeof(ExtensionInfo));
+       extinfo = pg_malloc_array(ExtensionInfo, ntups);
 
        i_tableoid = PQfnumber(res, "tableoid");
        i_oid = PQfnumber(res, "oid");
@@ -6250,7 +6250,7 @@ getTypes(Archive *fout)
 
        ntups = PQntuples(res);
 
-       tyinfo = (TypeInfo *) pg_malloc(ntups * sizeof(TypeInfo));
+       tyinfo = pg_malloc_array(TypeInfo, ntups);
 
        i_tableoid = PQfnumber(res, "tableoid");
        i_oid = PQfnumber(res, "oid");
@@ -6336,7 +6336,7 @@ getTypes(Archive *fout)
                        (tyinfo[i].typtype == TYPTYPE_BASE ||
                         tyinfo[i].typtype == TYPTYPE_RANGE))
                {
-                       stinfo = (ShellTypeInfo *) pg_malloc(sizeof(ShellTypeInfo));
+                       stinfo = pg_malloc_object(ShellTypeInfo);
                        stinfo->dobj.objType = DO_SHELL_TYPE;
                        stinfo->dobj.catId = nilCatalogId;
                        AssignDumpId(&stinfo->dobj);
@@ -6399,7 +6399,7 @@ getOperators(Archive *fout)
 
        ntups = PQntuples(res);
 
-       oprinfo = (OprInfo *) pg_malloc(ntups * sizeof(OprInfo));
+       oprinfo = pg_malloc_array(OprInfo, ntups);
 
        i_tableoid = PQfnumber(res, "tableoid");
        i_oid = PQfnumber(res, "oid");
@@ -6471,7 +6471,7 @@ getCollations(Archive *fout)
 
        ntups = PQntuples(res);
 
-       collinfo = (CollInfo *) pg_malloc(ntups * sizeof(CollInfo));
+       collinfo = pg_malloc_array(CollInfo, ntups);
 
        i_tableoid = PQfnumber(res, "tableoid");
        i_oid = PQfnumber(res, "oid");
@@ -6535,7 +6535,7 @@ getConversions(Archive *fout)
 
        ntups = PQntuples(res);
 
-       convinfo = (ConvInfo *) pg_malloc(ntups * sizeof(ConvInfo));
+       convinfo = pg_malloc_array(ConvInfo, ntups);
 
        i_tableoid = PQfnumber(res, "tableoid");
        i_oid = PQfnumber(res, "oid");
@@ -6608,7 +6608,7 @@ getAccessMethods(Archive *fout)
 
        ntups = PQntuples(res);
 
-       aminfo = (AccessMethodInfo *) pg_malloc(ntups * sizeof(AccessMethodInfo));
+       aminfo = pg_malloc_array(AccessMethodInfo, ntups);
 
        i_tableoid = PQfnumber(res, "tableoid");
        i_oid = PQfnumber(res, "oid");
@@ -6670,7 +6670,7 @@ getOpclasses(Archive *fout)
 
        ntups = PQntuples(res);
 
-       opcinfo = (OpclassInfo *) pg_malloc(ntups * sizeof(OpclassInfo));
+       opcinfo = pg_malloc_array(OpclassInfo, ntups);
 
        i_tableoid = PQfnumber(res, "tableoid");
        i_oid = PQfnumber(res, "oid");
@@ -6735,7 +6735,7 @@ getOpfamilies(Archive *fout)
 
        ntups = PQntuples(res);
 
-       opfinfo = (OpfamilyInfo *) pg_malloc(ntups * sizeof(OpfamilyInfo));
+       opfinfo = pg_malloc_array(OpfamilyInfo, ntups);
 
        i_tableoid = PQfnumber(res, "tableoid");
        i_oid = PQfnumber(res, "oid");
@@ -6853,7 +6853,7 @@ getAggregates(Archive *fout)
 
        ntups = PQntuples(res);
 
-       agginfo = (AggInfo *) pg_malloc(ntups * sizeof(AggInfo));
+       agginfo = pg_malloc_array(AggInfo, ntups);
 
        i_tableoid = PQfnumber(res, "tableoid");
        i_oid = PQfnumber(res, "oid");
@@ -6886,7 +6886,7 @@ getAggregates(Archive *fout)
                        agginfo[i].aggfn.argtypes = NULL;
                else
                {
-                       agginfo[i].aggfn.argtypes = (Oid *) pg_malloc(agginfo[i].aggfn.nargs * sizeof(Oid));
+                       agginfo[i].aggfn.argtypes = pg_malloc_array(Oid, agginfo[i].aggfn.nargs);
                        parseOidArray(PQgetvalue(res, i, i_proargtypes),
                                                  agginfo[i].aggfn.argtypes,
                                                  agginfo[i].aggfn.nargs);
@@ -7044,7 +7044,7 @@ getFuncs(Archive *fout)
 
        ntups = PQntuples(res);
 
-       finfo = (FuncInfo *) pg_malloc0(ntups * sizeof(FuncInfo));
+       finfo = pg_malloc0_array(FuncInfo, ntups);
 
        i_tableoid = PQfnumber(res, "tableoid");
        i_oid = PQfnumber(res, "oid");
@@ -7079,7 +7079,7 @@ getFuncs(Archive *fout)
                        finfo[i].argtypes = NULL;
                else
                {
-                       finfo[i].argtypes = (Oid *) pg_malloc(finfo[i].nargs * sizeof(Oid));
+                       finfo[i].argtypes = pg_malloc_array(Oid, finfo[i].nargs);
                        parseOidArray(PQgetvalue(res, i, i_proargtypes),
                                                  finfo[i].argtypes, finfo[i].nargs);
                }
@@ -7121,14 +7121,14 @@ getRelationStatistics(Archive *fout, DumpableObject *rel, int32 relpages,
                (relkind == RELKIND_MATVIEW ||
                 relkind == RELKIND_FOREIGN_TABLE))
        {
-               RelStatsInfo *info = pg_malloc0(sizeof(RelStatsInfo));
+               RelStatsInfo *info = pg_malloc0_object(RelStatsInfo);
                DumpableObject *dobj = &info->dobj;
 
                dobj->objType = DO_REL_STATS;
                dobj->catId.tableoid = 0;
                dobj->catId.oid = 0;
                AssignDumpId(dobj);
-               dobj->dependencies = (DumpId *) pg_malloc(sizeof(DumpId));
+               dobj->dependencies = pg_malloc_object(DumpId);
                dobj->dependencies[0] = rel->dumpId;
                dobj->nDeps = 1;
                dobj->allocDeps = 1;
@@ -7413,7 +7413,7 @@ getTables(Archive *fout, int *numTables)
         * only one, because we don't yet know which tables might be inheritance
         * ancestors of the target table.
         */
-       tblinfo = (TableInfo *) pg_malloc0(ntups * sizeof(TableInfo));
+       tblinfo = pg_malloc0_array(TableInfo, ntups);
 
        i_reltableoid = PQfnumber(res, "tableoid");
        i_reloid = PQfnumber(res, "oid");
@@ -7745,7 +7745,7 @@ getInherits(Archive *fout, int *numInherits)
 
        *numInherits = ntups;
 
-       inhinfo = (InhInfo *) pg_malloc(ntups * sizeof(InhInfo));
+       inhinfo = pg_malloc_array(InhInfo, ntups);
 
        i_inhrelid = PQfnumber(res, "inhrelid");
        i_inhparent = PQfnumber(res, "inhparent");
@@ -8057,7 +8057,7 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables)
        i_indstatcols = PQfnumber(res, "indstatcols");
        i_indstatvals = PQfnumber(res, "indstatvals");
 
-       indxinfo = (IndxInfo *) pg_malloc(ntups * sizeof(IndxInfo));
+       indxinfo = pg_malloc_array(IndxInfo, ntups);
 
        /*
         * Outer loop iterates once per table, not once per row.  Incrementing of
@@ -8123,7 +8123,7 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables)
                        indxinfo[j].indreloptions = pg_strdup(PQgetvalue(res, j, i_indreloptions));
                        indxinfo[j].indstatcols = pg_strdup(PQgetvalue(res, j, i_indstatcols));
                        indxinfo[j].indstatvals = pg_strdup(PQgetvalue(res, j, i_indstatvals));
-                       indxinfo[j].indkeys = (Oid *) pg_malloc(indxinfo[j].indnattrs * sizeof(Oid));
+                       indxinfo[j].indkeys = pg_malloc_array(Oid, indxinfo[j].indnattrs);
                        parseOidArray(PQgetvalue(res, j, i_indkey),
                                                  indxinfo[j].indkeys, indxinfo[j].indnattrs);
                        indxinfo[j].indisclustered = (PQgetvalue(res, j, i_indisclustered)[0] == 't');
@@ -8161,7 +8161,7 @@ getIndexes(Archive *fout, TableInfo tblinfo[], int numTables)
                                 */
                                ConstraintInfo *constrinfo;
 
-                               constrinfo = (ConstraintInfo *) pg_malloc(sizeof(ConstraintInfo));
+                               constrinfo = pg_malloc_object(ConstraintInfo);
                                constrinfo->dobj.objType = DO_CONSTRAINT;
                                constrinfo->dobj.catId.tableoid = atooid(PQgetvalue(res, j, i_contableoid));
                                constrinfo->dobj.catId.oid = atooid(PQgetvalue(res, j, i_conoid));
@@ -8252,7 +8252,7 @@ getExtendedStatistics(Archive *fout)
        i_stxrelid = PQfnumber(res, "stxrelid");
        i_stattarget = PQfnumber(res, "stxstattarget");
 
-       statsextinfo = (StatsExtInfo *) pg_malloc(ntups * sizeof(StatsExtInfo));
+       statsextinfo = pg_malloc_array(StatsExtInfo, ntups);
 
        for (i = 0; i < ntups; i++)
        {
@@ -8363,7 +8363,7 @@ getConstraints(Archive *fout, TableInfo tblinfo[], int numTables)
        i_conindid = PQfnumber(res, "conindid");
        i_condef = PQfnumber(res, "condef");
 
-       constrinfo = (ConstraintInfo *) pg_malloc(ntups * sizeof(ConstraintInfo));
+       constrinfo = pg_malloc_array(ConstraintInfo, ntups);
 
        curtblindx = -1;
        for (int j = 0; j < ntups; j++)
@@ -8524,7 +8524,7 @@ getDomainConstraints(Archive *fout, TypeInfo *tyinfo)
        i_convalidated = PQfnumber(res, "convalidated");
        i_contype = PQfnumber(res, "contype");
 
-       constrinfo = (ConstraintInfo *) pg_malloc(ntups * sizeof(ConstraintInfo));
+       constrinfo = pg_malloc_array(ConstraintInfo, ntups);
        tyinfo->domChecks = constrinfo;
 
        /* 'i' tracks result rows; 'j' counts CHECK constraints */
@@ -8612,7 +8612,7 @@ getRules(Archive *fout)
 
        ntups = PQntuples(res);
 
-       ruleinfo = (RuleInfo *) pg_malloc(ntups * sizeof(RuleInfo));
+       ruleinfo = pg_malloc_array(RuleInfo, ntups);
 
        i_tableoid = PQfnumber(res, "tableoid");
        i_oid = PQfnumber(res, "oid");
@@ -8818,7 +8818,7 @@ getTriggers(Archive *fout, TableInfo tblinfo[], int numTables)
        i_tgispartition = PQfnumber(res, "tgispartition");
        i_tgdef = PQfnumber(res, "tgdef");
 
-       tginfo = (TriggerInfo *) pg_malloc(ntups * sizeof(TriggerInfo));
+       tginfo = pg_malloc_array(TriggerInfo, ntups);
 
        /*
         * Outer loop iterates once per table, not once per row.  Incrementing of
@@ -8915,7 +8915,7 @@ getEventTriggers(Archive *fout)
 
        ntups = PQntuples(res);
 
-       evtinfo = (EventTriggerInfo *) pg_malloc(ntups * sizeof(EventTriggerInfo));
+       evtinfo = pg_malloc_array(EventTriggerInfo, ntups);
 
        i_tableoid = PQfnumber(res, "tableoid");
        i_oid = PQfnumber(res, "oid");
@@ -8989,7 +8989,7 @@ getProcLangs(Archive *fout)
 
        ntups = PQntuples(res);
 
-       planginfo = (ProcLangInfo *) pg_malloc(ntups * sizeof(ProcLangInfo));
+       planginfo = pg_malloc_array(ProcLangInfo, ntups);
 
        i_tableoid = PQfnumber(res, "tableoid");
        i_oid = PQfnumber(res, "oid");
@@ -9081,7 +9081,7 @@ getCasts(Archive *fout)
 
        ntups = PQntuples(res);
 
-       castinfo = (CastInfo *) pg_malloc(ntups * sizeof(CastInfo));
+       castinfo = pg_malloc_array(CastInfo, ntups);
 
        i_tableoid = PQfnumber(res, "tableoid");
        i_oid = PQfnumber(res, "oid");
@@ -9180,7 +9180,7 @@ getTransforms(Archive *fout)
 
        ntups = PQntuples(res);
 
-       transforminfo = (TransformInfo *) pg_malloc(ntups * sizeof(TransformInfo));
+       transforminfo = pg_malloc_array(TransformInfo, ntups);
 
        i_tableoid = PQfnumber(res, "tableoid");
        i_oid = PQfnumber(res, "oid");
@@ -9518,28 +9518,28 @@ getTableAttrs(Archive *fout, TableInfo *tblinfo, int numTables)
 
                /* Save data for this table */
                tbinfo->numatts = numatts;
-               tbinfo->attnames = (char **) pg_malloc(numatts * sizeof(char *));
-               tbinfo->atttypnames = (char **) pg_malloc(numatts * sizeof(char *));
-               tbinfo->attstattarget = (int *) pg_malloc(numatts * sizeof(int));
-               tbinfo->attstorage = (char *) pg_malloc(numatts * sizeof(char));
-               tbinfo->typstorage = (char *) pg_malloc(numatts * sizeof(char));
-               tbinfo->attidentity = (char *) pg_malloc(numatts * sizeof(char));
-               tbinfo->attgenerated = (char *) pg_malloc(numatts * sizeof(char));
-               tbinfo->attisdropped = (bool *) pg_malloc(numatts * sizeof(bool));
-               tbinfo->attlen = (int *) pg_malloc(numatts * sizeof(int));
-               tbinfo->attalign = (char *) pg_malloc(numatts * sizeof(char));
-               tbinfo->attislocal = (bool *) pg_malloc(numatts * sizeof(bool));
-               tbinfo->attoptions = (char **) pg_malloc(numatts * sizeof(char *));
-               tbinfo->attcollation = (Oid *) pg_malloc(numatts * sizeof(Oid));
-               tbinfo->attcompression = (char *) pg_malloc(numatts * sizeof(char));
-               tbinfo->attfdwoptions = (char **) pg_malloc(numatts * sizeof(char *));
-               tbinfo->attmissingval = (char **) pg_malloc(numatts * sizeof(char *));
-               tbinfo->notnull_constrs = (char **) pg_malloc(numatts * sizeof(char *));
-               tbinfo->notnull_comment = (char **) pg_malloc(numatts * sizeof(char *));
-               tbinfo->notnull_invalid = (bool *) pg_malloc(numatts * sizeof(bool));
-               tbinfo->notnull_noinh = (bool *) pg_malloc(numatts * sizeof(bool));
-               tbinfo->notnull_islocal = (bool *) pg_malloc(numatts * sizeof(bool));
-               tbinfo->attrdefs = (AttrDefInfo **) pg_malloc(numatts * sizeof(AttrDefInfo *));
+               tbinfo->attnames = pg_malloc_array(char *, numatts);
+               tbinfo->atttypnames = pg_malloc_array(char *, numatts);
+               tbinfo->attstattarget = pg_malloc_array(int, numatts);
+               tbinfo->attstorage = pg_malloc_array(char, numatts);
+               tbinfo->typstorage = pg_malloc_array(char, numatts);
+               tbinfo->attidentity = pg_malloc_array(char, numatts);
+               tbinfo->attgenerated = pg_malloc_array(char, numatts);
+               tbinfo->attisdropped = pg_malloc_array(bool, numatts);
+               tbinfo->attlen = pg_malloc_array(int, numatts);
+               tbinfo->attalign = pg_malloc_array(char, numatts);
+               tbinfo->attislocal = pg_malloc_array(bool, numatts);
+               tbinfo->attoptions = pg_malloc_array(char *, numatts);
+               tbinfo->attcollation = pg_malloc_array(Oid, numatts);
+               tbinfo->attcompression = pg_malloc_array(char, numatts);
+               tbinfo->attfdwoptions = pg_malloc_array(char *, numatts);
+               tbinfo->attmissingval = pg_malloc_array(char *, numatts);
+               tbinfo->notnull_constrs = pg_malloc_array(char *, numatts);
+               tbinfo->notnull_comment = pg_malloc_array(char *, numatts);
+               tbinfo->notnull_invalid = pg_malloc_array(bool, numatts);
+               tbinfo->notnull_noinh = pg_malloc_array(bool, numatts);
+               tbinfo->notnull_islocal = pg_malloc_array(bool, numatts);
+               tbinfo->attrdefs = pg_malloc_array(AttrDefInfo *, numatts);
                hasdefaults = false;
 
                for (int j = 0; j < numatts; j++, r++)
@@ -9624,7 +9624,7 @@ getTableAttrs(Archive *fout, TableInfo *tblinfo, int numTables)
                res = ExecuteSqlQuery(fout, q->data, PGRES_TUPLES_OK);
 
                numDefaults = PQntuples(res);
-               attrdefs = (AttrDefInfo *) pg_malloc(numDefaults * sizeof(AttrDefInfo));
+               attrdefs = pg_malloc_array(AttrDefInfo, numDefaults);
 
                curtblindx = -1;
                for (int j = 0; j < numDefaults; j++)
@@ -9760,7 +9760,7 @@ getTableAttrs(Archive *fout, TableInfo *tblinfo, int numTables)
                res = ExecuteSqlQuery(fout, q->data, PGRES_TUPLES_OK);
 
                numConstrs = PQntuples(res);
-               constrs = (ConstraintInfo *) pg_malloc(numConstrs * sizeof(ConstraintInfo));
+               constrs = pg_malloc_array(ConstraintInfo, numConstrs);
 
                i_tableoid = PQfnumber(res, "tableoid");
                i_oid = PQfnumber(res, "oid");
@@ -9859,7 +9859,7 @@ getTableAttrs(Archive *fout, TableInfo *tblinfo, int numTables)
                res = ExecuteSqlQuery(fout, q->data, PGRES_TUPLES_OK);
 
                numConstrs = PQntuples(res);
-               constrs = (ConstraintInfo *) pg_malloc(numConstrs * sizeof(ConstraintInfo));
+               constrs = pg_malloc_array(ConstraintInfo, numConstrs);
 
                i_tableoid = PQfnumber(res, "tableoid");
                i_oid = PQfnumber(res, "oid");
@@ -10187,7 +10187,7 @@ getTSParsers(Archive *fout)
 
        ntups = PQntuples(res);
 
-       prsinfo = (TSParserInfo *) pg_malloc(ntups * sizeof(TSParserInfo));
+       prsinfo = pg_malloc_array(TSParserInfo, ntups);
 
        i_tableoid = PQfnumber(res, "tableoid");
        i_oid = PQfnumber(res, "oid");
@@ -10254,7 +10254,7 @@ getTSDictionaries(Archive *fout)
 
        ntups = PQntuples(res);
 
-       dictinfo = (TSDictInfo *) pg_malloc(ntups * sizeof(TSDictInfo));
+       dictinfo = pg_malloc_array(TSDictInfo, ntups);
 
        i_tableoid = PQfnumber(res, "tableoid");
        i_oid = PQfnumber(res, "oid");
@@ -10318,7 +10318,7 @@ getTSTemplates(Archive *fout)
 
        ntups = PQntuples(res);
 
-       tmplinfo = (TSTemplateInfo *) pg_malloc(ntups * sizeof(TSTemplateInfo));
+       tmplinfo = pg_malloc_array(TSTemplateInfo, ntups);
 
        i_tableoid = PQfnumber(res, "tableoid");
        i_oid = PQfnumber(res, "oid");
@@ -10377,7 +10377,7 @@ getTSConfigurations(Archive *fout)
 
        ntups = PQntuples(res);
 
-       cfginfo = (TSConfigInfo *) pg_malloc(ntups * sizeof(TSConfigInfo));
+       cfginfo = pg_malloc_array(TSConfigInfo, ntups);
 
        i_tableoid = PQfnumber(res, "tableoid");
        i_oid = PQfnumber(res, "oid");
@@ -10449,7 +10449,7 @@ getForeignDataWrappers(Archive *fout)
 
        ntups = PQntuples(res);
 
-       fdwinfo = (FdwInfo *) pg_malloc(ntups * sizeof(FdwInfo));
+       fdwinfo = pg_malloc_array(FdwInfo, ntups);
 
        i_tableoid = PQfnumber(res, "tableoid");
        i_oid = PQfnumber(res, "oid");
@@ -10532,7 +10532,7 @@ getForeignServers(Archive *fout)
 
        ntups = PQntuples(res);
 
-       srvinfo = (ForeignServerInfo *) pg_malloc(ntups * sizeof(ForeignServerInfo));
+       srvinfo = pg_malloc_array(ForeignServerInfo, ntups);
 
        i_tableoid = PQfnumber(res, "tableoid");
        i_oid = PQfnumber(res, "oid");
@@ -10630,7 +10630,7 @@ getDefaultACLs(Archive *fout)
 
        ntups = PQntuples(res);
 
-       daclinfo = (DefaultACLInfo *) pg_malloc(ntups * sizeof(DefaultACLInfo));
+       daclinfo = pg_malloc_array(DefaultACLInfo, ntups);
 
        i_oid = PQfnumber(res, "oid");
        i_tableoid = PQfnumber(res, "tableoid");
@@ -10729,7 +10729,7 @@ collectRoleNames(Archive *fout)
 
        nrolenames = PQntuples(res);
 
-       rolenames = (RoleNameItem *) pg_malloc(nrolenames * sizeof(RoleNameItem));
+       rolenames = pg_malloc_array(RoleNameItem, nrolenames);
 
        for (i = 0; i < nrolenames; i++)
        {
@@ -11606,7 +11606,7 @@ collectComments(Archive *fout)
 
        ntups = PQntuples(res);
 
-       comments = (CommentItem *) pg_malloc(ntups * sizeof(CommentItem));
+       comments = pg_malloc_array(CommentItem, ntups);
        ncomments = 0;
        dobj = NULL;
 
@@ -13683,7 +13683,7 @@ dumpFunc(Archive *fout, const FuncInfo *finfo)
 
        if (*protrftypes)
        {
-               Oid                *typeids = pg_malloc(FUNC_MAX_ARGS * sizeof(Oid));
+               Oid                *typeids = pg_malloc_array(Oid, FUNC_MAX_ARGS);
                int                     i;
 
                appendPQExpBufferStr(q, " TRANSFORM ");
@@ -16810,7 +16810,7 @@ collectSecLabels(Archive *fout)
 
        ntups = PQntuples(res);
 
-       seclabels = (SecLabelItem *) pg_malloc(ntups * sizeof(SecLabelItem));
+       seclabels = pg_malloc_array(SecLabelItem, ntups);
        nseclabels = 0;
        dobj = NULL;
 
@@ -19178,7 +19178,7 @@ collectSequences(Archive *fout)
        res = ExecuteSqlQuery(fout, query, PGRES_TUPLES_OK);
 
        nsequences = PQntuples(res);
-       sequences = (SequenceItem *) pg_malloc(nsequences * sizeof(SequenceItem));
+       sequences = pg_malloc_array(SequenceItem, nsequences);
 
        for (int i = 0; i < nsequences; i++)
        {
@@ -19256,7 +19256,7 @@ dumpSequence(Archive *fout, const TableInfo *tbinfo)
                                                          PQntuples(res)),
                                         tbinfo->dobj.name, PQntuples(res));
 
-               seq = pg_malloc0(sizeof(SequenceItem));
+               seq = pg_malloc0_object(SequenceItem);
                seq->seqtype = parse_sequence_type(PQgetvalue(res, 0, 0));
                seq->startv = strtoi64(PQgetvalue(res, 0, 1), NULL, 10);
                seq->incby = strtoi64(PQgetvalue(res, 0, 2), NULL, 10);
@@ -20360,7 +20360,7 @@ createBoundaryObjects(void)
 {
        DumpableObject *dobjs;
 
-       dobjs = (DumpableObject *) pg_malloc(2 * sizeof(DumpableObject));
+       dobjs = pg_malloc_array(DumpableObject, 2);
 
        dobjs[0].objType = DO_PRE_DATA_BOUNDARY;
        dobjs[0].catId = nilCatalogId;
@@ -20534,7 +20534,7 @@ BuildArchiveDependencies(Archive *fout)
                        continue;
                /* Set up work array */
                allocDeps = 64;
-               dependencies = (DumpId *) pg_malloc(allocDeps * sizeof(DumpId));
+               dependencies = pg_malloc_array(DumpId, allocDeps);
                nDeps = 0;
                /* Recursively find all dumpable dependencies */
                findDumpableDependencies(AH, dobj,
@@ -20542,8 +20542,7 @@ BuildArchiveDependencies(Archive *fout)
                /* And save 'em ... */
                if (nDeps > 0)
                {
-                       dependencies = (DumpId *) pg_realloc(dependencies,
-                                                                                                nDeps * sizeof(DumpId));
+                       dependencies = pg_realloc_array(dependencies, DumpId, nDeps);
                        te->dependencies = dependencies;
                        te->nDeps = nDeps;
                }
@@ -20577,8 +20576,7 @@ findDumpableDependencies(ArchiveHandle *AH, const DumpableObject *dobj,
                        if (*nDeps >= *allocDeps)
                        {
                                *allocDeps *= 2;
-                               *dependencies = (DumpId *) pg_realloc(*dependencies,
-                                                                                                         *allocDeps * sizeof(DumpId));
+                               *dependencies = pg_realloc_array(*dependencies, DumpId, *allocDeps);
                        }
                        (*dependencies)[*nDeps] = depid;
                        (*nDeps)++;
index 24bed6681dece52889fed706a89e5b9406068026..03e5c1c1116c0d2bbca786417ec241b76979ad14 100644 (file)
@@ -572,7 +572,7 @@ sortDumpableObjects(DumpableObject **objs, int numObjs,
        preDataBoundId = preBoundaryId;
        postDataBoundId = postBoundaryId;
 
-       ordering = (DumpableObject **) pg_malloc(numObjs * sizeof(DumpableObject *));
+       ordering = pg_malloc_array(DumpableObject *, numObjs);
        while (!TopoSort(objs, numObjs, ordering, &nOrdering))
                findDependencyLoops(ordering, nOrdering, numObjs);
 
@@ -651,8 +651,8 @@ TopoSort(DumpableObject **objs,
         * We also make a map showing the input-order index of the item with
         * dumpId j.
         */
-       beforeConstraints = (int *) pg_malloc0((maxDumpId + 1) * sizeof(int));
-       idMap = (int *) pg_malloc((maxDumpId + 1) * sizeof(int));
+       beforeConstraints = pg_malloc0_array(int, (maxDumpId + 1));
+       idMap = pg_malloc_array(int, (maxDumpId + 1));
        for (i = 0; i < numObjs; i++)
        {
                obj = objs[i];
@@ -787,9 +787,9 @@ findDependencyLoops(DumpableObject **objs, int nObjs, int totObjs)
        bool            fixedloop;
        int                     i;
 
-       processed = (bool *) pg_malloc0((getMaxDumpId() + 1) * sizeof(bool));
-       searchFailed = (DumpId *) pg_malloc0((getMaxDumpId() + 1) * sizeof(DumpId));
-       workspace = (DumpableObject **) pg_malloc(totObjs * sizeof(DumpableObject *));
+       processed = pg_malloc0_array(bool, (getMaxDumpId() + 1));
+       searchFailed = pg_malloc0_array(DumpId, (getMaxDumpId() + 1));
+       workspace = pg_malloc_array(DumpableObject *, totObjs);
        fixedloop = false;
 
        for (i = 0; i < nObjs; i++)
index 30fecd0c252df2b075194f94f93a932fe0be49ca..98389d2034cdbdaf69b5a6458486f33b1303ca91 100644 (file)
@@ -1140,7 +1140,7 @@ dumpRoleMembership(PGconn *conn)
                }
 
                remaining = end - start;
-               done = pg_malloc0(remaining * sizeof(bool));
+               done = pg_malloc0_array(bool, remaining);
                ht = rolename_create(remaining, NULL);
 
                /*