From edc43458d797a5956f4bf39af18cf62abb0077db Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Mon, 6 Jan 2014 21:30:26 -0500 Subject: [PATCH] Add more use of psprintf() --- contrib/dblink/dblink.c | 5 +- contrib/hstore/hstore_io.c | 6 +-- contrib/pageinspect/btreefuncs.c | 73 +++++++++----------------- contrib/pgstattuple/pgstatindex.c | 34 +++++------- doc/src/sgml/xtypes.sgml | 3 +- src/backend/access/transam/multixact.c | 3 +- src/backend/commands/define.c | 7 +-- src/backend/optimizer/plan/subselect.c | 8 +-- src/backend/parser/parse_type.c | 3 +- src/backend/storage/smgr/md.c | 4 +- src/backend/utils/adt/date.c | 6 +-- src/backend/utils/adt/timestamp.c | 7 +-- src/backend/utils/fmgr/funcapi.c | 3 +- src/test/regress/regress.c | 6 +-- src/tutorial/complex.c | 3 +- 15 files changed, 52 insertions(+), 119 deletions(-) diff --git a/contrib/dblink/dblink.c b/contrib/dblink/dblink.c index a91a547ada..5fd1dd8c58 100644 --- a/contrib/dblink/dblink.c +++ b/contrib/dblink/dblink.c @@ -1563,10 +1563,7 @@ dblink_get_pkey(PG_FUNCTION_ARGS) Datum result; values = (char **) palloc(2 * sizeof(char *)); - values[0] = (char *) palloc(12); /* sign, 10 digits, '\0' */ - - sprintf(values[0], "%d", call_cntr + 1); - + values[0] = psprintf("%d", call_cntr + 1); values[1] = results[call_cntr]; /* build the tuple */ diff --git a/contrib/hstore/hstore_io.c b/contrib/hstore/hstore_io.c index 772a5ca5d5..973a1265c1 100644 --- a/contrib/hstore/hstore_io.c +++ b/contrib/hstore/hstore_io.c @@ -1114,11 +1114,7 @@ hstore_out(PG_FUNCTION_ARGS) HEntry *entries = ARRPTR(in); if (count == 0) - { - out = palloc(1); - *out = '\0'; - PG_RETURN_CSTRING(out); - } + PG_RETURN_CSTRING(pstrdup("")); buflen = 0; diff --git a/contrib/pageinspect/btreefuncs.c b/contrib/pageinspect/btreefuncs.c index bc34af9b3c..e3f3c2818f 100644 --- a/contrib/pageinspect/btreefuncs.c +++ b/contrib/pageinspect/btreefuncs.c @@ -220,31 +220,17 @@ bt_page_stats(PG_FUNCTION_ARGS) elog(ERROR, "return type must be a row type"); j = 0; - values[j] = palloc(32); - snprintf(values[j++], 32, "%d", stat.blkno); - values[j] = palloc(32); - snprintf(values[j++], 32, "%c", stat.type); - values[j] = palloc(32); - snprintf(values[j++], 32, "%d", stat.live_items); - values[j] = palloc(32); - snprintf(values[j++], 32, "%d", stat.dead_items); - values[j] = palloc(32); - snprintf(values[j++], 32, "%d", stat.avg_item_size); - values[j] = palloc(32); - snprintf(values[j++], 32, "%d", stat.page_size); - values[j] = palloc(32); - snprintf(values[j++], 32, "%d", stat.free_size); - values[j] = palloc(32); - snprintf(values[j++], 32, "%d", stat.btpo_prev); - values[j] = palloc(32); - snprintf(values[j++], 32, "%d", stat.btpo_next); - values[j] = palloc(32); - if (stat.type == 'd') - snprintf(values[j++], 32, "%d", stat.btpo.xact); - else - snprintf(values[j++], 32, "%d", stat.btpo.level); - values[j] = palloc(32); - snprintf(values[j++], 32, "%d", stat.btpo_flags); + values[j++] = psprintf("%d", stat.blkno); + values[j++] = psprintf("%c", stat.type); + values[j++] = psprintf("%d", stat.live_items); + values[j++] = psprintf("%d", stat.dead_items); + values[j++] = psprintf("%d", stat.avg_item_size); + values[j++] = psprintf("%d", stat.page_size); + values[j++] = psprintf("%d", stat.free_size); + values[j++] = psprintf("%d", stat.btpo_prev); + values[j++] = psprintf("%d", stat.btpo_next); + values[j++] = psprintf("%d", (stat.type == 'd') ? stat.btpo.xact : stat.btpo.level); + values[j++] = psprintf("%d", stat.btpo_flags); tuple = BuildTupleFromCStrings(TupleDescGetAttInMetadata(tupleDesc), values); @@ -380,18 +366,13 @@ bt_page_items(PG_FUNCTION_ARGS) itup = (IndexTuple) PageGetItem(uargs->page, id); j = 0; - values[j] = palloc(32); - snprintf(values[j++], 32, "%d", uargs->offset); - values[j] = palloc(32); - snprintf(values[j++], 32, "(%u,%u)", - BlockIdGetBlockNumber(&(itup->t_tid.ip_blkid)), - itup->t_tid.ip_posid); - values[j] = palloc(32); - snprintf(values[j++], 32, "%d", (int) IndexTupleSize(itup)); - values[j] = palloc(32); - snprintf(values[j++], 32, "%c", IndexTupleHasNulls(itup) ? 't' : 'f'); - values[j] = palloc(32); - snprintf(values[j++], 32, "%c", IndexTupleHasVarwidths(itup) ? 't' : 'f'); + values[j++] = psprintf("%d", uargs->offset); + values[j++] = psprintf("(%u,%u)", + BlockIdGetBlockNumber(&(itup->t_tid.ip_blkid)), + itup->t_tid.ip_posid); + values[j++] = psprintf("%d", (int) IndexTupleSize(itup)); + values[j++] = psprintf("%c", IndexTupleHasNulls(itup) ? 't' : 'f'); + values[j++] = psprintf("%c", IndexTupleHasVarwidths(itup) ? 't' : 'f'); ptr = (char *) itup + IndexInfoFindDataOffset(itup->t_info); dlen = IndexTupleSize(itup) - IndexInfoFindDataOffset(itup->t_info); @@ -477,18 +458,12 @@ bt_metap(PG_FUNCTION_ARGS) elog(ERROR, "return type must be a row type"); j = 0; - values[j] = palloc(32); - snprintf(values[j++], 32, "%d", metad->btm_magic); - values[j] = palloc(32); - snprintf(values[j++], 32, "%d", metad->btm_version); - values[j] = palloc(32); - snprintf(values[j++], 32, "%d", metad->btm_root); - values[j] = palloc(32); - snprintf(values[j++], 32, "%d", metad->btm_level); - values[j] = palloc(32); - snprintf(values[j++], 32, "%d", metad->btm_fastroot); - values[j] = palloc(32); - snprintf(values[j++], 32, "%d", metad->btm_fastlevel); + values[j++] = psprintf("%d", metad->btm_magic); + values[j++] = psprintf("%d", metad->btm_version); + values[j++] = psprintf("%d", metad->btm_root); + values[j++] = psprintf("%d", metad->btm_level); + values[j++] = psprintf("%d", metad->btm_fastroot); + values[j++] = psprintf("%d", metad->btm_fastlevel); tuple = BuildTupleFromCStrings(TupleDescGetAttInMetadata(tupleDesc), values); diff --git a/contrib/pgstattuple/pgstatindex.c b/contrib/pgstattuple/pgstatindex.c index 282d82ca82..8939b784db 100644 --- a/contrib/pgstattuple/pgstatindex.c +++ b/contrib/pgstattuple/pgstatindex.c @@ -271,39 +271,29 @@ pgstatindex_impl(Relation rel, FunctionCallInfo fcinfo) elog(ERROR, "return type must be a row type"); j = 0; - values[j] = palloc(32); - snprintf(values[j++], 32, "%d", indexStat.version); - values[j] = palloc(32); - snprintf(values[j++], 32, "%d", indexStat.level); - values[j] = palloc(32); - snprintf(values[j++], 32, INT64_FORMAT, + values[j++] = psprintf("%d", indexStat.version); + values[j++] = psprintf("%d", indexStat.level); + values[j++] = psprintf(INT64_FORMAT, (indexStat.root_pages + indexStat.leaf_pages + indexStat.internal_pages + indexStat.deleted_pages + indexStat.empty_pages) * BLCKSZ); - values[j] = palloc(32); - snprintf(values[j++], 32, "%u", indexStat.root_blkno); - values[j] = palloc(32); - snprintf(values[j++], 32, INT64_FORMAT, indexStat.internal_pages); - values[j] = palloc(32); - snprintf(values[j++], 32, INT64_FORMAT, indexStat.leaf_pages); - values[j] = palloc(32); - snprintf(values[j++], 32, INT64_FORMAT, indexStat.empty_pages); - values[j] = palloc(32); - snprintf(values[j++], 32, INT64_FORMAT, indexStat.deleted_pages); - values[j] = palloc(32); + values[j++] = psprintf("%u", indexStat.root_blkno); + values[j++] = psprintf(INT64_FORMAT, indexStat.internal_pages); + values[j++] = psprintf(INT64_FORMAT, indexStat.leaf_pages); + values[j++] = psprintf(INT64_FORMAT, indexStat.empty_pages); + values[j++] = psprintf(INT64_FORMAT, indexStat.deleted_pages); if (indexStat.max_avail > 0) - snprintf(values[j++], 32, "%.2f", + values[j++] = psprintf("%.2f", 100.0 - (double) indexStat.free_space / (double) indexStat.max_avail * 100.0); else - snprintf(values[j++], 32, "NaN"); - values[j] = palloc(32); + values[j++] = pstrdup("NaN"); if (indexStat.leaf_pages > 0) - snprintf(values[j++], 32, "%.2f", + values[j++] = psprintf("%.2f", (double) indexStat.fragments / (double) indexStat.leaf_pages * 100.0); else - snprintf(values[j++], 32, "NaN"); + values[j++] = pstrdup("NaN"); tuple = BuildTupleFromCStrings(TupleDescGetAttInMetadata(tupleDesc), values); diff --git a/doc/src/sgml/xtypes.sgml b/doc/src/sgml/xtypes.sgml index 0154181cc5..e1340baeb7 100644 --- a/doc/src/sgml/xtypes.sgml +++ b/doc/src/sgml/xtypes.sgml @@ -108,8 +108,7 @@ complex_out(PG_FUNCTION_ARGS) Complex *complex = (Complex *) PG_GETARG_POINTER(0); char *result; - result = (char *) palloc(100); - snprintf(result, 100, "(%g,%g)", complex->x, complex->y); + result = psprintf("(%g,%g)", complex->x, complex->y); PG_RETURN_CSTRING(result); } ]]> diff --git a/src/backend/access/transam/multixact.c b/src/backend/access/transam/multixact.c index e2b31ee441..6ab53840f8 100644 --- a/src/backend/access/transam/multixact.c +++ b/src/backend/access/transam/multixact.c @@ -2757,8 +2757,7 @@ pg_get_multixact_members(PG_FUNCTION_ARGS) HeapTuple tuple; char *values[2]; - values[0] = palloc(32); - sprintf(values[0], "%u", multi->members[multi->iter].xid); + values[0] = psprintf("%u", multi->members[multi->iter].xid); values[1] = mxstatus_to_string(multi->members[multi->iter].status); tuple = BuildTupleFromCStrings(funccxt->attinmeta, values); diff --git a/src/backend/commands/define.c b/src/backend/commands/define.c index 75f77da2cf..486ef92492 100644 --- a/src/backend/commands/define.c +++ b/src/backend/commands/define.c @@ -56,12 +56,7 @@ defGetString(DefElem *def) switch (nodeTag(def->arg)) { case T_Integer: - { - char *str = palloc(32); - - snprintf(str, 32, "%ld", (long) intVal(def->arg)); - return str; - } + return psprintf("%ld", (long) intVal(def->arg)); case T_Float: /* diff --git a/src/backend/optimizer/plan/subselect.c b/src/backend/optimizer/plan/subselect.c index 0f92118660..70fdb14085 100644 --- a/src/backend/optimizer/plan/subselect.c +++ b/src/backend/optimizer/plan/subselect.c @@ -778,10 +778,7 @@ build_subplan(PlannerInfo *root, Plan *plan, PlannerInfo *subroot, sprintf(splan->plan_name + offset, ")"); } else - { - splan->plan_name = palloc(32); - sprintf(splan->plan_name, "SubPlan %d", splan->plan_id); - } + splan->plan_name = psprintf("SubPlan %d", splan->plan_id); /* Lastly, fill in the cost estimates for use later */ cost_subplan(root, splan, plan); @@ -2600,8 +2597,7 @@ SS_make_initplan_from_plan(PlannerInfo *root, Plan *plan, node->setParam = list_make1_int(prm->paramid); /* Label the subplan for EXPLAIN purposes */ - node->plan_name = palloc(64); - sprintf(node->plan_name, "InitPlan %d (returns $%d)", + node->plan_name = psprintf("InitPlan %d (returns $%d)", node->plan_id, prm->paramid); return prm; diff --git a/src/backend/parser/parse_type.c b/src/backend/parser/parse_type.c index ee6802a655..84ec8a70e7 100644 --- a/src/backend/parser/parse_type.c +++ b/src/backend/parser/parse_type.c @@ -313,8 +313,7 @@ typenameTypeMod(ParseState *pstate, const TypeName *typeName, Type typ) if (IsA(&ac->val, Integer)) { - cstr = (char *) palloc(32); - snprintf(cstr, 32, "%ld", (long) ac->val.val.ival); + cstr = psprintf("%ld", (long) ac->val.val.ival); } else if (IsA(&ac->val, Float) || IsA(&ac->val, String)) diff --git a/src/backend/storage/smgr/md.c b/src/backend/storage/smgr/md.c index e62918195e..268035ca92 100644 --- a/src/backend/storage/smgr/md.c +++ b/src/backend/storage/smgr/md.c @@ -1649,9 +1649,7 @@ _mdfd_segpath(SMgrRelation reln, ForkNumber forknum, BlockNumber segno) if (segno > 0) { - /* be sure we have enough space for the '.segno' */ - fullpath = (char *) palloc(strlen(path) + 12); - sprintf(fullpath, "%s.%u", path, segno); + fullpath = psprintf("%s.%u", path, segno); pfree(path); } else diff --git a/src/backend/utils/adt/date.c b/src/backend/utils/adt/date.c index fe091daec8..2bafd6145c 100644 --- a/src/backend/utils/adt/date.c +++ b/src/backend/utils/adt/date.c @@ -91,14 +91,12 @@ anytime_typmodin(bool istz, ArrayType *ta) static char * anytime_typmodout(bool istz, int32 typmod) { - char *res = (char *) palloc(64); const char *tz = istz ? " with time zone" : " without time zone"; if (typmod >= 0) - snprintf(res, 64, "(%d)%s", (int) typmod, tz); + return psprintf("(%d)%s", (int) typmod, tz); else - snprintf(res, 64, "%s", tz); - return res; + return psprintf("%s", tz); } diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c index c3c71b7281..5263d80767 100644 --- a/src/backend/utils/adt/timestamp.c +++ b/src/backend/utils/adt/timestamp.c @@ -116,15 +116,12 @@ anytimestamp_typmodin(bool istz, ArrayType *ta) static char * anytimestamp_typmodout(bool istz, int32 typmod) { - char *res = (char *) palloc(64); const char *tz = istz ? " with time zone" : " without time zone"; if (typmod >= 0) - snprintf(res, 64, "(%d)%s", (int) typmod, tz); + return psprintf("(%d)%s", (int) typmod, tz); else - snprintf(res, 64, "%s", tz); - - return res; + return psprintf("%s", tz); } diff --git a/src/backend/utils/fmgr/funcapi.c b/src/backend/utils/fmgr/funcapi.c index 6347a8f1ac..7718f43da4 100644 --- a/src/backend/utils/fmgr/funcapi.c +++ b/src/backend/utils/fmgr/funcapi.c @@ -1205,8 +1205,7 @@ build_function_result_tupdesc_d(Datum proallargtypes, if (pname == NULL || pname[0] == '\0') { /* Parameter is not named, so gin up a column name */ - pname = (char *) palloc(32); - snprintf(pname, 32, "column%d", numoutargs + 1); + pname = psprintf("column%d", numoutargs + 1); } outargnames[numoutargs] = pname; numoutargs++; diff --git a/src/test/regress/regress.c b/src/test/regress/regress.c index 3bd8a15285..4dbe314557 100644 --- a/src/test/regress/regress.c +++ b/src/test/regress/regress.c @@ -269,15 +269,11 @@ widget_in(char *str) char * widget_out(WIDGET * widget) { - char *result; - if (widget == NULL) return NULL; - result = (char *) palloc(60); - sprintf(result, "(%g,%g,%g)", + return psprintf("(%g,%g,%g)", widget->center.x, widget->center.y, widget->radius); - return result; } PG_FUNCTION_INFO_V1(pt_in_widget); diff --git a/src/tutorial/complex.c b/src/tutorial/complex.c index edae0065c7..80655885d5 100644 --- a/src/tutorial/complex.c +++ b/src/tutorial/complex.c @@ -73,8 +73,7 @@ complex_out(PG_FUNCTION_ARGS) Complex *complex = (Complex *) PG_GETARG_POINTER(0); char *result; - result = (char *) palloc(100); - snprintf(result, 100, "(%g,%g)", complex->x, complex->y); + result = psprintf("(%g,%g)", complex->x, complex->y); PG_RETURN_CSTRING(result); }