From: Michael Paquier Date: Fri, 13 Feb 2026 10:48:35 +0000 (+0900) Subject: pg_dump: Use pg_malloc_object() and pg_malloc_array() X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6736dea14afbe239588dad1c947ceb6e50adbf72;p=thirdparty%2Fpostgresql.git pg_dump: Use pg_malloc_object() and pg_malloc_array() 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 Reviewed-by: Aleksander Alekseev Discussion: https://postgr.es/m/CAHut+PvpGPDLhkHAoxw_g3jdrYxA1m16a8uagbgH3TGWSKtXNQ@mail.gmail.com --- diff --git a/src/bin/pg_dump/compress_gzip.c b/src/bin/pg_dump/compress_gzip.c index 41a3d059f98..c9ce8a53aaa 100644 --- a/src/bin/pg_dump/compress_gzip.c +++ b/src/bin/pg_dump/compress_gzip.c @@ -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; diff --git a/src/bin/pg_dump/compress_io.c b/src/bin/pg_dump/compress_io.c index af47ef88839..52652b0d979 100644 --- a/src/bin/pg_dump/compress_io.c +++ b/src/bin/pg_dump/compress_io.c @@ -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); diff --git a/src/bin/pg_dump/compress_lz4.c b/src/bin/pg_dump/compress_lz4.c index 20a8741d3ca..b72bad130ad 100644 --- a/src/bin/pg_dump/compress_lz4.c +++ b/src/bin/pg_dump/compress_lz4.c @@ -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; diff --git a/src/bin/pg_dump/compress_none.c b/src/bin/pg_dump/compress_none.c index 9997519e351..d862d8ca6e9 100644 --- a/src/bin/pg_dump/compress_none.c +++ b/src/bin/pg_dump/compress_none.c @@ -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; diff --git a/src/bin/pg_dump/compress_zstd.c b/src/bin/pg_dump/compress_zstd.c index 889691aa0c2..cf2db2649ac 100644 --- a/src/bin/pg_dump/compress_zstd.c +++ b/src/bin/pg_dump/compress_zstd.c @@ -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 */ diff --git a/src/bin/pg_dump/connectdb.c b/src/bin/pg_dump/connectdb.c index 388d29d0aeb..f3ce8b1cfb1 100644 --- a/src/bin/pg_dump/connectdb.c +++ b/src/bin/pg_dump/connectdb.c @@ -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) diff --git a/src/bin/pg_dump/dumputils.c b/src/bin/pg_dump/dumputils.c index acfa3f22cc8..5bc77fed974 100644 --- a/src/bin/pg_dump/dumputils.c +++ b/src/bin/pg_dump/dumputils.c @@ -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)) diff --git a/src/bin/pg_dump/parallel.c b/src/bin/pg_dump/parallel.c index ddaf08faa30..56cb2c1f32d 100644 --- a/src/bin/pg_dump/parallel.c +++ b/src/bin/pg_dump/parallel.c @@ -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; diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c index 35d3a07915d..9007f7a0c43 100644 --- a/src/bin/pg_dump/pg_backup_archiver.c +++ b/src/bin/pg_dump/pg_backup_archiver.c @@ -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 */ diff --git a/src/bin/pg_dump/pg_backup_custom.c b/src/bin/pg_dump/pg_backup_custom.c index 2226520dffc..52990620940 100644 --- a/src/bin/pg_dump/pg_backup_custom.c +++ b/src/bin/pg_dump/pg_backup_custom.c @@ -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; diff --git a/src/bin/pg_dump/pg_backup_directory.c b/src/bin/pg_dump/pg_backup_directory.c index cd4036ead82..d6a1428c67a 100644 --- a/src/bin/pg_dump/pg_backup_directory.c +++ b/src/bin/pg_dump/pg_backup_directory.c @@ -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; diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index 2c3754d020f..b4b7c234e20 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -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)++; diff --git a/src/bin/pg_dump/pg_dump_sort.c b/src/bin/pg_dump/pg_dump_sort.c index 24bed6681de..03e5c1c1116 100644 --- a/src/bin/pg_dump/pg_dump_sort.c +++ b/src/bin/pg_dump/pg_dump_sort.c @@ -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++) diff --git a/src/bin/pg_dump/pg_dumpall.c b/src/bin/pg_dump/pg_dumpall.c index 30fecd0c252..98389d2034c 100644 --- a/src/bin/pg_dump/pg_dumpall.c +++ b/src/bin/pg_dump/pg_dumpall.c @@ -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); /*