Avoid overhead with fprintf related functions
Based on work in [1]/messages/by-id/CAApHDvp2THseLvCc+TcYFBC7FKHpHTs1JyYmd2JghtOVhb5WGA@mail.gmail.com.
According to https://cplusplus.com/reference/cstdio/fprintf/
The use of fprintf is related to the need to generate a string based on a
format, which should be different from "%s".
Since fprintf has overhead when parsing the "format" parameter, plus all
the trouble of checking the va_arg parameters.
I think this is one of the low fruits available and easy to reap.
By replacing fprintf with its equivalents, fputs and fputc,
we avoid overhead and increase security [2]https://stackoverflow.com/questions/20837989/fprintf-stack-buffer-overflow and [3]https://bufferoverflows.net/format-string-vulnerability-what-when-and-how/.
The downside is a huge big churm, which unfortunately will occur.
But, IHMO, I think the advantages are worth it.
Note that behavior remains the same, since fputs and fputc do not change
the expected behavior of fprintf.
A small performance gain is expected, mainly for the client, since there
are several occurrences in some critical places, such as
(usr/src/fe_utils/print.c).
Patch attached.
This pass check-world.
regards,
Ranier Vilela
[1]: /messages/by-id/CAApHDvp2THseLvCc+TcYFBC7FKHpHTs1JyYmd2JghtOVhb5WGA@mail.gmail.com
/messages/by-id/CAApHDvp2THseLvCc+TcYFBC7FKHpHTs1JyYmd2JghtOVhb5WGA@mail.gmail.com
[2]: https://stackoverflow.com/questions/20837989/fprintf-stack-buffer-overflow
https://stackoverflow.com/questions/20837989/fprintf-stack-buffer-overflow
[3]: https://bufferoverflows.net/format-string-vulnerability-what-when-and-how/
https://bufferoverflows.net/format-string-vulnerability-what-when-and-how/
Attachments:
fprintf_fixes.patchapplication/octet-stream; name=fprintf_fixes.patchDownload
diff --git a/contrib/oid2name/oid2name.c b/contrib/oid2name/oid2name.c
index 32d5444831..4672d8b2a4 100644
--- a/contrib/oid2name/oid2name.c
+++ b/contrib/oid2name/oid2name.c
@@ -422,7 +422,7 @@ sql_exec(PGconn *conn, const char *todo, bool quiet)
fprintf(stdout, "%*s", length[j] + 2, PQfname(res, j));
l += length[j] + 2;
}
- fprintf(stdout, "\n");
+ fputc('\n', stdout);
pad = (char *) pg_malloc(l + 1);
memset(pad, '-', l);
pad[l] = '\0';
@@ -435,7 +435,7 @@ sql_exec(PGconn *conn, const char *todo, bool quiet)
{
for (j = 0; j < nfields; j++)
fprintf(stdout, "%*s", length[j] + 2, PQgetvalue(res, i, j));
- fprintf(stdout, "\n");
+ fputc('\n', stdout);
}
/* cleanup */
diff --git a/contrib/pg_trgm/trgm_regexp.c b/contrib/pg_trgm/trgm_regexp.c
index 58d32ba946..ed1ab65940 100644
--- a/contrib/pg_trgm/trgm_regexp.c
+++ b/contrib/pg_trgm/trgm_regexp.c
@@ -2201,7 +2201,7 @@ printSourceNFA(regex_t *regex, TrgmColorInfo *colors, int ncolors)
/* dot -Tpng -o /tmp/source.png < /tmp/source.gv */
FILE *fp = fopen("/tmp/source.gv", "w");
- fprintf(fp, "%s", buf.data);
+ fputs(buf.data, fp);
fclose(fp);
}
@@ -2263,7 +2263,7 @@ printTrgmNFA(TrgmNFA *trgmNFA)
/* dot -Tpng -o /tmp/transformed.png < /tmp/transformed.gv */
FILE *fp = fopen("/tmp/transformed.gv", "w");
- fprintf(fp, "%s", buf.data);
+ fputs(buf.data, fp);
fclose(fp);
}
@@ -2354,7 +2354,7 @@ printTrgmPackedGraph(TrgmPackedGraph *packedGraph, TRGM *trigrams)
/* dot -Tpng -o /tmp/packed.png < /tmp/packed.gv */
FILE *fp = fopen("/tmp/packed.gv", "w");
- fprintf(fp, "%s", buf.data);
+ fputs(buf.data, fp);
fclose(fp);
}
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 264b879bd3..e51ce8df57 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -133,7 +133,7 @@ vacuumlo(const char *database, const struct _param *param)
{
fprintf(stdout, "Connected to database \"%s\"\n", database);
if (param->dry_run)
- fprintf(stdout, "Test run: no large objects will be removed!\n");
+ fputs("Test run: no large objects will be removed!\n", stdout);
}
res = PQexec(conn, ALWAYS_SECURE_SEARCH_PATH_SQL);
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index 7a710e6490..343555e095 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -8641,7 +8641,7 @@ do_pg_backup_stop(char *labelfile, bool waitforarchive, TimeLineID *stoptli_p)
* Transfer remaining lines including label and start timeline to
* history file.
*/
- fprintf(fp, "%s", remaining);
+ fputs(remaining, fp);
fprintf(fp, "STOP TIME: %s\n", strfbuf);
fprintf(fp, "STOP TIMELINE: %u\n", stoptli);
if (fflush(fp) || ferror(fp) || FreeFile(fp))
diff --git a/src/backend/optimizer/geqo/geqo_misc.c b/src/backend/optimizer/geqo/geqo_misc.c
index 890ac363e9..0d024f227f 100644
--- a/src/backend/optimizer/geqo/geqo_misc.c
+++ b/src/backend/optimizer/geqo/geqo_misc.c
@@ -114,17 +114,17 @@ print_edge_table(FILE *fp, Edge *edge_table, int num_gene)
int i,
j;
- fprintf(fp, "\nEDGE TABLE\n");
+ fputs("\nEDGE TABLE\n", fp);
for (i = 1; i <= num_gene; i++)
{
fprintf(fp, "%d :", i);
for (j = 0; j < edge_table[i].unused_edges; j++)
fprintf(fp, " %d", edge_table[i].edge_list[j]);
- fprintf(fp, "\n");
+ fputc('\n', fp);
}
- fprintf(fp, "\n");
+ fputc('\n', fp);
fflush(fp);
}
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index e75611fdd5..36808438c8 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -5601,10 +5601,10 @@ CreateOptsFile(int argc, char *argv[], char *fullprogname)
return false;
}
- fprintf(fp, "%s", fullprogname);
+ fputs(fullprogname, fp);
for (i = 1; i < argc; i++)
fprintf(fp, " \"%s\"", argv[i]);
- fputs("\n", fp);
+ fputc('\n', fp);
if (fclose(fp))
{
diff --git a/src/backend/regex/regc_color.c b/src/backend/regex/regc_color.c
index 30bda0e5ad..affeb099ee 100644
--- a/src/backend/regex/regc_color.c
+++ b/src/backend/regex/regc_color.c
@@ -1134,7 +1134,7 @@ dumpcolors(struct colormap *cm,
for (c = CHR_MIN; c <= MAX_SIMPLE_CHR; c++)
if (GETCOLOR(cm, c) == co)
dumpchr(c, f);
- fprintf(f, "\n");
+ fputc('\n', f);
}
}
/* dump the high colormap if it contains anything interesting */
@@ -1144,12 +1144,12 @@ dumpcolors(struct colormap *cm,
c;
const color *rowptr;
- fprintf(f, "other:\t");
+ fputs("other:\t", f);
for (c = 0; c < cm->hiarraycols; c++)
{
fprintf(f, "\t%ld", (long) cm->hicolormap[c]);
}
- fprintf(f, "\n");
+ fputc('\n', f);
for (r = 0; r < cm->numcmranges; r++)
{
dumpchr(cm->cmranges[r].cmin, f);
@@ -1161,7 +1161,7 @@ dumpcolors(struct colormap *cm,
{
fprintf(f, "\t%ld", (long) rowptr[c]);
}
- fprintf(f, "\n");
+ fputc('\n', f);
}
}
}
diff --git a/src/backend/regex/regc_nfa.c b/src/backend/regex/regc_nfa.c
index 60fb0bec5d..27ea726768 100644
--- a/src/backend/regex/regc_nfa.c
+++ b/src/backend/regex/regc_nfa.c
@@ -3667,7 +3667,7 @@ dumpnfa(struct nfa *nfa,
else
fprintf(f, ", maxmatchall %d", nfa->maxmatchall);
}
- fprintf(f, "\n");
+ fputc('\n', f);
for (s = nfa->states; s != NULL; s = s->next)
{
dumpstate(s, f);
@@ -3730,7 +3730,7 @@ dumparcs(struct state *s,
dumparc(a, s, f);
if (pos == 5)
{
- fprintf(f, "\n");
+ fputc('\n', f);
pos = 1;
}
else
@@ -3738,7 +3738,7 @@ dumparcs(struct state *s,
a = a->outchainRev;
} while (a != NULL);
if (pos != 1)
- fprintf(f, "\n");
+ fputc('\n', f);
}
/*
@@ -3751,7 +3751,7 @@ dumparc(struct arc *a,
{
struct arc *aa;
- fprintf(f, "\t");
+ fputc('\t', );
switch (a->type)
{
case PLAIN:
@@ -3836,7 +3836,7 @@ dumpcnfa(struct cnfa *cnfa,
else
fprintf(f, ", maxmatchall %d", cnfa->maxmatchall);
}
- fprintf(f, "\n");
+ fputc('\n', f);
for (st = 0; st < cnfa->nstates; st++)
dumpcstate(st, cnfa, f);
fflush(f);
@@ -3868,14 +3868,14 @@ dumpcstate(int st,
fprintf(f, "\t:%ld:->%d", (long) (ca->co - cnfa->ncolors), ca->to);
if (pos == 5)
{
- fprintf(f, "\n");
+ fputc('\n', f);
pos = 1;
}
else
pos++;
}
if (ca == cnfa->states[st] || pos != 1)
- fprintf(f, "\n");
+ fputc('\n', f);
fflush(f);
}
diff --git a/src/backend/regex/regcomp.c b/src/backend/regex/regcomp.c
index 473738040b..ca7b9252b9 100644
--- a/src/backend/regex/regcomp.c
+++ b/src/backend/regex/regcomp.c
@@ -2517,7 +2517,7 @@ dump(regex_t *re,
fprintf(f, "\nla%d (%s):\n", i, latype);
dumpcnfa(&lasub->cnfa, f);
}
- fprintf(f, "\n");
+ fputc('\n', f);
dumpst(g->tree, f, 0);
}
@@ -2530,7 +2530,7 @@ dumpst(struct subre *t,
int nfapresent) /* is the original NFA still around? */
{
if (t == NULL)
- fprintf(f, "null tree\n");
+ fputs("null tree\n", f);
else
stdump(t, f, nfapresent);
fflush(f);
@@ -2586,10 +2586,10 @@ stdump(struct subre *t,
fprintf(f, " S:%s", stid(t->sibling, idbuf, sizeof(idbuf)));
if (!NULLCNFA(t->cnfa))
{
- fprintf(f, "\n");
+ fputc('\n', f);
dumpcnfa(&t->cnfa, f);
}
- fprintf(f, "\n");
+ fputc('\n', f);
for (t2 = t->child; t2 != NULL; t2 = t2->sibling)
stdump(t2, f, nfapresent);
}
diff --git a/src/backend/storage/lmgr/s_lock.c b/src/backend/storage/lmgr/s_lock.c
index 4e473ec27e..357eb11cab 100644
--- a/src/backend/storage/lmgr/s_lock.c
+++ b/src/backend/storage/lmgr/s_lock.c
@@ -139,7 +139,7 @@ perform_spin_delay(SpinDelayStatus *status)
pg_usleep(status->cur_delay);
#if defined(S_LOCK_TEST)
- fprintf(stdout, "*");
+ fputc('*', stdout);
fflush(stdout);
#endif
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index 55bf998511..effcddc422 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -11010,7 +11010,7 @@ write_one_nondefault_variable(FILE *fp, struct config_generic *gconf)
if (gconf->source == PGC_S_DEFAULT)
return;
- fprintf(fp, "%s", gconf->name);
+ fputs(gconf->name, fp);
fputc(0, fp);
switch (gconf->vartype)
@@ -11020,9 +11020,9 @@ write_one_nondefault_variable(FILE *fp, struct config_generic *gconf)
struct config_bool *conf = (struct config_bool *) gconf;
if (*conf->variable)
- fprintf(fp, "true");
+ fputs("true", fp);
else
- fprintf(fp, "false");
+ fputs("false", fp);
}
break;
@@ -11046,7 +11046,7 @@ write_one_nondefault_variable(FILE *fp, struct config_generic *gconf)
{
struct config_string *conf = (struct config_string *) gconf;
- fprintf(fp, "%s", *conf->variable);
+ fputs(*conf->variable, fp);
}
break;
@@ -11054,8 +11054,7 @@ write_one_nondefault_variable(FILE *fp, struct config_generic *gconf)
{
struct config_enum *conf = (struct config_enum *) gconf;
- fprintf(fp, "%s",
- config_enum_lookup_by_value(conf, *conf->variable));
+ fputs(config_enum_lookup_by_value(conf, *conf->variable), fp);
}
break;
}
@@ -11063,7 +11062,7 @@ write_one_nondefault_variable(FILE *fp, struct config_generic *gconf)
fputc(0, fp);
if (gconf->sourcefile)
- fprintf(fp, "%s", gconf->sourcefile);
+ fputs(gconf->sourcefile, fp);
fputc(0, fp);
fwrite(&gconf->sourceline, 1, sizeof(gconf->sourceline), fp);
diff --git a/src/backend/utils/mmgr/mcxt.c b/src/backend/utils/mmgr/mcxt.c
index 115a64cfe4..649f6a589f 100644
--- a/src/backend/utils/mmgr/mcxt.c
+++ b/src/backend/utils/mmgr/mcxt.c
@@ -680,7 +680,7 @@ MemoryContextStatsInternal(MemoryContext context, int level,
int i;
for (i = 0; i <= level; i++)
- fprintf(stderr, " ");
+ fputs(" ", stderr);
fprintf(stderr,
"%d more child contexts containing %zu total in %zu blocks; %zu free (%zu chunks); %zu used\n",
ichild - max_children,
@@ -782,7 +782,7 @@ MemoryContextStatsPrint(MemoryContext context, void *passthru,
if (print_to_stderr)
{
for (i = 0; i < level; i++)
- fprintf(stderr, " ");
+ fputs(" ", stderr);
fprintf(stderr, "%s: %s%s\n", name, stats_string, truncated_ident);
}
else
diff --git a/src/bin/pg_amcheck/pg_amcheck.c b/src/bin/pg_amcheck/pg_amcheck.c
index fea35e4b14..330d296fa4 100644
--- a/src/bin/pg_amcheck/pg_amcheck.c
+++ b/src/bin/pg_amcheck/pg_amcheck.c
@@ -726,7 +726,7 @@ main(int argc, char *argv[])
if (opts.verbose)
{
if (opts.show_progress && progress_since_last_stderr)
- fprintf(stderr, "\n");
+ fputc('\n', stderr);
pg_log_info("checking heap table \"%s.%s.%s\"",
rel->datinfo->datname, rel->nspname, rel->relname);
progress_since_last_stderr = false;
@@ -741,7 +741,7 @@ main(int argc, char *argv[])
if (opts.verbose)
{
if (opts.show_progress && progress_since_last_stderr)
- fprintf(stderr, "\n");
+ fputc('\n', stderr);
pg_log_info("checking btree index \"%s.%s.%s\"",
rel->datinfo->datname, rel->nspname, rel->relname);
@@ -1095,7 +1095,7 @@ verify_btree_slot_handler(PGresult *res, PGconn *conn, void *context)
* event loop, so it doesn't matter.
*/
if (opts.show_progress && progress_since_last_stderr)
- fprintf(stderr, "\n");
+ fputc('\n', stderr);
pg_log_warning("btree index \"%s.%s.%s\": btree checking function returned unexpected number of rows: %d",
rel->datinfo->datname, rel->nspname, rel->relname, ntups);
if (opts.verbose)
diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c
index 9ce30d43a4..888dfa7fc0 100644
--- a/src/bin/pg_basebackup/pg_basebackup.c
+++ b/src/bin/pg_basebackup/pg_basebackup.c
@@ -1904,11 +1904,11 @@ BaseBackup(char *compression_algorithm, char *compression_detail,
if (showprogress && !verbose)
{
- fprintf(stderr, "waiting for checkpoint");
+ fputs("waiting for checkpoint", stderr);
if (isatty(fileno(stderr)))
- fprintf(stderr, "\r");
+ fputc('\r', stderr);
else
- fprintf(stderr, "\n");
+ fputc('\n', stderr);
}
if (use_new_option_syntax && buf.len > 0)
diff --git a/src/bin/pg_dump/pg_dumpall.c b/src/bin/pg_dump/pg_dumpall.c
index 69ae027bd3..9481e68c5e 100644
--- a/src/bin/pg_dump/pg_dumpall.c
+++ b/src/bin/pg_dump/pg_dumpall.c
@@ -535,7 +535,7 @@ main(int argc, char *argv[])
if (quote_all_identifiers)
executeCommand(conn, "SET quote_all_identifiers = true");
- fprintf(OPF, "--\n-- PostgreSQL database cluster dump\n--\n\n");
+ fputs("--\n-- PostgreSQL database cluster dump\n--\n\n", OPF);
if (verbose)
dumpTimestamp("Started on");
@@ -547,15 +547,15 @@ main(int argc, char *argv[])
*/
/* Restore will need to write to the target cluster */
- fprintf(OPF, "SET default_transaction_read_only = off;\n\n");
+ fputs("SET default_transaction_read_only = off;\n\n", OPF);
/* Replicate encoding and std_strings in output */
fprintf(OPF, "SET client_encoding = '%s';\n",
pg_encoding_to_char(encoding));
fprintf(OPF, "SET standard_conforming_strings = %s;\n", std_strings);
if (strcmp(std_strings, "off") == 0)
- fprintf(OPF, "SET escape_string_warning = off;\n");
- fprintf(OPF, "\n");
+ fputs("SET escape_string_warning = off;\n", OPF);
+ fputc('\n', OPF);
if (!data_only)
{
@@ -606,7 +606,7 @@ main(int argc, char *argv[])
if (verbose)
dumpTimestamp("Completed on");
- fprintf(OPF, "--\n-- PostgreSQL database cluster dump complete\n--\n\n");
+ fputs("--\n-- PostgreSQL database cluster dump complete\n--\n\n", OPF);
if (filename)
{
@@ -716,7 +716,7 @@ dropRoles(PGconn *conn)
i_rolname = PQfnumber(res, "rolname");
if (PQntuples(res) > 0)
- fprintf(OPF, "--\n-- Drop roles\n--\n\n");
+ fputs("--\n-- Drop roles\n--\n\n", OPF);
for (i = 0; i < PQntuples(res); i++)
{
@@ -732,7 +732,7 @@ dropRoles(PGconn *conn)
PQclear(res);
destroyPQExpBuffer(buf);
- fprintf(OPF, "\n\n");
+ fputs("\n\n", OPF);
}
/*
@@ -811,7 +811,7 @@ dumpRoles(PGconn *conn)
i_is_current_user = PQfnumber(res, "is_current_user");
if (PQntuples(res) > 0)
- fprintf(OPF, "--\n-- Roles\n--\n\n");
+ fputs("--\n-- Roles\n--\n\n", OPF);
for (i = 0; i < PQntuples(res); i++)
{
@@ -915,7 +915,7 @@ dumpRoles(PGconn *conn)
"ROLE", rolename,
buf);
- fprintf(OPF, "%s", buf->data);
+ fputs(buf->data, OPF);
}
/*
@@ -924,14 +924,14 @@ dumpRoles(PGconn *conn)
* names of other roles.
*/
if (PQntuples(res) > 0)
- fprintf(OPF, "\n--\n-- User Configurations\n--\n");
+ fputs("\n--\n-- User Configurations\n--\n", OPF);
for (i = 0; i < PQntuples(res); i++)
dumpUserConfig(conn, PQgetvalue(res, i, i_rolname));
PQclear(res);
- fprintf(OPF, "\n\n");
+ fputs("\n\n", OPF);
destroyPQExpBuffer(buf);
}
@@ -989,7 +989,7 @@ dumpRoleMembership(PGconn *conn)
i_inherit_option = PQfnumber(res, "inherit_option");
if (PQntuples(res) > 0)
- fprintf(OPF, "--\n-- Role memberships\n--\n\n");
+ fputs("--\n-- Role memberships\n--\n\n", OPF);
/*
* We can't dump these GRANT commands in arbitary order, because a role
@@ -1111,7 +1111,7 @@ dumpRoleMembership(PGconn *conn)
fprintf(OPF, " WITH %s", optbuf->data);
if (dump_grantors)
fprintf(OPF, " GRANTED BY %s", fmtId(grantor));
- fprintf(OPF, ";\n");
+ fputs(";\n", OPF);
}
}
@@ -1123,7 +1123,7 @@ dumpRoleMembership(PGconn *conn)
PQclear(res);
destroyPQExpBuffer(buf);
- fprintf(OPF, "\n\n");
+ fputs("\n\n", OPF);
}
@@ -1151,7 +1151,7 @@ dumpRoleGUCPrivs(PGconn *conn)
"ORDER BY 1");
if (PQntuples(res) > 0)
- fprintf(OPF, "--\n-- Role privileges on configuration parameters\n--\n\n");
+ fputs("--\n-- Role privileges on configuration parameters\n--\n\n", OPF);
for (i = 0; i < PQntuples(res); i++)
{
@@ -1175,14 +1175,14 @@ dumpRoleGUCPrivs(PGconn *conn)
exit_nicely(1);
}
- fprintf(OPF, "%s", buf->data);
+ fputs(buf->data, OPF);
free(fparname);
destroyPQExpBuffer(buf);
}
PQclear(res);
- fprintf(OPF, "\n\n");
+ fputs("\n\n", OPF);
}
@@ -1205,7 +1205,7 @@ dropTablespaces(PGconn *conn)
"ORDER BY 1");
if (PQntuples(res) > 0)
- fprintf(OPF, "--\n-- Drop tablespaces\n--\n\n");
+ fputs("--\n-- Drop tablespaces\n--\n\n", OPF);
for (i = 0; i < PQntuples(res); i++)
{
@@ -1218,7 +1218,7 @@ dropTablespaces(PGconn *conn)
PQclear(res);
- fprintf(OPF, "\n\n");
+ fputs("\n\n", OPF);
}
/*
@@ -1245,7 +1245,7 @@ dumpTablespaces(PGconn *conn)
"ORDER BY 1");
if (PQntuples(res) > 0)
- fprintf(OPF, "--\n-- Tablespaces\n--\n\n");
+ fputs("--\n-- Tablespaces\n--\n\n", OPF);
for (i = 0; i < PQntuples(res); i++)
{
@@ -1305,14 +1305,14 @@ dumpTablespaces(PGconn *conn)
"TABLESPACE", spcname,
buf);
- fprintf(OPF, "%s", buf->data);
+ fputs(buf->data, OPF);
free(fspcname);
destroyPQExpBuffer(buf);
}
PQclear(res);
- fprintf(OPF, "\n\n");
+ fputs("\n\n", OPF);
}
@@ -1336,7 +1336,7 @@ dropDBs(PGconn *conn)
"ORDER BY datname");
if (PQntuples(res) > 0)
- fprintf(OPF, "--\n-- Drop databases (except postgres and template1)\n--\n\n");
+ fputs("--\n-- Drop databases (except postgres and template1)\n--\n\n", OPF);
for (i = 0; i < PQntuples(res); i++)
{
@@ -1359,7 +1359,7 @@ dropDBs(PGconn *conn)
PQclear(res);
- fprintf(OPF, "\n\n");
+ fputs("\n\n", OPF);
}
@@ -1390,7 +1390,7 @@ dumpUserConfig(PGconn *conn, const char *username)
makeAlterConfigCommand(conn, PQgetvalue(res, i, 0),
"ROLE", username, NULL, NULL,
buf);
- fprintf(OPF, "%s", buf->data);
+ fputs(buf->data, OPF);
}
PQclear(res);
@@ -1479,7 +1479,7 @@ dumpDatabases(PGconn *conn)
"ORDER BY (datname <> 'template1'), datname");
if (PQntuples(res) > 0)
- fprintf(OPF, "--\n-- Databases\n--\n\n");
+ fputs("--\n-- Databases\n--\n\n", OPF);
for (i = 0; i < PQntuples(res); i++)
{
diff --git a/src/bin/pg_upgrade/check.c b/src/bin/pg_upgrade/check.c
index f4969bcdad..b3c90cf121 100644
--- a/src/bin/pg_upgrade/check.c
+++ b/src/bin/pg_upgrade/check.c
@@ -582,7 +582,7 @@ create_script_for_old_cluster_deletion(char **deletion_script_file_name)
#ifndef WIN32
/* add shebang header */
- fprintf(script, "#!/bin/sh\n\n");
+ fputs("#!/bin/sh\n\n", script);
#endif
/* delete old cluster's default tablespace */
@@ -601,7 +601,7 @@ create_script_for_old_cluster_deletion(char **deletion_script_file_name)
/* delete per-database directories */
int dbnum;
- fprintf(script, "\n");
+ fputc('\n', script);
for (dbnum = 0; dbnum < old_cluster.dbarr.ndbs; dbnum++)
fprintf(script, RMDIR_CMD " %c%s%c%u%c\n", PATH_QUOTE,
diff --git a/src/bin/pg_upgrade/exec.c b/src/bin/pg_upgrade/exec.c
index 60f4b5443e..470fc4855b 100644
--- a/src/bin/pg_upgrade/exec.c
+++ b/src/bin/pg_upgrade/exec.c
@@ -159,13 +159,13 @@ exec_prog(const char *log_filename, const char *opt_log_file,
#ifdef WIN32
/* Are we printing "command:" before its output? */
if (mainThreadId == GetCurrentThreadId())
- fprintf(log, "\n\n");
+ fputs("\n\n", log);
#endif
fprintf(log, "command: %s\n", cmd);
#ifdef WIN32
/* Are we printing "command:" after its output? */
if (mainThreadId != GetCurrentThreadId())
- fprintf(log, "\n\n");
+ fputs("\n\n", log);
#endif
/*
@@ -213,7 +213,7 @@ exec_prog(const char *log_filename, const char *opt_log_file,
*/
if ((log = fopen(log_file, "a")) == NULL)
pg_fatal("could not write to log file \"%s\": %m", log_file);
- fprintf(log, "\n\n");
+ fputs("\n\n", log);
fclose(log);
#endif
diff --git a/src/bin/pg_upgrade/util.c b/src/bin/pg_upgrade/util.c
index 593a843917..486918021b 100644
--- a/src/bin/pg_upgrade/util.c
+++ b/src/bin/pg_upgrade/util.c
@@ -181,7 +181,7 @@ pg_log_v(eLogType type, const char *fmt, va_list ap)
/* status messages get two leading spaces, see below */
fprintf(log_opts.internal, " %s\n", message);
else if (type == PG_REPORT_NONL)
- fprintf(log_opts.internal, "%s", message);
+ fputs(message, log_opts.internal);
else
fprintf(log_opts.internal, "%s\n", message);
fflush(log_opts.internal);
diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c
index 098fb43b3c..338bc31904 100644
--- a/src/bin/pgbench/pgbench.c
+++ b/src/bin/pgbench/pgbench.c
@@ -2532,7 +2532,7 @@ evalStandardFunc(CState *st,
st->use_file, st->command + 1);
if (varg->type == PGBT_NULL)
- fprintf(stderr, "null\n");
+ fputs("null\n", stderr);
else if (varg->type == PGBT_BOOLEAN)
fprintf(stderr, "boolean %s\n", varg->u.bval ? "true" : "false");
else if (varg->type == PGBT_INT)
@@ -4633,7 +4633,7 @@ disconnect_all(CState *state, int length)
static void
initDropTables(PGconn *con)
{
- fprintf(stderr, "dropping old tables...\n");
+ fputs("dropping old tables...\n", stderr);
/*
* We drop all the tables in one command, so that whether there are
@@ -4771,7 +4771,7 @@ initCreateTables(PGconn *con)
int i;
PQExpBufferData query;
- fprintf(stderr, "creating tables...\n");
+ fputs("creating tables...\n", stderr);
initPQExpBuffer(&query);
@@ -4845,7 +4845,7 @@ initGenerateDataClientSide(PGconn *con)
/* Stay on the same line if reporting to a terminal */
char eol = isatty(fileno(stderr)) ? '\r' : '\n';
- fprintf(stderr, "generating data (client-side)...\n");
+ fputs("generating data (client-side)...\n", stderr);
/*
* we do all of this in one transaction to enable the backend's
@@ -4970,7 +4970,7 @@ initGenerateDataServerSide(PGconn *con)
{
PQExpBufferData sql;
- fprintf(stderr, "generating data (server-side)...\n");
+ fputs("generating data (server-side)...\n", stderr);
/*
* we do all of this in one transaction to enable the backend's
@@ -5013,7 +5013,7 @@ initGenerateDataServerSide(PGconn *con)
static void
initVacuum(PGconn *con)
{
- fprintf(stderr, "vacuuming...\n");
+ fputs("vacuuming...\n", stderr);
executeStatement(con, "vacuum analyze pgbench_branches");
executeStatement(con, "vacuum analyze pgbench_tellers");
executeStatement(con, "vacuum analyze pgbench_accounts");
@@ -5034,7 +5034,7 @@ initCreatePKeys(PGconn *con)
int i;
PQExpBufferData query;
- fprintf(stderr, "creating primary keys...\n");
+ fputs("creating primary keys...\n", stderr);
initPQExpBuffer(&query);
for (i = 0; i < lengthof(DDLINDEXes); i++)
@@ -5073,7 +5073,7 @@ initCreateFKeys(PGconn *con)
};
int i;
- fprintf(stderr, "creating foreign keys...\n");
+ fputs("creating foreign keys...\n", stderr);
for (i = 0; i < lengthof(DDLKEYs); i++)
{
executeStatement(con, DDLKEYs[i]);
@@ -5992,10 +5992,10 @@ listAvailableScripts(void)
{
int i;
- fprintf(stderr, "Available builtin scripts:\n");
+ fputs("Available builtin scripts:\n", stderr);
for (i = 0; i < lengthof(builtin_script); i++)
fprintf(stderr, " %13s: %s\n", builtin_script[i].name, builtin_script[i].desc);
- fprintf(stderr, "\n");
+ fputc('\n', stderr);
}
/* return builtin script "name" if unambiguous, fails if not found */
@@ -6181,7 +6181,7 @@ printProgressReport(TState *threads, int64 test_start, pg_time_usec_t now,
fprintf(stderr,
", " INT64_FORMAT " retried, " INT64_FORMAT " retries",
retried, cur.retries - last->retries);
- fprintf(stderr, "\n");
+ fputc('\n', stderr);
*last = cur;
*last_report = now;
@@ -7138,17 +7138,17 @@ main(int argc, char **argv)
if (!is_no_vacuum)
{
- fprintf(stderr, "starting vacuum...");
+ fputs("starting vacuum...", stderr);
tryExecuteStatement(con, "vacuum pgbench_branches");
tryExecuteStatement(con, "vacuum pgbench_tellers");
tryExecuteStatement(con, "truncate pgbench_history");
- fprintf(stderr, "end.\n");
+ fputs("end.\n", stderr);
if (do_vacuum_accounts)
{
- fprintf(stderr, "starting vacuum pgbench_accounts...");
+ fputs("starting vacuum pgbench_accounts...", stderr);
tryExecuteStatement(con, "vacuum analyze pgbench_accounts");
- fprintf(stderr, "end.\n");
+ fputs("end.\n", stderr);
}
}
PQfinish(con);
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index a141146e70..75fe181c15 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -1243,7 +1243,7 @@ exec_command_echo(PsqlScanState scan_state, bool active_branch, const char *cmd)
free(value);
}
if (!no_newline)
- fputs("\n", fout);
+ fputc('\n', fout);
}
else
ignore_slash_options(scan_state);
@@ -5212,7 +5212,7 @@ do_watch(PQExpBuffer query_buf, double sleep)
* using a pager, because pagers are expected to restore the screen to
* a sane state on exit.
*/
- fprintf(stdout, "\n");
+ fputc('\n', stdout);
fflush(stdout);
}
diff --git a/src/bin/psql/common.c b/src/bin/psql/common.c
index e611e3266d..d7222c8489 100644
--- a/src/bin/psql/common.c
+++ b/src/bin/psql/common.c
@@ -309,12 +309,12 @@ CheckConnection(void)
exit(EXIT_BADCONN);
}
- fprintf(stderr, _("The connection to the server was lost. Attempting reset: "));
+ fputs(_("The connection to the server was lost. Attempting reset: "), stderr);
PQreset(pset.db);
OK = ConnectionUp();
if (!OK)
{
- fprintf(stderr, _("Failed.\n"));
+ fputs(_("Failed.\n"), stderr);
/*
* Transition to having no connection; but stash away the failed
@@ -331,7 +331,7 @@ CheckConnection(void)
}
else
{
- fprintf(stderr, _("Succeeded.\n"));
+ fputs(_("Succeeded.\n"), stderr);
/*
* Re-sync, just in case anything changed. Keep this in sync with
@@ -1404,8 +1404,7 @@ DescribeQuery(const char *query, double *elapsed_msec)
termPQExpBuffer(&buf);
}
else
- fprintf(pset.queryFout,
- _("The command has no result, or the result has no columns.\n"));
+ fputs(_("The command has no result, or the result has no columns.\n"), pset.queryFout);
}
SetResultVariables(result, OK);
diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c
index f8ce1a0706..d00e6197d9 100644
--- a/src/bin/psql/help.c
+++ b/src/bin/psql/help.c
@@ -617,14 +617,13 @@ helpSQL(const char *topic, unsigned short int pager)
for (i = 0; i < nrows; i++)
{
- fprintf(output, " ");
+ fputs(" ", output);
for (j = 0; j < ncolumns - 1; j++)
fprintf(output, "%-*s",
QL_MAX_CMD_LEN + 1,
VALUE_OR_NULL(QL_HELP[i + j * nrows].cmd));
if (i + j * nrows < QL_HELP_COUNT)
- fprintf(output, "%s",
- VALUE_OR_NULL(QL_HELP[i + j * nrows].cmd));
+ fputs(VALUE_OR_NULL(QL_HELP[i + j * nrows].cmd), output);
fputc('\n', output);
}
diff --git a/src/bin/psql/large_obj.c b/src/bin/psql/large_obj.c
index 64338d538e..9ba573dc08 100644
--- a/src/bin/psql/large_obj.c
+++ b/src/bin/psql/large_obj.c
@@ -32,7 +32,7 @@ print_lo_result(const char *fmt,...)
if (pset.popt.topt.format == PRINT_HTML)
fputs("</p>\n", pset.queryFout);
else
- fputs("\n", pset.queryFout);
+ fputc('\n', pset.queryFout);
}
if (pset.logfile)
@@ -40,7 +40,7 @@ print_lo_result(const char *fmt,...)
va_start(ap, fmt);
vfprintf(pset.logfile, fmt, ap);
va_end(ap);
- fputs("\n", pset.logfile);
+ fputc('\n', pset.logfile);
}
}
diff --git a/src/bin/scripts/createuser.c b/src/bin/scripts/createuser.c
index 991930a1ae..d635e71c54 100644
--- a/src/bin/scripts/createuser.c
+++ b/src/bin/scripts/createuser.c
@@ -233,7 +233,7 @@ main(int argc, char *argv[])
pw2 = simple_prompt("Enter it again: ", false);
if (strcmp(newpassword, pw2) != 0)
{
- fprintf(stderr, _("Passwords didn't match.\n"));
+ fputs(_("Passwords didn't match.\n"), stderr);
exit(1);
}
free(pw2);
diff --git a/src/common/fe_memutils.c b/src/common/fe_memutils.c
index b1e6c65576..3e169b823e 100644
--- a/src/common/fe_memutils.c
+++ b/src/common/fe_memutils.c
@@ -32,7 +32,7 @@ pg_malloc_internal(size_t size, int flags)
{
if ((flags & MCXT_ALLOC_NO_OOM) == 0)
{
- fprintf(stderr, _("out of memory\n"));
+ fputs(_("out of memory\n"), stderr);
exit(EXIT_FAILURE);
}
return NULL;
@@ -72,7 +72,7 @@ pg_realloc(void *ptr, size_t size)
tmp = realloc(ptr, size);
if (!tmp)
{
- fprintf(stderr, _("out of memory\n"));
+ fputs(_("out of memory\n"), stderr);
exit(EXIT_FAILURE);
}
return tmp;
@@ -88,14 +88,13 @@ pg_strdup(const char *in)
if (!in)
{
- fprintf(stderr,
- _("cannot duplicate null pointer (internal error)\n"));
+ fputs(_("cannot duplicate null pointer (internal error)\n"), stderr);
exit(EXIT_FAILURE);
}
tmp = strdup(in);
if (!tmp)
{
- fprintf(stderr, _("out of memory\n"));
+ fputs(_("out of memory\n"), stderr);
exit(EXIT_FAILURE);
}
return tmp;
@@ -149,8 +148,7 @@ pnstrdup(const char *in, Size size)
if (!in)
{
- fprintf(stderr,
- _("cannot duplicate null pointer (internal error)\n"));
+ fputs(_("cannot duplicate null pointer (internal error)\n"), stderr);
exit(EXIT_FAILURE);
}
@@ -158,7 +156,7 @@ pnstrdup(const char *in, Size size)
tmp = malloc(len + 1);
if (tmp == NULL)
{
- fprintf(stderr, _("out of memory\n"));
+ fputs(_("out of memory\n"), stderr);
exit(EXIT_FAILURE);
}
diff --git a/src/common/logging.c b/src/common/logging.c
index 64604c5209..896c89f487 100644
--- a/src/common/logging.c
+++ b/src/common/logging.c
@@ -258,9 +258,9 @@ pg_log_generic_v(enum pg_log_level level, enum pg_log_part part,
if (lineno > 0)
fprintf(stderr, UINT64_FORMAT ":", lineno);
}
- fprintf(stderr, " ");
+ fputc(' ', stderr);
if (sgr_locus)
- fprintf(stderr, ANSI_ESCAPE_RESET);
+ fputs(ANSI_ESCAPE_RESET, stderr);
}
if (!(log_flags & PG_LOG_FLAG_TERSE))
@@ -275,14 +275,14 @@ pg_log_generic_v(enum pg_log_level level, enum pg_log_part part,
fprintf(stderr, ANSI_ESCAPE_FMT, sgr_error);
fprintf(stderr, _("error: "));
if (sgr_error)
- fprintf(stderr, ANSI_ESCAPE_RESET);
+ fputs(ANSI_ESCAPE_RESET, stderr);
break;
case PG_LOG_WARNING:
if (sgr_warning)
fprintf(stderr, ANSI_ESCAPE_FMT, sgr_warning);
- fprintf(stderr, _("warning: "));
+ fputs(_("warning: "), stderr);
if (sgr_warning)
- fprintf(stderr, ANSI_ESCAPE_RESET);
+ fputs(ANSI_ESCAPE_RESET, stderr);
break;
default:
break;
@@ -291,16 +291,16 @@ pg_log_generic_v(enum pg_log_level level, enum pg_log_part part,
case PG_LOG_DETAIL:
if (sgr_note)
fprintf(stderr, ANSI_ESCAPE_FMT, sgr_note);
- fprintf(stderr, _("detail: "));
+ fputs(_("detail: "), stderr);
if (sgr_note)
- fprintf(stderr, ANSI_ESCAPE_RESET);
+ fputs(ANSI_ESCAPE_RESET, stderr);
break;
case PG_LOG_HINT:
if (sgr_note)
fprintf(stderr, ANSI_ESCAPE_FMT, sgr_note);
- fprintf(stderr, _("hint: "));
+ fputs(_("hint: "), stderr);
if (sgr_note)
- fprintf(stderr, ANSI_ESCAPE_RESET);
+ fputs(ANSI_ESCAPE_RESET, stderr);
break;
}
}
diff --git a/src/common/psprintf.c b/src/common/psprintf.c
index a5a5cb121c..79eb41c1e5 100644
--- a/src/common/psprintf.c
+++ b/src/common/psprintf.c
@@ -142,7 +142,7 @@ pvsnprintf(char *buf, size_t len, const char *fmt, va_list args)
(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
errmsg("out of memory")));
#else
- fprintf(stderr, _("out of memory\n"));
+ fputs(_("out of memory\n"), stderr);
exit(EXIT_FAILURE);
#endif
}
diff --git a/src/common/sprompt.c b/src/common/sprompt.c
index 8b836846e3..ebab6c44fd 100644
--- a/src/common/sprompt.c
+++ b/src/common/sprompt.c
@@ -156,18 +156,18 @@ simple_prompt_extended(const char *prompt, bool echo,
/* restore previous echo behavior, then echo \n */
#if defined(HAVE_TERMIOS_H)
tcsetattr(fileno(termin), TCSAFLUSH, &t_orig);
- fputs("\n", termout);
+ fputc('\n', termout);
fflush(termout);
#elif defined(WIN32)
SetConsoleMode(t, t_orig);
- fputs("\n", termout);
+ fputc('\n', termout);
fflush(termout);
#endif
}
else if (prompt_ctx && prompt_ctx->canceled)
{
/* also echo \n if prompt was canceled */
- fputs("\n", termout);
+ fputc('\n', termout);
fflush(termout);
}
diff --git a/src/fe_utils/print.c b/src/fe_utils/print.c
index 55288f8876..55fe555501 100644
--- a/src/fe_utils/print.c
+++ b/src/fe_utils/print.c
@@ -1640,7 +1640,7 @@ print_aligned_vertical(const printTableContent *cont,
{
/* Left border */
if (opt_border == 2)
- fprintf(fout, "%s", dformat->leftvrule);
+ fputs(dformat->leftvrule, fout);
/* Header (never wrapped so just need to deal with newlines) */
if (!hcomplete)
@@ -1685,7 +1685,7 @@ print_aligned_vertical(const printTableContent *cont,
/* This was the last line of the header */
if ((opt_border > 0) ||
(hmultiline && (format != &pg_asciiformat_old)))
- fputs(" ", fout);
+ fputc(' ', fout);
hcomplete = 1;
}
}
@@ -1775,7 +1775,7 @@ print_aligned_vertical(const printTableContent *cont,
{
if (swidth > 0)
fprintf(fout, "%*s", swidth, " ");
- fputs(" ", fout);
+ fputc(' ', fout);
}
dcomplete = 1;
}
@@ -1784,7 +1784,7 @@ print_aligned_vertical(const printTableContent *cont,
if (opt_border == 2)
fputs(dformat->rightvrule, fout);
- fputs("\n", fout);
+ fputc('\n', fout);
}
else
{
@@ -1793,7 +1793,7 @@ print_aligned_vertical(const printTableContent *cont,
* data due to newlines in the header)
*/
if (opt_border < 2)
- fputs("\n", fout);
+ fputc('\n', fout);
else
fprintf(fout, "%*s %s\n", dwidth, "", dformat->rightvrule);
}
@@ -1977,7 +1977,7 @@ html_escaped_print(const char *in, FILE *fout)
if (leading_space)
fputs(" ", fout);
else
- fputs(" ", fout);
+ fputc(' ', fout);
break;
default:
fputc(*p, fout);
@@ -2195,14 +2195,14 @@ print_asciidoc_text(const printTableContent *cont, FILE *fout)
if (cont->opt->start_table)
{
/* print table in new paragraph - enforce preliminary new line */
- fputs("\n", fout);
+ fputc('\n', fout);
/* print title */
if (!opt_tuples_only && cont->title)
{
- fputs(".", fout);
+ fputc('.', fout);
fputs(cont->title, fout);
- fputs("\n", fout);
+ fputc('\n', fout);
}
/* print table [] header definition */
@@ -2210,10 +2210,10 @@ print_asciidoc_text(const printTableContent *cont, FILE *fout)
for (i = 0; i < cont->ncolumns; i++)
{
if (i != 0)
- fputs(",", fout);
- fprintf(fout, "%s", cont->aligns[(i) % cont->ncolumns] == 'r' ? ">l" : "<l");
+ fputc(',', fout);
+ fputs((cont->aligns[(i) % cont->ncolumns]) == 'r' ? ">l" : "<l", fout);
}
- fputs("\"", fout);
+ fputc('"', fout);
switch (opt_border)
{
case 0:
@@ -2235,11 +2235,11 @@ print_asciidoc_text(const printTableContent *cont, FILE *fout)
for (ptr = cont->headers; *ptr; ptr++)
{
if (ptr != cont->headers)
- fputs(" ", fout);
+ fputc(' ', fout);
fputs("^l|", fout);
asciidoc_escaped_print(*ptr, fout);
}
- fputs("\n", fout);
+ fputc('\n', fout);
}
}
@@ -2253,20 +2253,20 @@ print_asciidoc_text(const printTableContent *cont, FILE *fout)
}
if (i % cont->ncolumns != 0)
- fputs(" ", fout);
- fputs("|", fout);
+ fputc(' ', fout);
+ fputc('\n', fout);
/* protect against needless spaces */
if ((*ptr)[strspn(*ptr, " \t")] == '\0')
{
if ((i + 1) % cont->ncolumns != 0)
- fputs(" ", fout);
+ fputc(' ', fout);
}
else
asciidoc_escaped_print(*ptr, fout);
if ((i + 1) % cont->ncolumns == 0)
- fputs("\n", fout);
+ fputc('\n', fout);
}
fputs("|====\n", fout);
@@ -2284,7 +2284,7 @@ print_asciidoc_text(const printTableContent *cont, FILE *fout)
for (f = footers; f; f = f->next)
{
fputs(f->data, fout);
- fputs("\n", fout);
+ fputc('\n', fout);
}
fputs("....\n", fout);
}
@@ -2306,14 +2306,14 @@ print_asciidoc_vertical(const printTableContent *cont, FILE *fout)
if (cont->opt->start_table)
{
/* print table in new paragraph - enforce preliminary new line */
- fputs("\n", fout);
+ fputc('\n', fout);
/* print title */
if (!opt_tuples_only && cont->title)
{
- fputs(".", fout);
+ fputc('.', fout);
fputs(cont->title, fout);
- fputs("\n", fout);
+ fputc('\n', fout);
}
/* print table [] header definition */
@@ -2355,10 +2355,10 @@ print_asciidoc_vertical(const printTableContent *cont, FILE *fout)
fprintf(fout, " %s|", cont->aligns[i % cont->ncolumns] == 'r' ? ">l" : "<l");
/* is string only whitespace? */
if ((*ptr)[strspn(*ptr, " \t")] == '\0')
- fputs(" ", fout);
+ fputc(' ', fout);
else
asciidoc_escaped_print(*ptr, fout);
- fputs("\n", fout);
+ fputc('\n', fout);
}
fputs("|====\n", fout);
@@ -2374,7 +2374,7 @@ print_asciidoc_vertical(const printTableContent *cont, FILE *fout)
for (f = cont->footers; f; f = f->next)
{
fputs(f->data, fout);
- fputs("\n", fout);
+ fputc('\n', fout);
}
fputs("....\n", fout);
}
@@ -3150,7 +3150,7 @@ ClosePager(FILE *pagerpipe)
* anywhere ...
*/
if (cancel_pressed)
- fprintf(pagerpipe, _("Interrupted\n"));
+ fputs(_("Interrupted\n"), pagerpipe);
pclose(pagerpipe);
restore_sigpipe_trap();
diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c
index 917b19e0e9..510e34f096 100644
--- a/src/interfaces/libpq/fe-connect.c
+++ b/src/interfaces/libpq/fe-connect.c
@@ -7025,7 +7025,7 @@ defaultNoticeProcessor(void *arg, const char *message)
{
(void) arg; /* not used */
/* Note: we expect the supplied string to end with a newline already. */
- fprintf(stderr, "%s", message);
+ fputs(message, stderr);
}
/*
diff --git a/src/interfaces/libpq/fe-print.c b/src/interfaces/libpq/fe-print.c
index 21d346a08b..eac118f30b 100644
--- a/src/interfaces/libpq/fe-print.c
+++ b/src/interfaces/libpq/fe-print.c
@@ -113,7 +113,7 @@ PQprint(FILE *fout, const PGresult *res, const PQprintOpt *po)
fieldMax = (int *) calloc(nFields, sizeof(int));
if (!fieldNames || !fieldNotNum || !fieldMax)
{
- fprintf(stderr, libpq_gettext("out of memory\n"));
+ fputs(libpq_gettext("out of memory\n"), stderr);
goto exit;
}
for (numFieldName = 0;
@@ -205,7 +205,7 @@ PQprint(FILE *fout, const PGresult *res, const PQprintOpt *po)
nFields * sizeof(char *));
if (!fields)
{
- fprintf(stderr, libpq_gettext("out of memory\n"));
+ fputs(libpq_gettext("out of memory\n"), stderr);
goto exit;
}
}
@@ -404,7 +404,7 @@ do_field(const PQprintOpt *po, const PGresult *res,
fieldMax[j] = plen;
if (!(fields[i * nFields + j] = (char *) malloc(plen + 1)))
{
- fprintf(stderr, libpq_gettext("out of memory\n"));
+ fputs(libpq_gettext("out of memory\n"), stderr);
return false;
}
strcpy(fields[i * nFields + j], pval);
@@ -475,7 +475,7 @@ do_header(FILE *fout, const PQprintOpt *po, const int nFields, int *fieldMax,
border = malloc(tot + 1);
if (!border)
{
- fprintf(stderr, libpq_gettext("out of memory\n"));
+ fputs(libpq_gettext("out of memory\n"), stderr);
return NULL;
}
p = border;
@@ -615,7 +615,7 @@ PQdisplayTuples(const PGresult *res,
fLength = (int *) malloc(nFields * sizeof(int));
if (!fLength)
{
- fprintf(stderr, libpq_gettext("out of memory\n"));
+ fputs(libpq_gettext("out of memory\n"), stderr);
return;
}
@@ -642,7 +642,7 @@ PQdisplayTuples(const PGresult *res,
fill(strlen(PQfname(res, i)), fLength[i], ' ', fp);
fputs(fieldSep, fp);
}
- fprintf(fp, "\n");
+ fputc('\n', fp);
/* Underline the attribute names */
for (i = 0; i < nFields; i++)
@@ -651,7 +651,7 @@ PQdisplayTuples(const PGresult *res,
fill(0, fLength[i], '-', fp);
fputs(fieldSep, fp);
}
- fprintf(fp, "\n");
+ fputc('\n', fp);
}
/* next, print out the instances */
@@ -659,12 +659,12 @@ PQdisplayTuples(const PGresult *res,
{
for (j = 0; j < nFields; j++)
{
- fprintf(fp, "%s", PQgetvalue(res, i, j));
+ fputs(PQgetvalue(res, i, j), fp);
if (fillAlign)
fill(strlen(PQgetvalue(res, i, j)), fLength[j], ' ', fp);
fputs(fieldSep, fp);
}
- fprintf(fp, "\n");
+ fputc('\n', fp);
}
if (!quiet)
@@ -712,7 +712,7 @@ PQprintTuples(const PGresult *res,
tborder = (char *) malloc(width + 1);
if (!tborder)
{
- fprintf(stderr, libpq_gettext("out of memory\n"));
+ fputs(libpq_gettext("out of memory\n"), stderr);
return;
}
for (i = 0; i < width; i++)
@@ -734,7 +734,7 @@ PQprintTuples(const PGresult *res,
if (PrintAttNames)
{
if (TerseOutput)
- fprintf(fout, "\n");
+ fputc('\n', fout);
else
fprintf(fout, "|\n%s\n", tborder);
}
@@ -750,7 +750,7 @@ PQprintTuples(const PGresult *res,
pval ? pval : "");
}
if (TerseOutput)
- fprintf(fout, "\n");
+ fputc('\n', fout);
else
fprintf(fout, "|\n%s\n", tborder);
}
diff --git a/src/interfaces/libpq/fe-secure-openssl.c b/src/interfaces/libpq/fe-secure-openssl.c
index 3798bb3f11..5c3c836028 100644
--- a/src/interfaces/libpq/fe-secure-openssl.c
+++ b/src/interfaces/libpq/fe-secure-openssl.c
@@ -1939,7 +1939,7 @@ PQdefaultSSLKeyPassHook_OpenSSL(char *buf, int size, PGconn *conn)
if (conn && conn->sslpassword)
{
if (strlen(conn->sslpassword) + 1 > size)
- fprintf(stderr, libpq_gettext("WARNING: sslpassword truncated\n"));
+ fputs(libpq_gettext("WARNING: sslpassword truncated\n"), stderr);
strncpy(buf, conn->sslpassword, size);
buf[size - 1] = '\0';
return strlen(buf);
diff --git a/src/interfaces/libpq/fe-trace.c b/src/interfaces/libpq/fe-trace.c
index 5d68cf2eb3..1a6f447f50 100644
--- a/src/interfaces/libpq/fe-trace.c
+++ b/src/interfaces/libpq/fe-trace.c
@@ -149,7 +149,7 @@ pqTraceOutputInt32(FILE *pfdebug, const char *data, int *cursor, bool suppress)
*cursor += 4;
result = (int) pg_ntoh32(result);
if (suppress)
- fprintf(pfdebug, " NNNN");
+ fputs(" NNNN", pfdebug);
else
fprintf(pfdebug, " %d", result);
@@ -166,7 +166,7 @@ pqTraceOutputString(FILE *pfdebug, const char *data, int *cursor, bool suppress)
if (suppress)
{
- fprintf(pfdebug, " \"SSSS\"");
+ fputs(" \"SSSS\"", pfdebug);
*cursor += strlen(data + *cursor) + 1;
}
else
@@ -191,7 +191,7 @@ pqTraceOutputNchar(FILE *pfdebug, int len, const char *data, int *cursor)
next; /* first char not yet printed */
const char *v = data + *cursor;
- fprintf(pfdebug, " \'");
+ fputs(" \'", pfdebug);
for (next = i = 0; i < len; ++i)
{
@@ -207,7 +207,7 @@ pqTraceOutputNchar(FILE *pfdebug, int len, const char *data, int *cursor)
if (next < len)
fwrite(v + next, 1, len - next, pfdebug);
- fprintf(pfdebug, "\'");
+ fputc('\'', pfdebug);
*cursor += len;
}
@@ -219,7 +219,7 @@ pqTraceOutputNchar(FILE *pfdebug, int len, const char *data, int *cursor)
static void
pqTraceOutputA(FILE *f, const char *message, int *cursor, bool regress)
{
- fprintf(f, "NotificationResponse\t");
+ fputs("NotificationResponse\t", f);
pqTraceOutputInt32(f, message, cursor, regress);
pqTraceOutputString(f, message, cursor, false);
pqTraceOutputString(f, message, cursor, false);
@@ -231,7 +231,7 @@ pqTraceOutputB(FILE *f, const char *message, int *cursor)
{
int nparams;
- fprintf(f, "Bind\t");
+ fputs("Bind\t", f);
pqTraceOutputString(f, message, cursor, false);
pqTraceOutputString(f, message, cursor, false);
nparams = pqTraceOutputInt16(f, message, cursor);
@@ -262,13 +262,13 @@ pqTraceOutputC(FILE *f, bool toServer, const char *message, int *cursor)
{
if (toServer)
{
- fprintf(f, "Close\t");
+ fputs("Close\t", f);
pqTraceOutputByte1(f, message, cursor);
pqTraceOutputString(f, message, cursor, false);
}
else
{
- fprintf(f, "CommandComplete\t");
+ fputs("CommandComplete\t", f);
pqTraceOutputString(f, message, cursor, false);
}
}
@@ -279,7 +279,7 @@ pqTraceOutputD(FILE *f, bool toServer, const char *message, int *cursor)
{
if (toServer)
{
- fprintf(f, "Describe\t");
+ fputs("Describe\t", f);
pqTraceOutputByte1(f, message, cursor);
pqTraceOutputString(f, message, cursor, false);
}
@@ -289,7 +289,7 @@ pqTraceOutputD(FILE *f, bool toServer, const char *message, int *cursor)
int len;
int i;
- fprintf(f, "DataRow\t");
+ fputs("DataRow\t", f);
nfields = pqTraceOutputInt16(f, message, cursor);
for (i = 0; i < nfields; i++)
{
@@ -328,7 +328,7 @@ pqTraceOutputE(FILE *f, bool toServer, const char *message, int *cursor, bool re
{
if (toServer)
{
- fprintf(f, "Execute\t");
+ fputs("Execute\t", f);
pqTraceOutputString(f, message, cursor, false);
pqTraceOutputInt32(f, message, cursor, false);
}
@@ -340,7 +340,7 @@ pqTraceOutputE(FILE *f, bool toServer, const char *message, int *cursor, bool re
static void
pqTraceOutputf(FILE *f, const char *message, int *cursor)
{
- fprintf(f, "CopyFail\t");
+ fputs("CopyFail\t", f);
pqTraceOutputString(f, message, cursor, false);
}
@@ -351,7 +351,7 @@ pqTraceOutputF(FILE *f, const char *message, int *cursor, bool regress)
int nfields;
int nbytes;
- fprintf(f, "FunctionCall\t");
+ fputs("FunctionCall\t", f);
pqTraceOutputInt32(f, message, cursor, regress);
nfields = pqTraceOutputInt16(f, message, cursor);
@@ -377,7 +377,7 @@ pqTraceOutputG(FILE *f, const char *message, int *cursor)
{
int nfields;
- fprintf(f, "CopyInResponse\t");
+ fputs("CopyInResponse\t", f);
pqTraceOutputByte1(f, message, cursor);
nfields = pqTraceOutputInt16(f, message, cursor);
@@ -391,7 +391,7 @@ pqTraceOutputH(FILE *f, const char *message, int *cursor)
{
int nfields;
- fprintf(f, "CopyOutResponse\t");
+ fputs("CopyOutResponse\t", f);
pqTraceOutputByte1(f, message, cursor);
nfields = pqTraceOutputInt16(f, message, cursor);
@@ -403,7 +403,7 @@ pqTraceOutputH(FILE *f, const char *message, int *cursor)
static void
pqTraceOutputK(FILE *f, const char *message, int *cursor, bool regress)
{
- fprintf(f, "BackendKeyData\t");
+ fputs("BackendKeyData\t", f);
pqTraceOutputInt32(f, message, cursor, regress);
pqTraceOutputInt32(f, message, cursor, regress);
}
@@ -414,7 +414,7 @@ pqTraceOutputP(FILE *f, const char *message, int *cursor, bool regress)
{
int nparams;
- fprintf(f, "Parse\t");
+ fputs("Parse\t", f);
pqTraceOutputString(f, message, cursor, false);
pqTraceOutputString(f, message, cursor, false);
nparams = pqTraceOutputInt16(f, message, cursor);
@@ -427,7 +427,7 @@ pqTraceOutputP(FILE *f, const char *message, int *cursor, bool regress)
static void
pqTraceOutputQ(FILE *f, const char *message, int *cursor)
{
- fprintf(f, "Query\t");
+ fputs("Query\t", f);
pqTraceOutputString(f, message, cursor, false);
}
@@ -435,7 +435,7 @@ pqTraceOutputQ(FILE *f, const char *message, int *cursor)
static void
pqTraceOutputR(FILE *f, const char *message, int *cursor)
{
- fprintf(f, "Authentication\t");
+ fputs("Authentication\t", f);
pqTraceOutputInt32(f, message, cursor, false);
}
@@ -443,7 +443,7 @@ pqTraceOutputR(FILE *f, const char *message, int *cursor)
static void
pqTraceOutputS(FILE *f, const char *message, int *cursor)
{
- fprintf(f, "ParameterStatus\t");
+ fputs("ParameterStatus\t", f);
pqTraceOutputString(f, message, cursor, false);
pqTraceOutputString(f, message, cursor, false);
}
@@ -454,7 +454,7 @@ pqTraceOutputt(FILE *f, const char *message, int *cursor, bool regress)
{
int nfields;
- fprintf(f, "ParameterDescription\t");
+ fputs("ParameterDescription\t", f);
nfields = pqTraceOutputInt16(f, message, cursor);
for (int i = 0; i < nfields; i++)
@@ -467,7 +467,7 @@ pqTraceOutputT(FILE *f, const char *message, int *cursor, bool regress)
{
int nfields;
- fprintf(f, "RowDescription\t");
+ fputs("RowDescription\t", f);
nfields = pqTraceOutputInt16(f, message, cursor);
for (int i = 0; i < nfields; i++)
@@ -486,7 +486,7 @@ pqTraceOutputT(FILE *f, const char *message, int *cursor, bool regress)
static void
pqTraceOutputv(FILE *f, const char *message, int *cursor)
{
- fprintf(f, "NegotiateProtocolVersion\t");
+ fputs("NegotiateProtocolVersion\t", f);
pqTraceOutputInt32(f, message, cursor, false);
pqTraceOutputInt32(f, message, cursor, false);
}
@@ -497,7 +497,7 @@ pqTraceOutputV(FILE *f, const char *message, int *cursor)
{
int len;
- fprintf(f, "FunctionCallResponse\t");
+ fputs("FunctionCallResponse\t", f);
len = pqTraceOutputInt32(f, message, cursor, false);
if (len != -1)
pqTraceOutputNchar(f, len, message, cursor);
@@ -507,7 +507,7 @@ pqTraceOutputV(FILE *f, const char *message, int *cursor)
static void
pqTraceOutputW(FILE *f, const char *message, int *cursor, int length)
{
- fprintf(f, "CopyBothResponse\t");
+ fputs("CopyBothResponse\t", f);
pqTraceOutputByte1(f, message, cursor);
while (length > *cursor)
@@ -518,7 +518,7 @@ pqTraceOutputW(FILE *f, const char *message, int *cursor, int length)
static void
pqTraceOutputZ(FILE *f, const char *message, int *cursor)
{
- fprintf(f, "ReadyForQuery\t");
+ fputs("ReadyForQuery\t", f);
pqTraceOutputByte1(f, message, cursor);
}
@@ -563,15 +563,15 @@ pqTraceOutputMessage(PGconn *conn, const char *message, bool toServer)
switch (id)
{
case '1':
- fprintf(conn->Pfdebug, "ParseComplete");
+ fputs("ParseComplete", conn->Pfdebug);
/* No message content */
break;
case '2':
- fprintf(conn->Pfdebug, "BindComplete");
+ fputs("BindComplete", conn->Pfdebug);
/* No message content */
break;
case '3':
- fprintf(conn->Pfdebug, "CloseComplete");
+ fputs("CloseComplete", conn->Pfdebug);
/* No message content */
break;
case 'A': /* Notification Response */
@@ -581,7 +581,7 @@ pqTraceOutputMessage(PGconn *conn, const char *message, bool toServer)
pqTraceOutputB(conn->Pfdebug, message, &logCursor);
break;
case 'c':
- fprintf(conn->Pfdebug, "CopyDone");
+ fputs("CopyDone", conn->Pfdebug);
/* No message content */
break;
case 'C': /* Close(F) or Command Complete(B) */
@@ -610,17 +610,17 @@ pqTraceOutputMessage(PGconn *conn, const char *message, bool toServer)
if (!toServer)
pqTraceOutputH(conn->Pfdebug, message, &logCursor);
else
- fprintf(conn->Pfdebug, "Flush"); /* no message content */
+ fputs("Flush", conn->Pfdebug); /* no message content */
break;
case 'I':
- fprintf(conn->Pfdebug, "EmptyQueryResponse");
+ fputs("EmptyQueryResponse", conn->Pfdebug);
/* No message content */
break;
case 'K': /* secret key data from the backend */
pqTraceOutputK(conn->Pfdebug, message, &logCursor, regress);
break;
case 'n':
- fprintf(conn->Pfdebug, "NoData");
+ fputs("NoData", conn->Pfdebug);
/* No message content */
break;
case 'N':
@@ -637,14 +637,14 @@ pqTraceOutputMessage(PGconn *conn, const char *message, bool toServer)
pqTraceOutputR(conn->Pfdebug, message, &logCursor);
break;
case 's':
- fprintf(conn->Pfdebug, "PortalSuspended");
+ fputs("PortalSuspended", conn->Pfdebug);
/* No message content */
break;
case 'S': /* Parameter Status(B) or Sync(F) */
if (!toServer)
pqTraceOutputS(conn->Pfdebug, message, &logCursor);
else
- fprintf(conn->Pfdebug, "Sync"); /* no message content */
+ fputs("Sync", conn->Pfdebug); /* no message content */
break;
case 't': /* Parameter Description */
pqTraceOutputt(conn->Pfdebug, message, &logCursor, regress);
@@ -662,7 +662,7 @@ pqTraceOutputMessage(PGconn *conn, const char *message, bool toServer)
pqTraceOutputW(conn->Pfdebug, message, &logCursor, length);
break;
case 'X':
- fprintf(conn->Pfdebug, "Terminate");
+ fputs("Terminate", conn->Pfdebug);
/* No message content */
break;
case 'Z': /* Ready For Query */
diff --git a/src/interfaces/libpq/pqexpbuffer.h b/src/interfaces/libpq/pqexpbuffer.h
index efd652c80a..ac105df5ea 100644
--- a/src/interfaces/libpq/pqexpbuffer.h
+++ b/src/interfaces/libpq/pqexpbuffer.h
@@ -139,6 +139,7 @@ extern void resetPQExpBuffer(PQExpBuffer str);
*/
extern int enlargePQExpBuffer(PQExpBuffer str, size_t needed);
+
/*------------------------
* printfPQExpBuffer
* Format text data under the control of fmt (an sprintf-like format string)
diff --git a/src/interfaces/libpq/test/libpq_testclient.c b/src/interfaces/libpq/test/libpq_testclient.c
index d945bacf1b..1766ea3158 100644
--- a/src/interfaces/libpq/test/libpq_testclient.c
+++ b/src/interfaces/libpq/test/libpq_testclient.c
@@ -18,7 +18,7 @@ print_ssl_library()
const char *lib = PQsslAttribute(NULL, "library");
if (!lib)
- fprintf(stderr, "SSL is not enabled\n");
+ fputs("SSL is not enabled\n", stderr);
else
printf("%s\n", lib);
}
diff --git a/src/interfaces/libpq/test/libpq_uri_regress.c b/src/interfaces/libpq/test/libpq_uri_regress.c
index 60469002fd..52f4afedc1 100644
--- a/src/interfaces/libpq/test/libpq_uri_regress.c
+++ b/src/interfaces/libpq/test/libpq_uri_regress.c
@@ -40,7 +40,7 @@ main(int argc, char *argv[])
defs = PQconndefaults();
if (defs == NULL)
{
- fprintf(stderr, "libpq_uri_regress: cannot fetch default options\n");
+ fputs("libpq_uri_regress: cannot fetch default options\n", stderr);
return 1;
}
diff --git a/src/port/path.c b/src/port/path.c
index 05fe812f75..7f3d61966b 100644
--- a/src/port/path.c
+++ b/src/port/path.c
@@ -750,7 +750,7 @@ make_absolute_path(const char *path)
(errcode(ERRCODE_OUT_OF_MEMORY),
errmsg("out of memory")));
#else
- fprintf(stderr, _("out of memory\n"));
+ fputs(_("out of memory\n"), stderr);
return NULL;
#endif
}
@@ -788,7 +788,7 @@ make_absolute_path(const char *path)
(errcode(ERRCODE_OUT_OF_MEMORY),
errmsg("out of memory")));
#else
- fprintf(stderr, _("out of memory\n"));
+ fputs(_("out of memory\n"), stderr);
return NULL;
#endif
}
@@ -805,7 +805,7 @@ make_absolute_path(const char *path)
(errcode(ERRCODE_OUT_OF_MEMORY),
errmsg("out of memory")));
#else
- fprintf(stderr, _("out of memory\n"));
+ fputs(_("out of memory\n"), stderr);
return NULL;
#endif
}
diff --git a/src/test/examples/testlibpq.c b/src/test/examples/testlibpq.c
index 0372781eaf..99d3c2578a 100644
--- a/src/test/examples/testlibpq.c
+++ b/src/test/examples/testlibpq.c
@@ -43,7 +43,7 @@ main(int argc, char **argv)
/* Check to see that the backend connection was successfully made */
if (PQstatus(conn) != CONNECTION_OK)
{
- fprintf(stderr, "%s", PQerrorMessage(conn));
+ fputs(PQerrorMessage(conn), stderr);
exit_nicely(conn);
}
diff --git a/src/test/examples/testlibpq2.c b/src/test/examples/testlibpq2.c
index 05ce8c3f13..24d9687bc2 100644
--- a/src/test/examples/testlibpq2.c
+++ b/src/test/examples/testlibpq2.c
@@ -70,7 +70,7 @@ main(int argc, char **argv)
/* Check to see that the backend connection was successfully made */
if (PQstatus(conn) != CONNECTION_OK)
{
- fprintf(stderr, "%s", PQerrorMessage(conn));
+ fputs(PQerrorMessage(conn), stderr);
exit_nicely(conn);
}
@@ -141,7 +141,7 @@ main(int argc, char **argv)
}
}
- fprintf(stderr, "Done.\n");
+ fputs("Done.\n", stderr);
/* close the connection to the database and cleanup */
PQfinish(conn);
diff --git a/src/test/examples/testlibpq3.c b/src/test/examples/testlibpq3.c
index 4f7b791388..f2d5797d53 100644
--- a/src/test/examples/testlibpq3.c
+++ b/src/test/examples/testlibpq3.c
@@ -138,7 +138,7 @@ main(int argc, char **argv)
/* Check to see that the backend connection was successfully made */
if (PQstatus(conn) != CONNECTION_OK)
{
- fprintf(stderr, "%s", PQerrorMessage(conn));
+ fputs(PQerrorMessage(conn), stderr);
exit_nicely(conn);
}
diff --git a/src/test/examples/testlibpq4.c b/src/test/examples/testlibpq4.c
index da4443072d..14d14b5d7c 100644
--- a/src/test/examples/testlibpq4.c
+++ b/src/test/examples/testlibpq4.c
@@ -29,7 +29,7 @@ check_prepare_conn(PGconn *conn, const char *dbName)
/* check to see that the backend connection was successfully made */
if (PQstatus(conn) != CONNECTION_OK)
{
- fprintf(stderr, "%s", PQerrorMessage(conn));
+ fputs(PQerrorMessage(conn), stderr);
exit(1);
}
diff --git a/src/test/examples/testlo.c b/src/test/examples/testlo.c
index 1b08b6cac5..1761d36788 100644
--- a/src/test/examples/testlo.c
+++ b/src/test/examples/testlo.c
@@ -54,7 +54,7 @@ importFile(PGconn *conn, char *filename)
*/
lobjId = lo_creat(conn, INV_READ | INV_WRITE);
if (lobjId == 0)
- fprintf(stderr, "cannot create large object");
+ fputs("cannot create large object", stderr);
lobj_fd = lo_open(conn, lobjId, INV_WRITE);
@@ -100,7 +100,7 @@ pickout(PGconn *conn, Oid lobjId, int start, int len)
break; /* no more data? */
}
free(buf);
- fprintf(stderr, "\n");
+ fputc('\n', stderr);
lo_close(conn, lobj_fd);
}
@@ -131,12 +131,12 @@ overwrite(PGconn *conn, Oid lobjId, int start, int len)
nwritten += nbytes;
if (nbytes <= 0)
{
- fprintf(stderr, "\nWRITE FAILED!\n");
+ fputs("\nWRITE FAILED!\n", stderr);
break;
}
}
free(buf);
- fprintf(stderr, "\n");
+ fputc('\n', stderr);
lo_close(conn, lobj_fd);
}
@@ -225,7 +225,7 @@ main(int argc, char **argv)
/* check to see that the backend connection was successfully made */
if (PQstatus(conn) != CONNECTION_OK)
{
- fprintf(stderr, "%s", PQerrorMessage(conn));
+ fputs(PQerrorMessage(conn), stderr);
exit_nicely(conn);
}
diff --git a/src/test/examples/testlo64.c b/src/test/examples/testlo64.c
index 981e29ad78..550b1a7dd3 100644
--- a/src/test/examples/testlo64.c
+++ b/src/test/examples/testlo64.c
@@ -54,7 +54,7 @@ importFile(PGconn *conn, char *filename)
*/
lobjId = lo_creat(conn, INV_READ | INV_WRITE);
if (lobjId == 0)
- fprintf(stderr, "cannot create large object");
+ fputs("cannot create large object", stderr);
lobj_fd = lo_open(conn, lobjId, INV_WRITE);
@@ -105,7 +105,7 @@ pickout(PGconn *conn, Oid lobjId, pg_int64 start, int len)
break; /* no more data? */
}
free(buf);
- fprintf(stderr, "\n");
+ fputc('\n', stderr);
lo_close(conn, lobj_fd);
}
@@ -138,12 +138,12 @@ overwrite(PGconn *conn, Oid lobjId, pg_int64 start, int len)
nwritten += nbytes;
if (nbytes <= 0)
{
- fprintf(stderr, "\nWRITE FAILED!\n");
+ fputs("\nWRITE FAILED!\n", stderr);
break;
}
}
free(buf);
- fprintf(stderr, "\n");
+ fputc('\n', stderr);
lo_close(conn, lobj_fd);
}
@@ -249,7 +249,7 @@ main(int argc, char **argv)
/* check to see that the backend connection was successfully made */
if (PQstatus(conn) != CONNECTION_OK)
{
- fprintf(stderr, "%s", PQerrorMessage(conn));
+ fputs(PQerrorMessage(conn), stderr);
exit_nicely(conn);
}
diff --git a/src/test/isolation/isolation_main.c b/src/test/isolation/isolation_main.c
index 31a0e6b709..37251647ad 100644
--- a/src/test/isolation/isolation_main.c
+++ b/src/test/isolation/isolation_main.c
@@ -45,7 +45,7 @@ isolation_start_test(const char *testname,
if (find_other_exec(saved_argv0, "isolationtester",
PG_ISOLATION_VERSIONSTR, isolation_exec) != 0)
{
- fprintf(stderr, _("could not find proper isolationtester binary\n"));
+ fputs(_("could not find proper isolationtester binary\n"), stderr);
exit(2);
}
looked_up_isolation_exec = true;
@@ -81,7 +81,7 @@ isolation_start_test(const char *testname,
"%s ", launcher);
if (offset >= sizeof(psql_cmd))
{
- fprintf(stderr, _("command too long\n"));
+ fputs(_("command too long\n"), stderr);
exit(2);
}
}
@@ -94,7 +94,7 @@ isolation_start_test(const char *testname,
outfile);
if (offset >= sizeof(psql_cmd))
{
- fprintf(stderr, _("command too long\n"));
+ fputs(_("command too long\n"), stderr);
exit(2);
}
diff --git a/src/test/modules/libpq_pipeline/libpq_pipeline.c b/src/test/modules/libpq_pipeline/libpq_pipeline.c
index 0407c4a8c0..57aaf36102 100644
--- a/src/test/modules/libpq_pipeline/libpq_pipeline.c
+++ b/src/test/modules/libpq_pipeline/libpq_pipeline.c
@@ -80,7 +80,7 @@ pg_fatal_impl(int line, const char *fmt,...)
vfprintf(stderr, fmt, args);
va_end(args);
Assert(fmt[strlen(fmt) - 1] != '\n');
- fprintf(stderr, "\n");
+ fputc('\n', stderr);
exit(1);
}
@@ -89,7 +89,7 @@ test_disallowed_in_pipeline(PGconn *conn)
{
PGresult *res = NULL;
- fprintf(stderr, "test error cases... ");
+ fputs("test error cases... ", stderr);
if (PQisnonblocking(conn))
pg_fatal("Expected blocking connection mode");
@@ -129,7 +129,7 @@ test_disallowed_in_pipeline(PGconn *conn)
pg_fatal("PQexec should succeed after exiting pipeline mode but failed with: %s",
PQerrorMessage(conn));
- fprintf(stderr, "ok\n");
+ fputs("ok\n", stderr);
}
static void
@@ -139,7 +139,7 @@ test_multi_pipelines(PGconn *conn)
const char *dummy_params[1] = {"1"};
Oid dummy_param_oids[1] = {INT4OID};
- fprintf(stderr, "multi pipeline... ");
+ fputs("multi pipeline... ", stderr);
/*
* Queue up a couple of small pipelines and process each without returning
@@ -227,7 +227,7 @@ test_multi_pipelines(PGconn *conn)
if (PQpipelineStatus(conn) != PQ_PIPELINE_OFF)
pg_fatal("exiting pipeline mode didn't seem to work");
- fprintf(stderr, "ok\n");
+ fputs("ok\n", stderr);
}
/*
@@ -241,7 +241,7 @@ test_nosync(PGconn *conn)
int results = 0;
int sock = PQsocket(conn);
- fprintf(stderr, "nosync... ");
+ fputs("nosync... ", stderr);
if (sock < 0)
pg_fatal("invalid socket");
@@ -314,7 +314,7 @@ test_nosync(PGconn *conn)
pg_fatal("got unexpected %s\n", PQresStatus(PQresultStatus(res)));
}
- fprintf(stderr, "ok\n");
+ fputs("ok\n", stderr);
}
/*
@@ -336,7 +336,7 @@ test_pipeline_abort(PGconn *conn)
int gotrows;
bool goterror;
- fprintf(stderr, "aborted pipeline... ");
+ fputs("aborted pipeline... ", stderr);
res = PQexec(conn, drop_table_sql);
if (PQresultStatus(res) != PGRES_COMMAND_OK)
@@ -524,7 +524,7 @@ test_pipeline_abort(PGconn *conn)
if (PQresultStatus(res) != PGRES_PIPELINE_SYNC)
pg_fatal("Unexpected result code %s from pipeline sync",
PQresStatus(PQresultStatus(res)));
- fprintf(stderr, "ok\n");
+ fputs("ok\n", stderr);
/* Test single-row mode with an error partways */
if (PQsendQuery(conn, "SELECT 1.0/g FROM generate_series(3, -1, -1) g") != 1)
@@ -611,7 +611,7 @@ test_pipeline_abort(PGconn *conn)
PQclear(res);
- fprintf(stderr, "ok\n");
+ fputs("ok\n", stderr);
}
/* State machine enum for test_pipelined_insert */
@@ -850,7 +850,7 @@ test_pipelined_insert(PGconn *conn, int n_rows)
{
if (PQpipelineSync(conn) == 1)
{
- fprintf(stdout, "pipeline sync sent\n");
+ fputs("pipeline sync sent\n", stdout);
send_step++;
}
else
@@ -870,7 +870,7 @@ test_pipelined_insert(PGconn *conn, int n_rows)
if (PQsetnonblocking(conn, 0) != 0)
pg_fatal("failed to clear nonblocking mode: %s", PQerrorMessage(conn));
- fprintf(stderr, "ok\n");
+ fputs("ok\n", stderr);
}
static void
@@ -881,7 +881,7 @@ test_prepared(PGconn *conn)
Oid expected_oids[4];
Oid typ;
- fprintf(stderr, "prepared... ");
+ fputs("prepared... ", stderr);
if (PQenterPipelineMode(conn) != 1)
pg_fatal("failed to enter pipeline mode: %s", PQerrorMessage(conn));
@@ -963,7 +963,7 @@ test_prepared(PGconn *conn)
if (PQexitPipelineMode(conn) != 1)
pg_fatal("could not exit pipeline mode: %s", PQerrorMessage(conn));
- fprintf(stderr, "ok\n");
+ fputs("ok\n", stderr);
}
/* Notice processor: print notices, and count how many we got */
@@ -983,7 +983,7 @@ test_pipeline_idle(PGconn *conn)
PGresult *res;
int n_notices = 0;
- fprintf(stderr, "\npipeline idle...\n");
+ fputs("\npipeline idle...\n", stderr);
PQsetNoticeProcessor(conn, notice_processor, &n_notices);
@@ -1033,7 +1033,7 @@ test_pipeline_idle(PGconn *conn)
*/
if (n_notices > 0)
pg_fatal("got %d notice(s)", n_notices);
- fprintf(stderr, "ok - 1\n");
+ fputs("ok - 1\n", stderr);
/*
* Verify that we can send a query using simple query protocol after one
@@ -1071,7 +1071,7 @@ test_pipeline_idle(PGconn *conn)
pg_fatal("did not receive terminating NULL");
if (n_notices > 0)
pg_fatal("got %d notice(s)", n_notices);
- fprintf(stderr, "ok - 2\n");
+ fputs("ok - 2\n", fputs);
/*
* Case 2: exiting pipeline mode is not OK if a second command is sent.
@@ -1149,7 +1149,7 @@ test_pipeline_idle(PGconn *conn)
if (n_notices > 0)
pg_fatal("got %d notice(s)", n_notices);
- fprintf(stderr, "ok - 3\n");
+ fputs("ok - 3\n", stderr);
/* Have a WARNING in the middle of a resultset */
if (PQenterPipelineMode(conn) != 1)
@@ -1164,7 +1164,7 @@ test_pipeline_idle(PGconn *conn)
pg_fatal("unexpected result code %s", PQresStatus(PQresultStatus(res)));
if (PQexitPipelineMode(conn) != 1)
pg_fatal("failed to exit pipeline mode: %s", PQerrorMessage(conn));
- fprintf(stderr, "ok - 4\n");
+ fputs("ok - 4\n", stderr);
}
static void
@@ -1174,7 +1174,7 @@ test_simple_pipeline(PGconn *conn)
const char *dummy_params[1] = {"1"};
Oid dummy_param_oids[1] = {INT4OID};
- fprintf(stderr, "simple pipeline... ");
+ fputs("simple pipeline... ", stderr);
/*
* Enter pipeline mode and dispatch a set of operations, which we'll then
@@ -1251,7 +1251,7 @@ test_simple_pipeline(PGconn *conn)
if (PQpipelineStatus(conn) != PQ_PIPELINE_OFF)
pg_fatal("Exiting pipeline mode didn't seem to work");
- fprintf(stderr, "ok\n");
+ fputs("ok\n", stderr);
}
static void
@@ -1308,7 +1308,7 @@ test_singlerowmode(PGconn *conn)
if (est == PGRES_PIPELINE_SYNC)
{
- fprintf(stderr, "end of pipeline reached\n");
+ fputs("end of pipeline reached\n", stderr);
pipeline_ended = true;
PQclear(res);
if (i != 3)
@@ -1360,7 +1360,7 @@ test_singlerowmode(PGconn *conn)
if (PQexitPipelineMode(conn) != 1)
pg_fatal("failed to end pipeline mode: %s", PQerrorMessage(conn));
- fprintf(stderr, "ok\n");
+ fputs("ok\n", stderr);
}
/*
@@ -1507,7 +1507,7 @@ test_transaction(PGconn *conn)
pg_fatal("did not get expected tuple");
PQclear(res);
- fprintf(stderr, "ok\n");
+ fputs("ok\n", stderr);
}
/*
@@ -1536,7 +1536,7 @@ test_uniqviol(PGconn *conn)
fd_set in_fds;
fd_set out_fds;
- fprintf(stderr, "uniqviol ...");
+ fputs("uniqviol ...", stderr);
PQsetnonblocking(conn, 1);
@@ -1631,12 +1631,12 @@ test_uniqviol(PGconn *conn)
if (switched >= 1 && !error_sent && ctr % socketful >= socketful / 2)
{
sprintf(paramValue0, "%d", numsent / 2);
- fprintf(stderr, "E");
+ fputc('E', stderr);
error_sent = true;
}
else
{
- fprintf(stderr, ".");
+ fputc('.', stderr);
sprintf(paramValue0, "%d", ctr++);
}
@@ -1650,7 +1650,7 @@ test_uniqviol(PGconn *conn)
if (PQsendFlushRequest(conn) != 1)
pg_fatal("failed to send flush request");
write_done = true;
- fprintf(stderr, "\ndone writing\n");
+ fputs("\ndone writing\n", stderr);
PQflush(conn);
break;
}
@@ -1663,7 +1663,7 @@ test_uniqviol(PGconn *conn)
{
if (socketful == 0)
socketful = numsent;
- fprintf(stderr, "\nswitch to reading\n");
+ fputs("\nswitch to reading\n", stderr);
switched++;
break;
}
@@ -1674,7 +1674,7 @@ test_uniqviol(PGconn *conn)
if (!got_error)
pg_fatal("did not get expected error");
- fprintf(stderr, "ok\n");
+ fputs("ok\n", stderr);
}
/*
diff --git a/src/test/regress/pg_regress.c b/src/test/regress/pg_regress.c
index 7290948eee..13157724c3 100644
--- a/src/test/regress/pg_regress.c
+++ b/src/test/regress/pg_regress.c
@@ -245,10 +245,10 @@ status(const char *fmt,...)
static void
status_end(void)
{
- fprintf(stdout, "\n");
+ fputc('\n', stdout);
fflush(stdout);
if (logfile)
- fprintf(logfile, "\n");
+ fputc('\n', logfile);
}
/*
diff --git a/src/test/regress/pg_regress_main.c b/src/test/regress/pg_regress_main.c
index a4b354c9e6..594d0ce570 100644
--- a/src/test/regress/pg_regress_main.c
+++ b/src/test/regress/pg_regress_main.c
@@ -68,7 +68,7 @@ psql_start_test(const char *testname,
"%s ", launcher);
if (offset >= sizeof(psql_cmd))
{
- fprintf(stderr, _("command too long\n"));
+ fputs(_("command too long\n"), stderr);
exit(2);
}
}
@@ -87,7 +87,7 @@ psql_start_test(const char *testname,
outfile);
if (offset >= sizeof(psql_cmd))
{
- fprintf(stderr, _("command too long\n"));
+ fputs(_("command too long\n"), stderr);
exit(2);
}
diff --git a/src/timezone/zic.c b/src/timezone/zic.c
index 0ea6ead2db..ec432b6a23 100644
--- a/src/timezone/zic.c
+++ b/src/timezone/zic.c
@@ -495,7 +495,7 @@ verror(const char *string, va_list args)
if (rfilename != NULL)
fprintf(stderr, _(" (rule from \"%s\", line %d)"),
rfilename, rlinenum);
- fprintf(stderr, "\n");
+ fputc('\n', stderr);
}
static void
@@ -514,7 +514,7 @@ warning(const char *string,...)
{
va_list args;
- fprintf(stderr, _("warning: "));
+ fputs(_("warning: "), stderr);
va_start(args, string);
verror(string, args);
va_end(args);
On Fri, Sep 09, 2022 at 10:45:37AM -0300, Ranier Vilela wrote:
Based on work in [1].
According to https://cplusplus.com/reference/cstdio/fprintf/
The use of fprintf is related to the need to generate a string based on a
format, which should be different from "%s".
Since fprintf has overhead when parsing the "format" parameter, plus all
the trouble of checking the va_arg parameters.
I think this is one of the low fruits available and easy to reap.
By replacing fprintf with its equivalents, fputs and fputc,
we avoid overhead and increase security [2] and [3].The downside is a huge big churm, which unfortunately will occur.
But, IHMO, I think the advantages are worth it.
Note that behavior remains the same, since fputs and fputc do not change
the expected behavior of fprintf.A small performance gain is expected, mainly for the client, since there
are several occurrences in some critical places, such as
(usr/src/fe_utils/print.c).
I agree with David [0]/messages/by-id/CAApHDvp2THseLvCc+TcYFBC7FKHpHTs1JyYmd2JghtOVhb5WGA@mail.gmail.com. But if you can demonstrate a performance gain,
perhaps it's worth considering a subset of these changes in hot paths.
[0]: /messages/by-id/CAApHDvp2THseLvCc+TcYFBC7FKHpHTs1JyYmd2JghtOVhb5WGA@mail.gmail.com
--
Nathan Bossart
Amazon Web Services: https://aws.amazon.com
Em sex., 9 de set. de 2022 às 13:20, Nathan Bossart <
nathandbossart@gmail.com> escreveu:
On Fri, Sep 09, 2022 at 10:45:37AM -0300, Ranier Vilela wrote:
Based on work in [1].
According to https://cplusplus.com/reference/cstdio/fprintf/
The use of fprintf is related to the need to generate a string based on a
format, which should be different from "%s".
Since fprintf has overhead when parsing the "format" parameter, plus all
the trouble of checking the va_arg parameters.
I think this is one of the low fruits available and easy to reap.
By replacing fprintf with its equivalents, fputs and fputc,
we avoid overhead and increase security [2] and [3].The downside is a huge big churm, which unfortunately will occur.
But, IHMO, I think the advantages are worth it.
Note that behavior remains the same, since fputs and fputc do not change
the expected behavior of fprintf.A small performance gain is expected, mainly for the client, since there
are several occurrences in some critical places, such as
(usr/src/fe_utils/print.c).I agree with David [0]. But if you can demonstrate a performance gain,
perhaps it's worth considering a subset of these changes in hot paths.
Simple benchmark with David sort example.
1. make data
create table t (a bigint not null, b bigint not null, c bigint not
null, d bigint not null, e bigint not null, f bigint not null);
insert into t select x,x,x,x,x,x from generate_Series(1,140247142) x; --
10GB!
vacuum freeze t;
2. client run
\timing on
\pset pager off
select * from t limit 1000000;
head:
Time: 418,210 ms
Time: 419,588 ms
Time: 424,713 ms
fprintf patch:
Time: 416,919 ms
Time: 416,246 ms
Time: 416,237 ms
regards,
Ranier Vilela
Em sex., 9 de set. de 2022 às 10:45, Ranier Vilela <ranier.vf@gmail.com>
escreveu:
Based on work in [1].
According to https://cplusplus.com/reference/cstdio/fprintf/
The use of fprintf is related to the need to generate a string based on a
format, which should be different from "%s".
Since fprintf has overhead when parsing the "format" parameter, plus all
the trouble of checking the va_arg parameters.
I think this is one of the low fruits available and easy to reap.
By replacing fprintf with its equivalents, fputs and fputc,
we avoid overhead and increase security [2] and [3].The downside is a huge big churm, which unfortunately will occur.
But, IHMO, I think the advantages are worth it.
Note that behavior remains the same, since fputs and fputc do not change
the expected behavior of fprintf.A small performance gain is expected, mainly for the client, since there
are several occurrences in some critical places, such as
(usr/src/fe_utils/print.c).Patch attached.
This pass check-world.
Rechecked for the hundredth time.
One typo.
regards,
Ranier Vilela
Attachments:
v1-fprintf_fixes.patchtext/x-patch; charset=US-ASCII; name=v1-fprintf_fixes.patchDownload
diff --git a/contrib/oid2name/oid2name.c b/contrib/oid2name/oid2name.c
index 32d5444831..4672d8b2a4 100644
--- a/contrib/oid2name/oid2name.c
+++ b/contrib/oid2name/oid2name.c
@@ -422,7 +422,7 @@ sql_exec(PGconn *conn, const char *todo, bool quiet)
fprintf(stdout, "%*s", length[j] + 2, PQfname(res, j));
l += length[j] + 2;
}
- fprintf(stdout, "\n");
+ fputc('\n', stdout);
pad = (char *) pg_malloc(l + 1);
memset(pad, '-', l);
pad[l] = '\0';
@@ -435,7 +435,7 @@ sql_exec(PGconn *conn, const char *todo, bool quiet)
{
for (j = 0; j < nfields; j++)
fprintf(stdout, "%*s", length[j] + 2, PQgetvalue(res, i, j));
- fprintf(stdout, "\n");
+ fputc('\n', stdout);
}
/* cleanup */
diff --git a/contrib/pg_trgm/trgm_regexp.c b/contrib/pg_trgm/trgm_regexp.c
index 58d32ba946..ed1ab65940 100644
--- a/contrib/pg_trgm/trgm_regexp.c
+++ b/contrib/pg_trgm/trgm_regexp.c
@@ -2201,7 +2201,7 @@ printSourceNFA(regex_t *regex, TrgmColorInfo *colors, int ncolors)
/* dot -Tpng -o /tmp/source.png < /tmp/source.gv */
FILE *fp = fopen("/tmp/source.gv", "w");
- fprintf(fp, "%s", buf.data);
+ fputs(buf.data, fp);
fclose(fp);
}
@@ -2263,7 +2263,7 @@ printTrgmNFA(TrgmNFA *trgmNFA)
/* dot -Tpng -o /tmp/transformed.png < /tmp/transformed.gv */
FILE *fp = fopen("/tmp/transformed.gv", "w");
- fprintf(fp, "%s", buf.data);
+ fputs(buf.data, fp);
fclose(fp);
}
@@ -2354,7 +2354,7 @@ printTrgmPackedGraph(TrgmPackedGraph *packedGraph, TRGM *trigrams)
/* dot -Tpng -o /tmp/packed.png < /tmp/packed.gv */
FILE *fp = fopen("/tmp/packed.gv", "w");
- fprintf(fp, "%s", buf.data);
+ fputs(buf.data, fp);
fclose(fp);
}
diff --git a/contrib/vacuumlo/vacuumlo.c b/contrib/vacuumlo/vacuumlo.c
index 264b879bd3..e51ce8df57 100644
--- a/contrib/vacuumlo/vacuumlo.c
+++ b/contrib/vacuumlo/vacuumlo.c
@@ -133,7 +133,7 @@ vacuumlo(const char *database, const struct _param *param)
{
fprintf(stdout, "Connected to database \"%s\"\n", database);
if (param->dry_run)
- fprintf(stdout, "Test run: no large objects will be removed!\n");
+ fputs("Test run: no large objects will be removed!\n", stdout);
}
res = PQexec(conn, ALWAYS_SECURE_SEARCH_PATH_SQL);
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c
index 7a710e6490..343555e095 100644
--- a/src/backend/access/transam/xlog.c
+++ b/src/backend/access/transam/xlog.c
@@ -8641,7 +8641,7 @@ do_pg_backup_stop(char *labelfile, bool waitforarchive, TimeLineID *stoptli_p)
* Transfer remaining lines including label and start timeline to
* history file.
*/
- fprintf(fp, "%s", remaining);
+ fputs(remaining, fp);
fprintf(fp, "STOP TIME: %s\n", strfbuf);
fprintf(fp, "STOP TIMELINE: %u\n", stoptli);
if (fflush(fp) || ferror(fp) || FreeFile(fp))
diff --git a/src/backend/optimizer/geqo/geqo_misc.c b/src/backend/optimizer/geqo/geqo_misc.c
index 890ac363e9..0d024f227f 100644
--- a/src/backend/optimizer/geqo/geqo_misc.c
+++ b/src/backend/optimizer/geqo/geqo_misc.c
@@ -114,17 +114,17 @@ print_edge_table(FILE *fp, Edge *edge_table, int num_gene)
int i,
j;
- fprintf(fp, "\nEDGE TABLE\n");
+ fputs("\nEDGE TABLE\n", fp);
for (i = 1; i <= num_gene; i++)
{
fprintf(fp, "%d :", i);
for (j = 0; j < edge_table[i].unused_edges; j++)
fprintf(fp, " %d", edge_table[i].edge_list[j]);
- fprintf(fp, "\n");
+ fputc('\n', fp);
}
- fprintf(fp, "\n");
+ fputc('\n', fp);
fflush(fp);
}
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index e75611fdd5..36808438c8 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -5601,10 +5601,10 @@ CreateOptsFile(int argc, char *argv[], char *fullprogname)
return false;
}
- fprintf(fp, "%s", fullprogname);
+ fputs(fullprogname, fp);
for (i = 1; i < argc; i++)
fprintf(fp, " \"%s\"", argv[i]);
- fputs("\n", fp);
+ fputc('\n', fp);
if (fclose(fp))
{
diff --git a/src/backend/regex/regc_color.c b/src/backend/regex/regc_color.c
index 30bda0e5ad..affeb099ee 100644
--- a/src/backend/regex/regc_color.c
+++ b/src/backend/regex/regc_color.c
@@ -1134,7 +1134,7 @@ dumpcolors(struct colormap *cm,
for (c = CHR_MIN; c <= MAX_SIMPLE_CHR; c++)
if (GETCOLOR(cm, c) == co)
dumpchr(c, f);
- fprintf(f, "\n");
+ fputc('\n', f);
}
}
/* dump the high colormap if it contains anything interesting */
@@ -1144,12 +1144,12 @@ dumpcolors(struct colormap *cm,
c;
const color *rowptr;
- fprintf(f, "other:\t");
+ fputs("other:\t", f);
for (c = 0; c < cm->hiarraycols; c++)
{
fprintf(f, "\t%ld", (long) cm->hicolormap[c]);
}
- fprintf(f, "\n");
+ fputc('\n', f);
for (r = 0; r < cm->numcmranges; r++)
{
dumpchr(cm->cmranges[r].cmin, f);
@@ -1161,7 +1161,7 @@ dumpcolors(struct colormap *cm,
{
fprintf(f, "\t%ld", (long) rowptr[c]);
}
- fprintf(f, "\n");
+ fputc('\n', f);
}
}
}
diff --git a/src/backend/regex/regc_nfa.c b/src/backend/regex/regc_nfa.c
index 60fb0bec5d..27ea726768 100644
--- a/src/backend/regex/regc_nfa.c
+++ b/src/backend/regex/regc_nfa.c
@@ -3667,7 +3667,7 @@ dumpnfa(struct nfa *nfa,
else
fprintf(f, ", maxmatchall %d", nfa->maxmatchall);
}
- fprintf(f, "\n");
+ fputc('\n', f);
for (s = nfa->states; s != NULL; s = s->next)
{
dumpstate(s, f);
@@ -3730,7 +3730,7 @@ dumparcs(struct state *s,
dumparc(a, s, f);
if (pos == 5)
{
- fprintf(f, "\n");
+ fputc('\n', f);
pos = 1;
}
else
@@ -3738,7 +3738,7 @@ dumparcs(struct state *s,
a = a->outchainRev;
} while (a != NULL);
if (pos != 1)
- fprintf(f, "\n");
+ fputc('\n', f);
}
/*
@@ -3751,7 +3751,7 @@ dumparc(struct arc *a,
{
struct arc *aa;
- fprintf(f, "\t");
+ fputc('\t', );
switch (a->type)
{
case PLAIN:
@@ -3836,7 +3836,7 @@ dumpcnfa(struct cnfa *cnfa,
else
fprintf(f, ", maxmatchall %d", cnfa->maxmatchall);
}
- fprintf(f, "\n");
+ fputc('\n', f);
for (st = 0; st < cnfa->nstates; st++)
dumpcstate(st, cnfa, f);
fflush(f);
@@ -3868,14 +3868,14 @@ dumpcstate(int st,
fprintf(f, "\t:%ld:->%d", (long) (ca->co - cnfa->ncolors), ca->to);
if (pos == 5)
{
- fprintf(f, "\n");
+ fputc('\n', f);
pos = 1;
}
else
pos++;
}
if (ca == cnfa->states[st] || pos != 1)
- fprintf(f, "\n");
+ fputc('\n', f);
fflush(f);
}
diff --git a/src/backend/regex/regcomp.c b/src/backend/regex/regcomp.c
index 473738040b..ca7b9252b9 100644
--- a/src/backend/regex/regcomp.c
+++ b/src/backend/regex/regcomp.c
@@ -2517,7 +2517,7 @@ dump(regex_t *re,
fprintf(f, "\nla%d (%s):\n", i, latype);
dumpcnfa(&lasub->cnfa, f);
}
- fprintf(f, "\n");
+ fputc('\n', f);
dumpst(g->tree, f, 0);
}
@@ -2530,7 +2530,7 @@ dumpst(struct subre *t,
int nfapresent) /* is the original NFA still around? */
{
if (t == NULL)
- fprintf(f, "null tree\n");
+ fputs("null tree\n", f);
else
stdump(t, f, nfapresent);
fflush(f);
@@ -2586,10 +2586,10 @@ stdump(struct subre *t,
fprintf(f, " S:%s", stid(t->sibling, idbuf, sizeof(idbuf)));
if (!NULLCNFA(t->cnfa))
{
- fprintf(f, "\n");
+ fputc('\n', f);
dumpcnfa(&t->cnfa, f);
}
- fprintf(f, "\n");
+ fputc('\n', f);
for (t2 = t->child; t2 != NULL; t2 = t2->sibling)
stdump(t2, f, nfapresent);
}
diff --git a/src/backend/storage/lmgr/s_lock.c b/src/backend/storage/lmgr/s_lock.c
index 4e473ec27e..357eb11cab 100644
--- a/src/backend/storage/lmgr/s_lock.c
+++ b/src/backend/storage/lmgr/s_lock.c
@@ -139,7 +139,7 @@ perform_spin_delay(SpinDelayStatus *status)
pg_usleep(status->cur_delay);
#if defined(S_LOCK_TEST)
- fprintf(stdout, "*");
+ fputc('*', stdout);
fflush(stdout);
#endif
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
index 55bf998511..effcddc422 100644
--- a/src/backend/utils/misc/guc.c
+++ b/src/backend/utils/misc/guc.c
@@ -11010,7 +11010,7 @@ write_one_nondefault_variable(FILE *fp, struct config_generic *gconf)
if (gconf->source == PGC_S_DEFAULT)
return;
- fprintf(fp, "%s", gconf->name);
+ fputs(gconf->name, fp);
fputc(0, fp);
switch (gconf->vartype)
@@ -11020,9 +11020,9 @@ write_one_nondefault_variable(FILE *fp, struct config_generic *gconf)
struct config_bool *conf = (struct config_bool *) gconf;
if (*conf->variable)
- fprintf(fp, "true");
+ fputs("true", fp);
else
- fprintf(fp, "false");
+ fputs("false", fp);
}
break;
@@ -11046,7 +11046,7 @@ write_one_nondefault_variable(FILE *fp, struct config_generic *gconf)
{
struct config_string *conf = (struct config_string *) gconf;
- fprintf(fp, "%s", *conf->variable);
+ fputs(*conf->variable, fp);
}
break;
@@ -11054,8 +11054,7 @@ write_one_nondefault_variable(FILE *fp, struct config_generic *gconf)
{
struct config_enum *conf = (struct config_enum *) gconf;
- fprintf(fp, "%s",
- config_enum_lookup_by_value(conf, *conf->variable));
+ fputs(config_enum_lookup_by_value(conf, *conf->variable), fp);
}
break;
}
@@ -11063,7 +11062,7 @@ write_one_nondefault_variable(FILE *fp, struct config_generic *gconf)
fputc(0, fp);
if (gconf->sourcefile)
- fprintf(fp, "%s", gconf->sourcefile);
+ fputs(gconf->sourcefile, fp);
fputc(0, fp);
fwrite(&gconf->sourceline, 1, sizeof(gconf->sourceline), fp);
diff --git a/src/backend/utils/mmgr/mcxt.c b/src/backend/utils/mmgr/mcxt.c
index 115a64cfe4..649f6a589f 100644
--- a/src/backend/utils/mmgr/mcxt.c
+++ b/src/backend/utils/mmgr/mcxt.c
@@ -680,7 +680,7 @@ MemoryContextStatsInternal(MemoryContext context, int level,
int i;
for (i = 0; i <= level; i++)
- fprintf(stderr, " ");
+ fputs(" ", stderr);
fprintf(stderr,
"%d more child contexts containing %zu total in %zu blocks; %zu free (%zu chunks); %zu used\n",
ichild - max_children,
@@ -782,7 +782,7 @@ MemoryContextStatsPrint(MemoryContext context, void *passthru,
if (print_to_stderr)
{
for (i = 0; i < level; i++)
- fprintf(stderr, " ");
+ fputs(" ", stderr);
fprintf(stderr, "%s: %s%s\n", name, stats_string, truncated_ident);
}
else
diff --git a/src/bin/pg_amcheck/pg_amcheck.c b/src/bin/pg_amcheck/pg_amcheck.c
index fea35e4b14..330d296fa4 100644
--- a/src/bin/pg_amcheck/pg_amcheck.c
+++ b/src/bin/pg_amcheck/pg_amcheck.c
@@ -726,7 +726,7 @@ main(int argc, char *argv[])
if (opts.verbose)
{
if (opts.show_progress && progress_since_last_stderr)
- fprintf(stderr, "\n");
+ fputc('\n', stderr);
pg_log_info("checking heap table \"%s.%s.%s\"",
rel->datinfo->datname, rel->nspname, rel->relname);
progress_since_last_stderr = false;
@@ -741,7 +741,7 @@ main(int argc, char *argv[])
if (opts.verbose)
{
if (opts.show_progress && progress_since_last_stderr)
- fprintf(stderr, "\n");
+ fputc('\n', stderr);
pg_log_info("checking btree index \"%s.%s.%s\"",
rel->datinfo->datname, rel->nspname, rel->relname);
@@ -1095,7 +1095,7 @@ verify_btree_slot_handler(PGresult *res, PGconn *conn, void *context)
* event loop, so it doesn't matter.
*/
if (opts.show_progress && progress_since_last_stderr)
- fprintf(stderr, "\n");
+ fputc('\n', stderr);
pg_log_warning("btree index \"%s.%s.%s\": btree checking function returned unexpected number of rows: %d",
rel->datinfo->datname, rel->nspname, rel->relname, ntups);
if (opts.verbose)
diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c
index 9ce30d43a4..888dfa7fc0 100644
--- a/src/bin/pg_basebackup/pg_basebackup.c
+++ b/src/bin/pg_basebackup/pg_basebackup.c
@@ -1904,11 +1904,11 @@ BaseBackup(char *compression_algorithm, char *compression_detail,
if (showprogress && !verbose)
{
- fprintf(stderr, "waiting for checkpoint");
+ fputs("waiting for checkpoint", stderr);
if (isatty(fileno(stderr)))
- fprintf(stderr, "\r");
+ fputc('\r', stderr);
else
- fprintf(stderr, "\n");
+ fputc('\n', stderr);
}
if (use_new_option_syntax && buf.len > 0)
diff --git a/src/bin/pg_dump/pg_dumpall.c b/src/bin/pg_dump/pg_dumpall.c
index 69ae027bd3..9481e68c5e 100644
--- a/src/bin/pg_dump/pg_dumpall.c
+++ b/src/bin/pg_dump/pg_dumpall.c
@@ -535,7 +535,7 @@ main(int argc, char *argv[])
if (quote_all_identifiers)
executeCommand(conn, "SET quote_all_identifiers = true");
- fprintf(OPF, "--\n-- PostgreSQL database cluster dump\n--\n\n");
+ fputs("--\n-- PostgreSQL database cluster dump\n--\n\n", OPF);
if (verbose)
dumpTimestamp("Started on");
@@ -547,15 +547,15 @@ main(int argc, char *argv[])
*/
/* Restore will need to write to the target cluster */
- fprintf(OPF, "SET default_transaction_read_only = off;\n\n");
+ fputs("SET default_transaction_read_only = off;\n\n", OPF);
/* Replicate encoding and std_strings in output */
fprintf(OPF, "SET client_encoding = '%s';\n",
pg_encoding_to_char(encoding));
fprintf(OPF, "SET standard_conforming_strings = %s;\n", std_strings);
if (strcmp(std_strings, "off") == 0)
- fprintf(OPF, "SET escape_string_warning = off;\n");
- fprintf(OPF, "\n");
+ fputs("SET escape_string_warning = off;\n", OPF);
+ fputc('\n', OPF);
if (!data_only)
{
@@ -606,7 +606,7 @@ main(int argc, char *argv[])
if (verbose)
dumpTimestamp("Completed on");
- fprintf(OPF, "--\n-- PostgreSQL database cluster dump complete\n--\n\n");
+ fputs("--\n-- PostgreSQL database cluster dump complete\n--\n\n", OPF);
if (filename)
{
@@ -716,7 +716,7 @@ dropRoles(PGconn *conn)
i_rolname = PQfnumber(res, "rolname");
if (PQntuples(res) > 0)
- fprintf(OPF, "--\n-- Drop roles\n--\n\n");
+ fputs("--\n-- Drop roles\n--\n\n", OPF);
for (i = 0; i < PQntuples(res); i++)
{
@@ -732,7 +732,7 @@ dropRoles(PGconn *conn)
PQclear(res);
destroyPQExpBuffer(buf);
- fprintf(OPF, "\n\n");
+ fputs("\n\n", OPF);
}
/*
@@ -811,7 +811,7 @@ dumpRoles(PGconn *conn)
i_is_current_user = PQfnumber(res, "is_current_user");
if (PQntuples(res) > 0)
- fprintf(OPF, "--\n-- Roles\n--\n\n");
+ fputs("--\n-- Roles\n--\n\n", OPF);
for (i = 0; i < PQntuples(res); i++)
{
@@ -915,7 +915,7 @@ dumpRoles(PGconn *conn)
"ROLE", rolename,
buf);
- fprintf(OPF, "%s", buf->data);
+ fputs(buf->data, OPF);
}
/*
@@ -924,14 +924,14 @@ dumpRoles(PGconn *conn)
* names of other roles.
*/
if (PQntuples(res) > 0)
- fprintf(OPF, "\n--\n-- User Configurations\n--\n");
+ fputs("\n--\n-- User Configurations\n--\n", OPF);
for (i = 0; i < PQntuples(res); i++)
dumpUserConfig(conn, PQgetvalue(res, i, i_rolname));
PQclear(res);
- fprintf(OPF, "\n\n");
+ fputs("\n\n", OPF);
destroyPQExpBuffer(buf);
}
@@ -989,7 +989,7 @@ dumpRoleMembership(PGconn *conn)
i_inherit_option = PQfnumber(res, "inherit_option");
if (PQntuples(res) > 0)
- fprintf(OPF, "--\n-- Role memberships\n--\n\n");
+ fputs("--\n-- Role memberships\n--\n\n", OPF);
/*
* We can't dump these GRANT commands in arbitary order, because a role
@@ -1111,7 +1111,7 @@ dumpRoleMembership(PGconn *conn)
fprintf(OPF, " WITH %s", optbuf->data);
if (dump_grantors)
fprintf(OPF, " GRANTED BY %s", fmtId(grantor));
- fprintf(OPF, ";\n");
+ fputs(";\n", OPF);
}
}
@@ -1123,7 +1123,7 @@ dumpRoleMembership(PGconn *conn)
PQclear(res);
destroyPQExpBuffer(buf);
- fprintf(OPF, "\n\n");
+ fputs("\n\n", OPF);
}
@@ -1151,7 +1151,7 @@ dumpRoleGUCPrivs(PGconn *conn)
"ORDER BY 1");
if (PQntuples(res) > 0)
- fprintf(OPF, "--\n-- Role privileges on configuration parameters\n--\n\n");
+ fputs("--\n-- Role privileges on configuration parameters\n--\n\n", OPF);
for (i = 0; i < PQntuples(res); i++)
{
@@ -1175,14 +1175,14 @@ dumpRoleGUCPrivs(PGconn *conn)
exit_nicely(1);
}
- fprintf(OPF, "%s", buf->data);
+ fputs(buf->data, OPF);
free(fparname);
destroyPQExpBuffer(buf);
}
PQclear(res);
- fprintf(OPF, "\n\n");
+ fputs("\n\n", OPF);
}
@@ -1205,7 +1205,7 @@ dropTablespaces(PGconn *conn)
"ORDER BY 1");
if (PQntuples(res) > 0)
- fprintf(OPF, "--\n-- Drop tablespaces\n--\n\n");
+ fputs("--\n-- Drop tablespaces\n--\n\n", OPF);
for (i = 0; i < PQntuples(res); i++)
{
@@ -1218,7 +1218,7 @@ dropTablespaces(PGconn *conn)
PQclear(res);
- fprintf(OPF, "\n\n");
+ fputs("\n\n", OPF);
}
/*
@@ -1245,7 +1245,7 @@ dumpTablespaces(PGconn *conn)
"ORDER BY 1");
if (PQntuples(res) > 0)
- fprintf(OPF, "--\n-- Tablespaces\n--\n\n");
+ fputs("--\n-- Tablespaces\n--\n\n", OPF);
for (i = 0; i < PQntuples(res); i++)
{
@@ -1305,14 +1305,14 @@ dumpTablespaces(PGconn *conn)
"TABLESPACE", spcname,
buf);
- fprintf(OPF, "%s", buf->data);
+ fputs(buf->data, OPF);
free(fspcname);
destroyPQExpBuffer(buf);
}
PQclear(res);
- fprintf(OPF, "\n\n");
+ fputs("\n\n", OPF);
}
@@ -1336,7 +1336,7 @@ dropDBs(PGconn *conn)
"ORDER BY datname");
if (PQntuples(res) > 0)
- fprintf(OPF, "--\n-- Drop databases (except postgres and template1)\n--\n\n");
+ fputs("--\n-- Drop databases (except postgres and template1)\n--\n\n", OPF);
for (i = 0; i < PQntuples(res); i++)
{
@@ -1359,7 +1359,7 @@ dropDBs(PGconn *conn)
PQclear(res);
- fprintf(OPF, "\n\n");
+ fputs("\n\n", OPF);
}
@@ -1390,7 +1390,7 @@ dumpUserConfig(PGconn *conn, const char *username)
makeAlterConfigCommand(conn, PQgetvalue(res, i, 0),
"ROLE", username, NULL, NULL,
buf);
- fprintf(OPF, "%s", buf->data);
+ fputs(buf->data, OPF);
}
PQclear(res);
@@ -1479,7 +1479,7 @@ dumpDatabases(PGconn *conn)
"ORDER BY (datname <> 'template1'), datname");
if (PQntuples(res) > 0)
- fprintf(OPF, "--\n-- Databases\n--\n\n");
+ fputs("--\n-- Databases\n--\n\n", OPF);
for (i = 0; i < PQntuples(res); i++)
{
diff --git a/src/bin/pg_upgrade/check.c b/src/bin/pg_upgrade/check.c
index f4969bcdad..b3c90cf121 100644
--- a/src/bin/pg_upgrade/check.c
+++ b/src/bin/pg_upgrade/check.c
@@ -582,7 +582,7 @@ create_script_for_old_cluster_deletion(char **deletion_script_file_name)
#ifndef WIN32
/* add shebang header */
- fprintf(script, "#!/bin/sh\n\n");
+ fputs("#!/bin/sh\n\n", script);
#endif
/* delete old cluster's default tablespace */
@@ -601,7 +601,7 @@ create_script_for_old_cluster_deletion(char **deletion_script_file_name)
/* delete per-database directories */
int dbnum;
- fprintf(script, "\n");
+ fputc('\n', script);
for (dbnum = 0; dbnum < old_cluster.dbarr.ndbs; dbnum++)
fprintf(script, RMDIR_CMD " %c%s%c%u%c\n", PATH_QUOTE,
diff --git a/src/bin/pg_upgrade/exec.c b/src/bin/pg_upgrade/exec.c
index 60f4b5443e..470fc4855b 100644
--- a/src/bin/pg_upgrade/exec.c
+++ b/src/bin/pg_upgrade/exec.c
@@ -159,13 +159,13 @@ exec_prog(const char *log_filename, const char *opt_log_file,
#ifdef WIN32
/* Are we printing "command:" before its output? */
if (mainThreadId == GetCurrentThreadId())
- fprintf(log, "\n\n");
+ fputs("\n\n", log);
#endif
fprintf(log, "command: %s\n", cmd);
#ifdef WIN32
/* Are we printing "command:" after its output? */
if (mainThreadId != GetCurrentThreadId())
- fprintf(log, "\n\n");
+ fputs("\n\n", log);
#endif
/*
@@ -213,7 +213,7 @@ exec_prog(const char *log_filename, const char *opt_log_file,
*/
if ((log = fopen(log_file, "a")) == NULL)
pg_fatal("could not write to log file \"%s\": %m", log_file);
- fprintf(log, "\n\n");
+ fputs("\n\n", log);
fclose(log);
#endif
diff --git a/src/bin/pg_upgrade/util.c b/src/bin/pg_upgrade/util.c
index 593a843917..486918021b 100644
--- a/src/bin/pg_upgrade/util.c
+++ b/src/bin/pg_upgrade/util.c
@@ -181,7 +181,7 @@ pg_log_v(eLogType type, const char *fmt, va_list ap)
/* status messages get two leading spaces, see below */
fprintf(log_opts.internal, " %s\n", message);
else if (type == PG_REPORT_NONL)
- fprintf(log_opts.internal, "%s", message);
+ fputs(message, log_opts.internal);
else
fprintf(log_opts.internal, "%s\n", message);
fflush(log_opts.internal);
diff --git a/src/bin/pgbench/pgbench.c b/src/bin/pgbench/pgbench.c
index 098fb43b3c..338bc31904 100644
--- a/src/bin/pgbench/pgbench.c
+++ b/src/bin/pgbench/pgbench.c
@@ -2532,7 +2532,7 @@ evalStandardFunc(CState *st,
st->use_file, st->command + 1);
if (varg->type == PGBT_NULL)
- fprintf(stderr, "null\n");
+ fputs("null\n", stderr);
else if (varg->type == PGBT_BOOLEAN)
fprintf(stderr, "boolean %s\n", varg->u.bval ? "true" : "false");
else if (varg->type == PGBT_INT)
@@ -4633,7 +4633,7 @@ disconnect_all(CState *state, int length)
static void
initDropTables(PGconn *con)
{
- fprintf(stderr, "dropping old tables...\n");
+ fputs("dropping old tables...\n", stderr);
/*
* We drop all the tables in one command, so that whether there are
@@ -4771,7 +4771,7 @@ initCreateTables(PGconn *con)
int i;
PQExpBufferData query;
- fprintf(stderr, "creating tables...\n");
+ fputs("creating tables...\n", stderr);
initPQExpBuffer(&query);
@@ -4845,7 +4845,7 @@ initGenerateDataClientSide(PGconn *con)
/* Stay on the same line if reporting to a terminal */
char eol = isatty(fileno(stderr)) ? '\r' : '\n';
- fprintf(stderr, "generating data (client-side)...\n");
+ fputs("generating data (client-side)...\n", stderr);
/*
* we do all of this in one transaction to enable the backend's
@@ -4970,7 +4970,7 @@ initGenerateDataServerSide(PGconn *con)
{
PQExpBufferData sql;
- fprintf(stderr, "generating data (server-side)...\n");
+ fputs("generating data (server-side)...\n", stderr);
/*
* we do all of this in one transaction to enable the backend's
@@ -5013,7 +5013,7 @@ initGenerateDataServerSide(PGconn *con)
static void
initVacuum(PGconn *con)
{
- fprintf(stderr, "vacuuming...\n");
+ fputs("vacuuming...\n", stderr);
executeStatement(con, "vacuum analyze pgbench_branches");
executeStatement(con, "vacuum analyze pgbench_tellers");
executeStatement(con, "vacuum analyze pgbench_accounts");
@@ -5034,7 +5034,7 @@ initCreatePKeys(PGconn *con)
int i;
PQExpBufferData query;
- fprintf(stderr, "creating primary keys...\n");
+ fputs("creating primary keys...\n", stderr);
initPQExpBuffer(&query);
for (i = 0; i < lengthof(DDLINDEXes); i++)
@@ -5073,7 +5073,7 @@ initCreateFKeys(PGconn *con)
};
int i;
- fprintf(stderr, "creating foreign keys...\n");
+ fputs("creating foreign keys...\n", stderr);
for (i = 0; i < lengthof(DDLKEYs); i++)
{
executeStatement(con, DDLKEYs[i]);
@@ -5992,10 +5992,10 @@ listAvailableScripts(void)
{
int i;
- fprintf(stderr, "Available builtin scripts:\n");
+ fputs("Available builtin scripts:\n", stderr);
for (i = 0; i < lengthof(builtin_script); i++)
fprintf(stderr, " %13s: %s\n", builtin_script[i].name, builtin_script[i].desc);
- fprintf(stderr, "\n");
+ fputc('\n', stderr);
}
/* return builtin script "name" if unambiguous, fails if not found */
@@ -6181,7 +6181,7 @@ printProgressReport(TState *threads, int64 test_start, pg_time_usec_t now,
fprintf(stderr,
", " INT64_FORMAT " retried, " INT64_FORMAT " retries",
retried, cur.retries - last->retries);
- fprintf(stderr, "\n");
+ fputc('\n', stderr);
*last = cur;
*last_report = now;
@@ -7138,17 +7138,17 @@ main(int argc, char **argv)
if (!is_no_vacuum)
{
- fprintf(stderr, "starting vacuum...");
+ fputs("starting vacuum...", stderr);
tryExecuteStatement(con, "vacuum pgbench_branches");
tryExecuteStatement(con, "vacuum pgbench_tellers");
tryExecuteStatement(con, "truncate pgbench_history");
- fprintf(stderr, "end.\n");
+ fputs("end.\n", stderr);
if (do_vacuum_accounts)
{
- fprintf(stderr, "starting vacuum pgbench_accounts...");
+ fputs("starting vacuum pgbench_accounts...", stderr);
tryExecuteStatement(con, "vacuum analyze pgbench_accounts");
- fprintf(stderr, "end.\n");
+ fputs("end.\n", stderr);
}
}
PQfinish(con);
diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c
index a141146e70..75fe181c15 100644
--- a/src/bin/psql/command.c
+++ b/src/bin/psql/command.c
@@ -1243,7 +1243,7 @@ exec_command_echo(PsqlScanState scan_state, bool active_branch, const char *cmd)
free(value);
}
if (!no_newline)
- fputs("\n", fout);
+ fputc('\n', fout);
}
else
ignore_slash_options(scan_state);
@@ -5212,7 +5212,7 @@ do_watch(PQExpBuffer query_buf, double sleep)
* using a pager, because pagers are expected to restore the screen to
* a sane state on exit.
*/
- fprintf(stdout, "\n");
+ fputc('\n', stdout);
fflush(stdout);
}
diff --git a/src/bin/psql/common.c b/src/bin/psql/common.c
index e611e3266d..d7222c8489 100644
--- a/src/bin/psql/common.c
+++ b/src/bin/psql/common.c
@@ -309,12 +309,12 @@ CheckConnection(void)
exit(EXIT_BADCONN);
}
- fprintf(stderr, _("The connection to the server was lost. Attempting reset: "));
+ fputs(_("The connection to the server was lost. Attempting reset: "), stderr);
PQreset(pset.db);
OK = ConnectionUp();
if (!OK)
{
- fprintf(stderr, _("Failed.\n"));
+ fputs(_("Failed.\n"), stderr);
/*
* Transition to having no connection; but stash away the failed
@@ -331,7 +331,7 @@ CheckConnection(void)
}
else
{
- fprintf(stderr, _("Succeeded.\n"));
+ fputs(_("Succeeded.\n"), stderr);
/*
* Re-sync, just in case anything changed. Keep this in sync with
@@ -1404,8 +1404,7 @@ DescribeQuery(const char *query, double *elapsed_msec)
termPQExpBuffer(&buf);
}
else
- fprintf(pset.queryFout,
- _("The command has no result, or the result has no columns.\n"));
+ fputs(_("The command has no result, or the result has no columns.\n"), pset.queryFout);
}
SetResultVariables(result, OK);
diff --git a/src/bin/psql/help.c b/src/bin/psql/help.c
index f8ce1a0706..d00e6197d9 100644
--- a/src/bin/psql/help.c
+++ b/src/bin/psql/help.c
@@ -617,14 +617,13 @@ helpSQL(const char *topic, unsigned short int pager)
for (i = 0; i < nrows; i++)
{
- fprintf(output, " ");
+ fputs(" ", output);
for (j = 0; j < ncolumns - 1; j++)
fprintf(output, "%-*s",
QL_MAX_CMD_LEN + 1,
VALUE_OR_NULL(QL_HELP[i + j * nrows].cmd));
if (i + j * nrows < QL_HELP_COUNT)
- fprintf(output, "%s",
- VALUE_OR_NULL(QL_HELP[i + j * nrows].cmd));
+ fputs(VALUE_OR_NULL(QL_HELP[i + j * nrows].cmd), output);
fputc('\n', output);
}
diff --git a/src/bin/psql/large_obj.c b/src/bin/psql/large_obj.c
index 64338d538e..9ba573dc08 100644
--- a/src/bin/psql/large_obj.c
+++ b/src/bin/psql/large_obj.c
@@ -32,7 +32,7 @@ print_lo_result(const char *fmt,...)
if (pset.popt.topt.format == PRINT_HTML)
fputs("</p>\n", pset.queryFout);
else
- fputs("\n", pset.queryFout);
+ fputc('\n', pset.queryFout);
}
if (pset.logfile)
@@ -40,7 +40,7 @@ print_lo_result(const char *fmt,...)
va_start(ap, fmt);
vfprintf(pset.logfile, fmt, ap);
va_end(ap);
- fputs("\n", pset.logfile);
+ fputc('\n', pset.logfile);
}
}
diff --git a/src/bin/scripts/createuser.c b/src/bin/scripts/createuser.c
index 991930a1ae..d635e71c54 100644
--- a/src/bin/scripts/createuser.c
+++ b/src/bin/scripts/createuser.c
@@ -233,7 +233,7 @@ main(int argc, char *argv[])
pw2 = simple_prompt("Enter it again: ", false);
if (strcmp(newpassword, pw2) != 0)
{
- fprintf(stderr, _("Passwords didn't match.\n"));
+ fputs(_("Passwords didn't match.\n"), stderr);
exit(1);
}
free(pw2);
diff --git a/src/common/fe_memutils.c b/src/common/fe_memutils.c
index b1e6c65576..3e169b823e 100644
--- a/src/common/fe_memutils.c
+++ b/src/common/fe_memutils.c
@@ -32,7 +32,7 @@ pg_malloc_internal(size_t size, int flags)
{
if ((flags & MCXT_ALLOC_NO_OOM) == 0)
{
- fprintf(stderr, _("out of memory\n"));
+ fputs(_("out of memory\n"), stderr);
exit(EXIT_FAILURE);
}
return NULL;
@@ -72,7 +72,7 @@ pg_realloc(void *ptr, size_t size)
tmp = realloc(ptr, size);
if (!tmp)
{
- fprintf(stderr, _("out of memory\n"));
+ fputs(_("out of memory\n"), stderr);
exit(EXIT_FAILURE);
}
return tmp;
@@ -88,14 +88,13 @@ pg_strdup(const char *in)
if (!in)
{
- fprintf(stderr,
- _("cannot duplicate null pointer (internal error)\n"));
+ fputs(_("cannot duplicate null pointer (internal error)\n"), stderr);
exit(EXIT_FAILURE);
}
tmp = strdup(in);
if (!tmp)
{
- fprintf(stderr, _("out of memory\n"));
+ fputs(_("out of memory\n"), stderr);
exit(EXIT_FAILURE);
}
return tmp;
@@ -149,8 +148,7 @@ pnstrdup(const char *in, Size size)
if (!in)
{
- fprintf(stderr,
- _("cannot duplicate null pointer (internal error)\n"));
+ fputs(_("cannot duplicate null pointer (internal error)\n"), stderr);
exit(EXIT_FAILURE);
}
@@ -158,7 +156,7 @@ pnstrdup(const char *in, Size size)
tmp = malloc(len + 1);
if (tmp == NULL)
{
- fprintf(stderr, _("out of memory\n"));
+ fputs(_("out of memory\n"), stderr);
exit(EXIT_FAILURE);
}
diff --git a/src/common/logging.c b/src/common/logging.c
index 64604c5209..896c89f487 100644
--- a/src/common/logging.c
+++ b/src/common/logging.c
@@ -258,9 +258,9 @@ pg_log_generic_v(enum pg_log_level level, enum pg_log_part part,
if (lineno > 0)
fprintf(stderr, UINT64_FORMAT ":", lineno);
}
- fprintf(stderr, " ");
+ fputc(' ', stderr);
if (sgr_locus)
- fprintf(stderr, ANSI_ESCAPE_RESET);
+ fputs(ANSI_ESCAPE_RESET, stderr);
}
if (!(log_flags & PG_LOG_FLAG_TERSE))
@@ -275,14 +275,14 @@ pg_log_generic_v(enum pg_log_level level, enum pg_log_part part,
fprintf(stderr, ANSI_ESCAPE_FMT, sgr_error);
fprintf(stderr, _("error: "));
if (sgr_error)
- fprintf(stderr, ANSI_ESCAPE_RESET);
+ fputs(ANSI_ESCAPE_RESET, stderr);
break;
case PG_LOG_WARNING:
if (sgr_warning)
fprintf(stderr, ANSI_ESCAPE_FMT, sgr_warning);
- fprintf(stderr, _("warning: "));
+ fputs(_("warning: "), stderr);
if (sgr_warning)
- fprintf(stderr, ANSI_ESCAPE_RESET);
+ fputs(ANSI_ESCAPE_RESET, stderr);
break;
default:
break;
@@ -291,16 +291,16 @@ pg_log_generic_v(enum pg_log_level level, enum pg_log_part part,
case PG_LOG_DETAIL:
if (sgr_note)
fprintf(stderr, ANSI_ESCAPE_FMT, sgr_note);
- fprintf(stderr, _("detail: "));
+ fputs(_("detail: "), stderr);
if (sgr_note)
- fprintf(stderr, ANSI_ESCAPE_RESET);
+ fputs(ANSI_ESCAPE_RESET, stderr);
break;
case PG_LOG_HINT:
if (sgr_note)
fprintf(stderr, ANSI_ESCAPE_FMT, sgr_note);
- fprintf(stderr, _("hint: "));
+ fputs(_("hint: "), stderr);
if (sgr_note)
- fprintf(stderr, ANSI_ESCAPE_RESET);
+ fputs(ANSI_ESCAPE_RESET, stderr);
break;
}
}
diff --git a/src/common/psprintf.c b/src/common/psprintf.c
index a5a5cb121c..79eb41c1e5 100644
--- a/src/common/psprintf.c
+++ b/src/common/psprintf.c
@@ -142,7 +142,7 @@ pvsnprintf(char *buf, size_t len, const char *fmt, va_list args)
(errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED),
errmsg("out of memory")));
#else
- fprintf(stderr, _("out of memory\n"));
+ fputs(_("out of memory\n"), stderr);
exit(EXIT_FAILURE);
#endif
}
diff --git a/src/common/sprompt.c b/src/common/sprompt.c
index 8b836846e3..ebab6c44fd 100644
--- a/src/common/sprompt.c
+++ b/src/common/sprompt.c
@@ -156,18 +156,18 @@ simple_prompt_extended(const char *prompt, bool echo,
/* restore previous echo behavior, then echo \n */
#if defined(HAVE_TERMIOS_H)
tcsetattr(fileno(termin), TCSAFLUSH, &t_orig);
- fputs("\n", termout);
+ fputc('\n', termout);
fflush(termout);
#elif defined(WIN32)
SetConsoleMode(t, t_orig);
- fputs("\n", termout);
+ fputc('\n', termout);
fflush(termout);
#endif
}
else if (prompt_ctx && prompt_ctx->canceled)
{
/* also echo \n if prompt was canceled */
- fputs("\n", termout);
+ fputc('\n', termout);
fflush(termout);
}
diff --git a/src/fe_utils/print.c b/src/fe_utils/print.c
index 55288f8876..87d23887b0 100644
--- a/src/fe_utils/print.c
+++ b/src/fe_utils/print.c
@@ -1640,7 +1640,7 @@ print_aligned_vertical(const printTableContent *cont,
{
/* Left border */
if (opt_border == 2)
- fprintf(fout, "%s", dformat->leftvrule);
+ fputs(dformat->leftvrule, fout);
/* Header (never wrapped so just need to deal with newlines) */
if (!hcomplete)
@@ -1685,7 +1685,7 @@ print_aligned_vertical(const printTableContent *cont,
/* This was the last line of the header */
if ((opt_border > 0) ||
(hmultiline && (format != &pg_asciiformat_old)))
- fputs(" ", fout);
+ fputc(' ', fout);
hcomplete = 1;
}
}
@@ -1775,7 +1775,7 @@ print_aligned_vertical(const printTableContent *cont,
{
if (swidth > 0)
fprintf(fout, "%*s", swidth, " ");
- fputs(" ", fout);
+ fputc(' ', fout);
}
dcomplete = 1;
}
@@ -1784,7 +1784,7 @@ print_aligned_vertical(const printTableContent *cont,
if (opt_border == 2)
fputs(dformat->rightvrule, fout);
- fputs("\n", fout);
+ fputc('\n', fout);
}
else
{
@@ -1793,7 +1793,7 @@ print_aligned_vertical(const printTableContent *cont,
* data due to newlines in the header)
*/
if (opt_border < 2)
- fputs("\n", fout);
+ fputc('\n', fout);
else
fprintf(fout, "%*s %s\n", dwidth, "", dformat->rightvrule);
}
@@ -1977,7 +1977,7 @@ html_escaped_print(const char *in, FILE *fout)
if (leading_space)
fputs(" ", fout);
else
- fputs(" ", fout);
+ fputc(' ', fout);
break;
default:
fputc(*p, fout);
@@ -2195,14 +2195,14 @@ print_asciidoc_text(const printTableContent *cont, FILE *fout)
if (cont->opt->start_table)
{
/* print table in new paragraph - enforce preliminary new line */
- fputs("\n", fout);
+ fputc('\n', fout);
/* print title */
if (!opt_tuples_only && cont->title)
{
- fputs(".", fout);
+ fputc('.', fout);
fputs(cont->title, fout);
- fputs("\n", fout);
+ fputc('\n', fout);
}
/* print table [] header definition */
@@ -2210,10 +2210,10 @@ print_asciidoc_text(const printTableContent *cont, FILE *fout)
for (i = 0; i < cont->ncolumns; i++)
{
if (i != 0)
- fputs(",", fout);
- fprintf(fout, "%s", cont->aligns[(i) % cont->ncolumns] == 'r' ? ">l" : "<l");
+ fputc(',', fout);
+ fputs((cont->aligns[(i) % cont->ncolumns]) == 'r' ? ">l" : "<l", fout);
}
- fputs("\"", fout);
+ fputc('"', fout);
switch (opt_border)
{
case 0:
@@ -2235,11 +2235,11 @@ print_asciidoc_text(const printTableContent *cont, FILE *fout)
for (ptr = cont->headers; *ptr; ptr++)
{
if (ptr != cont->headers)
- fputs(" ", fout);
+ fputc(' ', fout);
fputs("^l|", fout);
asciidoc_escaped_print(*ptr, fout);
}
- fputs("\n", fout);
+ fputc('\n', fout);
}
}
@@ -2253,20 +2253,20 @@ print_asciidoc_text(const printTableContent *cont, FILE *fout)
}
if (i % cont->ncolumns != 0)
- fputs(" ", fout);
- fputs("|", fout);
+ fputc(' ', fout);
+ fputc('|', fout);
/* protect against needless spaces */
if ((*ptr)[strspn(*ptr, " \t")] == '\0')
{
if ((i + 1) % cont->ncolumns != 0)
- fputs(" ", fout);
+ fputc(' ', fout);
}
else
asciidoc_escaped_print(*ptr, fout);
if ((i + 1) % cont->ncolumns == 0)
- fputs("\n", fout);
+ fputc('\n', fout);
}
fputs("|====\n", fout);
@@ -2284,7 +2284,7 @@ print_asciidoc_text(const printTableContent *cont, FILE *fout)
for (f = footers; f; f = f->next)
{
fputs(f->data, fout);
- fputs("\n", fout);
+ fputc('\n', fout);
}
fputs("....\n", fout);
}
@@ -2306,14 +2306,14 @@ print_asciidoc_vertical(const printTableContent *cont, FILE *fout)
if (cont->opt->start_table)
{
/* print table in new paragraph - enforce preliminary new line */
- fputs("\n", fout);
+ fputc('\n', fout);
/* print title */
if (!opt_tuples_only && cont->title)
{
- fputs(".", fout);
+ fputc('.', fout);
fputs(cont->title, fout);
- fputs("\n", fout);
+ fputc('\n', fout);
}
/* print table [] header definition */
@@ -2355,10 +2355,10 @@ print_asciidoc_vertical(const printTableContent *cont, FILE *fout)
fprintf(fout, " %s|", cont->aligns[i % cont->ncolumns] == 'r' ? ">l" : "<l");
/* is string only whitespace? */
if ((*ptr)[strspn(*ptr, " \t")] == '\0')
- fputs(" ", fout);
+ fputc(' ', fout);
else
asciidoc_escaped_print(*ptr, fout);
- fputs("\n", fout);
+ fputc('\n', fout);
}
fputs("|====\n", fout);
@@ -2374,7 +2374,7 @@ print_asciidoc_vertical(const printTableContent *cont, FILE *fout)
for (f = cont->footers; f; f = f->next)
{
fputs(f->data, fout);
- fputs("\n", fout);
+ fputc('\n', fout);
}
fputs("....\n", fout);
}
@@ -3150,7 +3150,7 @@ ClosePager(FILE *pagerpipe)
* anywhere ...
*/
if (cancel_pressed)
- fprintf(pagerpipe, _("Interrupted\n"));
+ fputs(_("Interrupted\n"), pagerpipe);
pclose(pagerpipe);
restore_sigpipe_trap();
diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c
index 917b19e0e9..510e34f096 100644
--- a/src/interfaces/libpq/fe-connect.c
+++ b/src/interfaces/libpq/fe-connect.c
@@ -7025,7 +7025,7 @@ defaultNoticeProcessor(void *arg, const char *message)
{
(void) arg; /* not used */
/* Note: we expect the supplied string to end with a newline already. */
- fprintf(stderr, "%s", message);
+ fputs(message, stderr);
}
/*
diff --git a/src/interfaces/libpq/fe-print.c b/src/interfaces/libpq/fe-print.c
index 21d346a08b..eac118f30b 100644
--- a/src/interfaces/libpq/fe-print.c
+++ b/src/interfaces/libpq/fe-print.c
@@ -113,7 +113,7 @@ PQprint(FILE *fout, const PGresult *res, const PQprintOpt *po)
fieldMax = (int *) calloc(nFields, sizeof(int));
if (!fieldNames || !fieldNotNum || !fieldMax)
{
- fprintf(stderr, libpq_gettext("out of memory\n"));
+ fputs(libpq_gettext("out of memory\n"), stderr);
goto exit;
}
for (numFieldName = 0;
@@ -205,7 +205,7 @@ PQprint(FILE *fout, const PGresult *res, const PQprintOpt *po)
nFields * sizeof(char *));
if (!fields)
{
- fprintf(stderr, libpq_gettext("out of memory\n"));
+ fputs(libpq_gettext("out of memory\n"), stderr);
goto exit;
}
}
@@ -404,7 +404,7 @@ do_field(const PQprintOpt *po, const PGresult *res,
fieldMax[j] = plen;
if (!(fields[i * nFields + j] = (char *) malloc(plen + 1)))
{
- fprintf(stderr, libpq_gettext("out of memory\n"));
+ fputs(libpq_gettext("out of memory\n"), stderr);
return false;
}
strcpy(fields[i * nFields + j], pval);
@@ -475,7 +475,7 @@ do_header(FILE *fout, const PQprintOpt *po, const int nFields, int *fieldMax,
border = malloc(tot + 1);
if (!border)
{
- fprintf(stderr, libpq_gettext("out of memory\n"));
+ fputs(libpq_gettext("out of memory\n"), stderr);
return NULL;
}
p = border;
@@ -615,7 +615,7 @@ PQdisplayTuples(const PGresult *res,
fLength = (int *) malloc(nFields * sizeof(int));
if (!fLength)
{
- fprintf(stderr, libpq_gettext("out of memory\n"));
+ fputs(libpq_gettext("out of memory\n"), stderr);
return;
}
@@ -642,7 +642,7 @@ PQdisplayTuples(const PGresult *res,
fill(strlen(PQfname(res, i)), fLength[i], ' ', fp);
fputs(fieldSep, fp);
}
- fprintf(fp, "\n");
+ fputc('\n', fp);
/* Underline the attribute names */
for (i = 0; i < nFields; i++)
@@ -651,7 +651,7 @@ PQdisplayTuples(const PGresult *res,
fill(0, fLength[i], '-', fp);
fputs(fieldSep, fp);
}
- fprintf(fp, "\n");
+ fputc('\n', fp);
}
/* next, print out the instances */
@@ -659,12 +659,12 @@ PQdisplayTuples(const PGresult *res,
{
for (j = 0; j < nFields; j++)
{
- fprintf(fp, "%s", PQgetvalue(res, i, j));
+ fputs(PQgetvalue(res, i, j), fp);
if (fillAlign)
fill(strlen(PQgetvalue(res, i, j)), fLength[j], ' ', fp);
fputs(fieldSep, fp);
}
- fprintf(fp, "\n");
+ fputc('\n', fp);
}
if (!quiet)
@@ -712,7 +712,7 @@ PQprintTuples(const PGresult *res,
tborder = (char *) malloc(width + 1);
if (!tborder)
{
- fprintf(stderr, libpq_gettext("out of memory\n"));
+ fputs(libpq_gettext("out of memory\n"), stderr);
return;
}
for (i = 0; i < width; i++)
@@ -734,7 +734,7 @@ PQprintTuples(const PGresult *res,
if (PrintAttNames)
{
if (TerseOutput)
- fprintf(fout, "\n");
+ fputc('\n', fout);
else
fprintf(fout, "|\n%s\n", tborder);
}
@@ -750,7 +750,7 @@ PQprintTuples(const PGresult *res,
pval ? pval : "");
}
if (TerseOutput)
- fprintf(fout, "\n");
+ fputc('\n', fout);
else
fprintf(fout, "|\n%s\n", tborder);
}
diff --git a/src/interfaces/libpq/fe-secure-openssl.c b/src/interfaces/libpq/fe-secure-openssl.c
index 3798bb3f11..5c3c836028 100644
--- a/src/interfaces/libpq/fe-secure-openssl.c
+++ b/src/interfaces/libpq/fe-secure-openssl.c
@@ -1939,7 +1939,7 @@ PQdefaultSSLKeyPassHook_OpenSSL(char *buf, int size, PGconn *conn)
if (conn && conn->sslpassword)
{
if (strlen(conn->sslpassword) + 1 > size)
- fprintf(stderr, libpq_gettext("WARNING: sslpassword truncated\n"));
+ fputs(libpq_gettext("WARNING: sslpassword truncated\n"), stderr);
strncpy(buf, conn->sslpassword, size);
buf[size - 1] = '\0';
return strlen(buf);
diff --git a/src/interfaces/libpq/fe-trace.c b/src/interfaces/libpq/fe-trace.c
index 5d68cf2eb3..1a6f447f50 100644
--- a/src/interfaces/libpq/fe-trace.c
+++ b/src/interfaces/libpq/fe-trace.c
@@ -149,7 +149,7 @@ pqTraceOutputInt32(FILE *pfdebug, const char *data, int *cursor, bool suppress)
*cursor += 4;
result = (int) pg_ntoh32(result);
if (suppress)
- fprintf(pfdebug, " NNNN");
+ fputs(" NNNN", pfdebug);
else
fprintf(pfdebug, " %d", result);
@@ -166,7 +166,7 @@ pqTraceOutputString(FILE *pfdebug, const char *data, int *cursor, bool suppress)
if (suppress)
{
- fprintf(pfdebug, " \"SSSS\"");
+ fputs(" \"SSSS\"", pfdebug);
*cursor += strlen(data + *cursor) + 1;
}
else
@@ -191,7 +191,7 @@ pqTraceOutputNchar(FILE *pfdebug, int len, const char *data, int *cursor)
next; /* first char not yet printed */
const char *v = data + *cursor;
- fprintf(pfdebug, " \'");
+ fputs(" \'", pfdebug);
for (next = i = 0; i < len; ++i)
{
@@ -207,7 +207,7 @@ pqTraceOutputNchar(FILE *pfdebug, int len, const char *data, int *cursor)
if (next < len)
fwrite(v + next, 1, len - next, pfdebug);
- fprintf(pfdebug, "\'");
+ fputc('\'', pfdebug);
*cursor += len;
}
@@ -219,7 +219,7 @@ pqTraceOutputNchar(FILE *pfdebug, int len, const char *data, int *cursor)
static void
pqTraceOutputA(FILE *f, const char *message, int *cursor, bool regress)
{
- fprintf(f, "NotificationResponse\t");
+ fputs("NotificationResponse\t", f);
pqTraceOutputInt32(f, message, cursor, regress);
pqTraceOutputString(f, message, cursor, false);
pqTraceOutputString(f, message, cursor, false);
@@ -231,7 +231,7 @@ pqTraceOutputB(FILE *f, const char *message, int *cursor)
{
int nparams;
- fprintf(f, "Bind\t");
+ fputs("Bind\t", f);
pqTraceOutputString(f, message, cursor, false);
pqTraceOutputString(f, message, cursor, false);
nparams = pqTraceOutputInt16(f, message, cursor);
@@ -262,13 +262,13 @@ pqTraceOutputC(FILE *f, bool toServer, const char *message, int *cursor)
{
if (toServer)
{
- fprintf(f, "Close\t");
+ fputs("Close\t", f);
pqTraceOutputByte1(f, message, cursor);
pqTraceOutputString(f, message, cursor, false);
}
else
{
- fprintf(f, "CommandComplete\t");
+ fputs("CommandComplete\t", f);
pqTraceOutputString(f, message, cursor, false);
}
}
@@ -279,7 +279,7 @@ pqTraceOutputD(FILE *f, bool toServer, const char *message, int *cursor)
{
if (toServer)
{
- fprintf(f, "Describe\t");
+ fputs("Describe\t", f);
pqTraceOutputByte1(f, message, cursor);
pqTraceOutputString(f, message, cursor, false);
}
@@ -289,7 +289,7 @@ pqTraceOutputD(FILE *f, bool toServer, const char *message, int *cursor)
int len;
int i;
- fprintf(f, "DataRow\t");
+ fputs("DataRow\t", f);
nfields = pqTraceOutputInt16(f, message, cursor);
for (i = 0; i < nfields; i++)
{
@@ -328,7 +328,7 @@ pqTraceOutputE(FILE *f, bool toServer, const char *message, int *cursor, bool re
{
if (toServer)
{
- fprintf(f, "Execute\t");
+ fputs("Execute\t", f);
pqTraceOutputString(f, message, cursor, false);
pqTraceOutputInt32(f, message, cursor, false);
}
@@ -340,7 +340,7 @@ pqTraceOutputE(FILE *f, bool toServer, const char *message, int *cursor, bool re
static void
pqTraceOutputf(FILE *f, const char *message, int *cursor)
{
- fprintf(f, "CopyFail\t");
+ fputs("CopyFail\t", f);
pqTraceOutputString(f, message, cursor, false);
}
@@ -351,7 +351,7 @@ pqTraceOutputF(FILE *f, const char *message, int *cursor, bool regress)
int nfields;
int nbytes;
- fprintf(f, "FunctionCall\t");
+ fputs("FunctionCall\t", f);
pqTraceOutputInt32(f, message, cursor, regress);
nfields = pqTraceOutputInt16(f, message, cursor);
@@ -377,7 +377,7 @@ pqTraceOutputG(FILE *f, const char *message, int *cursor)
{
int nfields;
- fprintf(f, "CopyInResponse\t");
+ fputs("CopyInResponse\t", f);
pqTraceOutputByte1(f, message, cursor);
nfields = pqTraceOutputInt16(f, message, cursor);
@@ -391,7 +391,7 @@ pqTraceOutputH(FILE *f, const char *message, int *cursor)
{
int nfields;
- fprintf(f, "CopyOutResponse\t");
+ fputs("CopyOutResponse\t", f);
pqTraceOutputByte1(f, message, cursor);
nfields = pqTraceOutputInt16(f, message, cursor);
@@ -403,7 +403,7 @@ pqTraceOutputH(FILE *f, const char *message, int *cursor)
static void
pqTraceOutputK(FILE *f, const char *message, int *cursor, bool regress)
{
- fprintf(f, "BackendKeyData\t");
+ fputs("BackendKeyData\t", f);
pqTraceOutputInt32(f, message, cursor, regress);
pqTraceOutputInt32(f, message, cursor, regress);
}
@@ -414,7 +414,7 @@ pqTraceOutputP(FILE *f, const char *message, int *cursor, bool regress)
{
int nparams;
- fprintf(f, "Parse\t");
+ fputs("Parse\t", f);
pqTraceOutputString(f, message, cursor, false);
pqTraceOutputString(f, message, cursor, false);
nparams = pqTraceOutputInt16(f, message, cursor);
@@ -427,7 +427,7 @@ pqTraceOutputP(FILE *f, const char *message, int *cursor, bool regress)
static void
pqTraceOutputQ(FILE *f, const char *message, int *cursor)
{
- fprintf(f, "Query\t");
+ fputs("Query\t", f);
pqTraceOutputString(f, message, cursor, false);
}
@@ -435,7 +435,7 @@ pqTraceOutputQ(FILE *f, const char *message, int *cursor)
static void
pqTraceOutputR(FILE *f, const char *message, int *cursor)
{
- fprintf(f, "Authentication\t");
+ fputs("Authentication\t", f);
pqTraceOutputInt32(f, message, cursor, false);
}
@@ -443,7 +443,7 @@ pqTraceOutputR(FILE *f, const char *message, int *cursor)
static void
pqTraceOutputS(FILE *f, const char *message, int *cursor)
{
- fprintf(f, "ParameterStatus\t");
+ fputs("ParameterStatus\t", f);
pqTraceOutputString(f, message, cursor, false);
pqTraceOutputString(f, message, cursor, false);
}
@@ -454,7 +454,7 @@ pqTraceOutputt(FILE *f, const char *message, int *cursor, bool regress)
{
int nfields;
- fprintf(f, "ParameterDescription\t");
+ fputs("ParameterDescription\t", f);
nfields = pqTraceOutputInt16(f, message, cursor);
for (int i = 0; i < nfields; i++)
@@ -467,7 +467,7 @@ pqTraceOutputT(FILE *f, const char *message, int *cursor, bool regress)
{
int nfields;
- fprintf(f, "RowDescription\t");
+ fputs("RowDescription\t", f);
nfields = pqTraceOutputInt16(f, message, cursor);
for (int i = 0; i < nfields; i++)
@@ -486,7 +486,7 @@ pqTraceOutputT(FILE *f, const char *message, int *cursor, bool regress)
static void
pqTraceOutputv(FILE *f, const char *message, int *cursor)
{
- fprintf(f, "NegotiateProtocolVersion\t");
+ fputs("NegotiateProtocolVersion\t", f);
pqTraceOutputInt32(f, message, cursor, false);
pqTraceOutputInt32(f, message, cursor, false);
}
@@ -497,7 +497,7 @@ pqTraceOutputV(FILE *f, const char *message, int *cursor)
{
int len;
- fprintf(f, "FunctionCallResponse\t");
+ fputs("FunctionCallResponse\t", f);
len = pqTraceOutputInt32(f, message, cursor, false);
if (len != -1)
pqTraceOutputNchar(f, len, message, cursor);
@@ -507,7 +507,7 @@ pqTraceOutputV(FILE *f, const char *message, int *cursor)
static void
pqTraceOutputW(FILE *f, const char *message, int *cursor, int length)
{
- fprintf(f, "CopyBothResponse\t");
+ fputs("CopyBothResponse\t", f);
pqTraceOutputByte1(f, message, cursor);
while (length > *cursor)
@@ -518,7 +518,7 @@ pqTraceOutputW(FILE *f, const char *message, int *cursor, int length)
static void
pqTraceOutputZ(FILE *f, const char *message, int *cursor)
{
- fprintf(f, "ReadyForQuery\t");
+ fputs("ReadyForQuery\t", f);
pqTraceOutputByte1(f, message, cursor);
}
@@ -563,15 +563,15 @@ pqTraceOutputMessage(PGconn *conn, const char *message, bool toServer)
switch (id)
{
case '1':
- fprintf(conn->Pfdebug, "ParseComplete");
+ fputs("ParseComplete", conn->Pfdebug);
/* No message content */
break;
case '2':
- fprintf(conn->Pfdebug, "BindComplete");
+ fputs("BindComplete", conn->Pfdebug);
/* No message content */
break;
case '3':
- fprintf(conn->Pfdebug, "CloseComplete");
+ fputs("CloseComplete", conn->Pfdebug);
/* No message content */
break;
case 'A': /* Notification Response */
@@ -581,7 +581,7 @@ pqTraceOutputMessage(PGconn *conn, const char *message, bool toServer)
pqTraceOutputB(conn->Pfdebug, message, &logCursor);
break;
case 'c':
- fprintf(conn->Pfdebug, "CopyDone");
+ fputs("CopyDone", conn->Pfdebug);
/* No message content */
break;
case 'C': /* Close(F) or Command Complete(B) */
@@ -610,17 +610,17 @@ pqTraceOutputMessage(PGconn *conn, const char *message, bool toServer)
if (!toServer)
pqTraceOutputH(conn->Pfdebug, message, &logCursor);
else
- fprintf(conn->Pfdebug, "Flush"); /* no message content */
+ fputs("Flush", conn->Pfdebug); /* no message content */
break;
case 'I':
- fprintf(conn->Pfdebug, "EmptyQueryResponse");
+ fputs("EmptyQueryResponse", conn->Pfdebug);
/* No message content */
break;
case 'K': /* secret key data from the backend */
pqTraceOutputK(conn->Pfdebug, message, &logCursor, regress);
break;
case 'n':
- fprintf(conn->Pfdebug, "NoData");
+ fputs("NoData", conn->Pfdebug);
/* No message content */
break;
case 'N':
@@ -637,14 +637,14 @@ pqTraceOutputMessage(PGconn *conn, const char *message, bool toServer)
pqTraceOutputR(conn->Pfdebug, message, &logCursor);
break;
case 's':
- fprintf(conn->Pfdebug, "PortalSuspended");
+ fputs("PortalSuspended", conn->Pfdebug);
/* No message content */
break;
case 'S': /* Parameter Status(B) or Sync(F) */
if (!toServer)
pqTraceOutputS(conn->Pfdebug, message, &logCursor);
else
- fprintf(conn->Pfdebug, "Sync"); /* no message content */
+ fputs("Sync", conn->Pfdebug); /* no message content */
break;
case 't': /* Parameter Description */
pqTraceOutputt(conn->Pfdebug, message, &logCursor, regress);
@@ -662,7 +662,7 @@ pqTraceOutputMessage(PGconn *conn, const char *message, bool toServer)
pqTraceOutputW(conn->Pfdebug, message, &logCursor, length);
break;
case 'X':
- fprintf(conn->Pfdebug, "Terminate");
+ fputs("Terminate", conn->Pfdebug);
/* No message content */
break;
case 'Z': /* Ready For Query */
diff --git a/src/interfaces/libpq/test/libpq_testclient.c b/src/interfaces/libpq/test/libpq_testclient.c
index d945bacf1b..1766ea3158 100644
--- a/src/interfaces/libpq/test/libpq_testclient.c
+++ b/src/interfaces/libpq/test/libpq_testclient.c
@@ -18,7 +18,7 @@ print_ssl_library()
const char *lib = PQsslAttribute(NULL, "library");
if (!lib)
- fprintf(stderr, "SSL is not enabled\n");
+ fputs("SSL is not enabled\n", stderr);
else
printf("%s\n", lib);
}
diff --git a/src/interfaces/libpq/test/libpq_uri_regress.c b/src/interfaces/libpq/test/libpq_uri_regress.c
index 60469002fd..52f4afedc1 100644
--- a/src/interfaces/libpq/test/libpq_uri_regress.c
+++ b/src/interfaces/libpq/test/libpq_uri_regress.c
@@ -40,7 +40,7 @@ main(int argc, char *argv[])
defs = PQconndefaults();
if (defs == NULL)
{
- fprintf(stderr, "libpq_uri_regress: cannot fetch default options\n");
+ fputs("libpq_uri_regress: cannot fetch default options\n", stderr);
return 1;
}
diff --git a/src/port/path.c b/src/port/path.c
index 05fe812f75..7f3d61966b 100644
--- a/src/port/path.c
+++ b/src/port/path.c
@@ -750,7 +750,7 @@ make_absolute_path(const char *path)
(errcode(ERRCODE_OUT_OF_MEMORY),
errmsg("out of memory")));
#else
- fprintf(stderr, _("out of memory\n"));
+ fputs(_("out of memory\n"), stderr);
return NULL;
#endif
}
@@ -788,7 +788,7 @@ make_absolute_path(const char *path)
(errcode(ERRCODE_OUT_OF_MEMORY),
errmsg("out of memory")));
#else
- fprintf(stderr, _("out of memory\n"));
+ fputs(_("out of memory\n"), stderr);
return NULL;
#endif
}
@@ -805,7 +805,7 @@ make_absolute_path(const char *path)
(errcode(ERRCODE_OUT_OF_MEMORY),
errmsg("out of memory")));
#else
- fprintf(stderr, _("out of memory\n"));
+ fputs(_("out of memory\n"), stderr);
return NULL;
#endif
}
diff --git a/src/test/examples/testlibpq.c b/src/test/examples/testlibpq.c
index 0372781eaf..99d3c2578a 100644
--- a/src/test/examples/testlibpq.c
+++ b/src/test/examples/testlibpq.c
@@ -43,7 +43,7 @@ main(int argc, char **argv)
/* Check to see that the backend connection was successfully made */
if (PQstatus(conn) != CONNECTION_OK)
{
- fprintf(stderr, "%s", PQerrorMessage(conn));
+ fputs(PQerrorMessage(conn), stderr);
exit_nicely(conn);
}
diff --git a/src/test/examples/testlibpq2.c b/src/test/examples/testlibpq2.c
index 05ce8c3f13..24d9687bc2 100644
--- a/src/test/examples/testlibpq2.c
+++ b/src/test/examples/testlibpq2.c
@@ -70,7 +70,7 @@ main(int argc, char **argv)
/* Check to see that the backend connection was successfully made */
if (PQstatus(conn) != CONNECTION_OK)
{
- fprintf(stderr, "%s", PQerrorMessage(conn));
+ fputs(PQerrorMessage(conn), stderr);
exit_nicely(conn);
}
@@ -141,7 +141,7 @@ main(int argc, char **argv)
}
}
- fprintf(stderr, "Done.\n");
+ fputs("Done.\n", stderr);
/* close the connection to the database and cleanup */
PQfinish(conn);
diff --git a/src/test/examples/testlibpq3.c b/src/test/examples/testlibpq3.c
index 4f7b791388..f2d5797d53 100644
--- a/src/test/examples/testlibpq3.c
+++ b/src/test/examples/testlibpq3.c
@@ -138,7 +138,7 @@ main(int argc, char **argv)
/* Check to see that the backend connection was successfully made */
if (PQstatus(conn) != CONNECTION_OK)
{
- fprintf(stderr, "%s", PQerrorMessage(conn));
+ fputs(PQerrorMessage(conn), stderr);
exit_nicely(conn);
}
diff --git a/src/test/examples/testlibpq4.c b/src/test/examples/testlibpq4.c
index da4443072d..14d14b5d7c 100644
--- a/src/test/examples/testlibpq4.c
+++ b/src/test/examples/testlibpq4.c
@@ -29,7 +29,7 @@ check_prepare_conn(PGconn *conn, const char *dbName)
/* check to see that the backend connection was successfully made */
if (PQstatus(conn) != CONNECTION_OK)
{
- fprintf(stderr, "%s", PQerrorMessage(conn));
+ fputs(PQerrorMessage(conn), stderr);
exit(1);
}
diff --git a/src/test/examples/testlo.c b/src/test/examples/testlo.c
index 1b08b6cac5..1761d36788 100644
--- a/src/test/examples/testlo.c
+++ b/src/test/examples/testlo.c
@@ -54,7 +54,7 @@ importFile(PGconn *conn, char *filename)
*/
lobjId = lo_creat(conn, INV_READ | INV_WRITE);
if (lobjId == 0)
- fprintf(stderr, "cannot create large object");
+ fputs("cannot create large object", stderr);
lobj_fd = lo_open(conn, lobjId, INV_WRITE);
@@ -100,7 +100,7 @@ pickout(PGconn *conn, Oid lobjId, int start, int len)
break; /* no more data? */
}
free(buf);
- fprintf(stderr, "\n");
+ fputc('\n', stderr);
lo_close(conn, lobj_fd);
}
@@ -131,12 +131,12 @@ overwrite(PGconn *conn, Oid lobjId, int start, int len)
nwritten += nbytes;
if (nbytes <= 0)
{
- fprintf(stderr, "\nWRITE FAILED!\n");
+ fputs("\nWRITE FAILED!\n", stderr);
break;
}
}
free(buf);
- fprintf(stderr, "\n");
+ fputc('\n', stderr);
lo_close(conn, lobj_fd);
}
@@ -225,7 +225,7 @@ main(int argc, char **argv)
/* check to see that the backend connection was successfully made */
if (PQstatus(conn) != CONNECTION_OK)
{
- fprintf(stderr, "%s", PQerrorMessage(conn));
+ fputs(PQerrorMessage(conn), stderr);
exit_nicely(conn);
}
diff --git a/src/test/examples/testlo64.c b/src/test/examples/testlo64.c
index 981e29ad78..550b1a7dd3 100644
--- a/src/test/examples/testlo64.c
+++ b/src/test/examples/testlo64.c
@@ -54,7 +54,7 @@ importFile(PGconn *conn, char *filename)
*/
lobjId = lo_creat(conn, INV_READ | INV_WRITE);
if (lobjId == 0)
- fprintf(stderr, "cannot create large object");
+ fputs("cannot create large object", stderr);
lobj_fd = lo_open(conn, lobjId, INV_WRITE);
@@ -105,7 +105,7 @@ pickout(PGconn *conn, Oid lobjId, pg_int64 start, int len)
break; /* no more data? */
}
free(buf);
- fprintf(stderr, "\n");
+ fputc('\n', stderr);
lo_close(conn, lobj_fd);
}
@@ -138,12 +138,12 @@ overwrite(PGconn *conn, Oid lobjId, pg_int64 start, int len)
nwritten += nbytes;
if (nbytes <= 0)
{
- fprintf(stderr, "\nWRITE FAILED!\n");
+ fputs("\nWRITE FAILED!\n", stderr);
break;
}
}
free(buf);
- fprintf(stderr, "\n");
+ fputc('\n', stderr);
lo_close(conn, lobj_fd);
}
@@ -249,7 +249,7 @@ main(int argc, char **argv)
/* check to see that the backend connection was successfully made */
if (PQstatus(conn) != CONNECTION_OK)
{
- fprintf(stderr, "%s", PQerrorMessage(conn));
+ fputs(PQerrorMessage(conn), stderr);
exit_nicely(conn);
}
diff --git a/src/test/isolation/isolation_main.c b/src/test/isolation/isolation_main.c
index 31a0e6b709..37251647ad 100644
--- a/src/test/isolation/isolation_main.c
+++ b/src/test/isolation/isolation_main.c
@@ -45,7 +45,7 @@ isolation_start_test(const char *testname,
if (find_other_exec(saved_argv0, "isolationtester",
PG_ISOLATION_VERSIONSTR, isolation_exec) != 0)
{
- fprintf(stderr, _("could not find proper isolationtester binary\n"));
+ fputs(_("could not find proper isolationtester binary\n"), stderr);
exit(2);
}
looked_up_isolation_exec = true;
@@ -81,7 +81,7 @@ isolation_start_test(const char *testname,
"%s ", launcher);
if (offset >= sizeof(psql_cmd))
{
- fprintf(stderr, _("command too long\n"));
+ fputs(_("command too long\n"), stderr);
exit(2);
}
}
@@ -94,7 +94,7 @@ isolation_start_test(const char *testname,
outfile);
if (offset >= sizeof(psql_cmd))
{
- fprintf(stderr, _("command too long\n"));
+ fputs(_("command too long\n"), stderr);
exit(2);
}
diff --git a/src/test/modules/libpq_pipeline/libpq_pipeline.c b/src/test/modules/libpq_pipeline/libpq_pipeline.c
index 0407c4a8c0..57aaf36102 100644
--- a/src/test/modules/libpq_pipeline/libpq_pipeline.c
+++ b/src/test/modules/libpq_pipeline/libpq_pipeline.c
@@ -80,7 +80,7 @@ pg_fatal_impl(int line, const char *fmt,...)
vfprintf(stderr, fmt, args);
va_end(args);
Assert(fmt[strlen(fmt) - 1] != '\n');
- fprintf(stderr, "\n");
+ fputc('\n', stderr);
exit(1);
}
@@ -89,7 +89,7 @@ test_disallowed_in_pipeline(PGconn *conn)
{
PGresult *res = NULL;
- fprintf(stderr, "test error cases... ");
+ fputs("test error cases... ", stderr);
if (PQisnonblocking(conn))
pg_fatal("Expected blocking connection mode");
@@ -129,7 +129,7 @@ test_disallowed_in_pipeline(PGconn *conn)
pg_fatal("PQexec should succeed after exiting pipeline mode but failed with: %s",
PQerrorMessage(conn));
- fprintf(stderr, "ok\n");
+ fputs("ok\n", stderr);
}
static void
@@ -139,7 +139,7 @@ test_multi_pipelines(PGconn *conn)
const char *dummy_params[1] = {"1"};
Oid dummy_param_oids[1] = {INT4OID};
- fprintf(stderr, "multi pipeline... ");
+ fputs("multi pipeline... ", stderr);
/*
* Queue up a couple of small pipelines and process each without returning
@@ -227,7 +227,7 @@ test_multi_pipelines(PGconn *conn)
if (PQpipelineStatus(conn) != PQ_PIPELINE_OFF)
pg_fatal("exiting pipeline mode didn't seem to work");
- fprintf(stderr, "ok\n");
+ fputs("ok\n", stderr);
}
/*
@@ -241,7 +241,7 @@ test_nosync(PGconn *conn)
int results = 0;
int sock = PQsocket(conn);
- fprintf(stderr, "nosync... ");
+ fputs("nosync... ", stderr);
if (sock < 0)
pg_fatal("invalid socket");
@@ -314,7 +314,7 @@ test_nosync(PGconn *conn)
pg_fatal("got unexpected %s\n", PQresStatus(PQresultStatus(res)));
}
- fprintf(stderr, "ok\n");
+ fputs("ok\n", stderr);
}
/*
@@ -336,7 +336,7 @@ test_pipeline_abort(PGconn *conn)
int gotrows;
bool goterror;
- fprintf(stderr, "aborted pipeline... ");
+ fputs("aborted pipeline... ", stderr);
res = PQexec(conn, drop_table_sql);
if (PQresultStatus(res) != PGRES_COMMAND_OK)
@@ -524,7 +524,7 @@ test_pipeline_abort(PGconn *conn)
if (PQresultStatus(res) != PGRES_PIPELINE_SYNC)
pg_fatal("Unexpected result code %s from pipeline sync",
PQresStatus(PQresultStatus(res)));
- fprintf(stderr, "ok\n");
+ fputs("ok\n", stderr);
/* Test single-row mode with an error partways */
if (PQsendQuery(conn, "SELECT 1.0/g FROM generate_series(3, -1, -1) g") != 1)
@@ -611,7 +611,7 @@ test_pipeline_abort(PGconn *conn)
PQclear(res);
- fprintf(stderr, "ok\n");
+ fputs("ok\n", stderr);
}
/* State machine enum for test_pipelined_insert */
@@ -850,7 +850,7 @@ test_pipelined_insert(PGconn *conn, int n_rows)
{
if (PQpipelineSync(conn) == 1)
{
- fprintf(stdout, "pipeline sync sent\n");
+ fputs("pipeline sync sent\n", stdout);
send_step++;
}
else
@@ -870,7 +870,7 @@ test_pipelined_insert(PGconn *conn, int n_rows)
if (PQsetnonblocking(conn, 0) != 0)
pg_fatal("failed to clear nonblocking mode: %s", PQerrorMessage(conn));
- fprintf(stderr, "ok\n");
+ fputs("ok\n", stderr);
}
static void
@@ -881,7 +881,7 @@ test_prepared(PGconn *conn)
Oid expected_oids[4];
Oid typ;
- fprintf(stderr, "prepared... ");
+ fputs("prepared... ", stderr);
if (PQenterPipelineMode(conn) != 1)
pg_fatal("failed to enter pipeline mode: %s", PQerrorMessage(conn));
@@ -963,7 +963,7 @@ test_prepared(PGconn *conn)
if (PQexitPipelineMode(conn) != 1)
pg_fatal("could not exit pipeline mode: %s", PQerrorMessage(conn));
- fprintf(stderr, "ok\n");
+ fputs("ok\n", stderr);
}
/* Notice processor: print notices, and count how many we got */
@@ -983,7 +983,7 @@ test_pipeline_idle(PGconn *conn)
PGresult *res;
int n_notices = 0;
- fprintf(stderr, "\npipeline idle...\n");
+ fputs("\npipeline idle...\n", stderr);
PQsetNoticeProcessor(conn, notice_processor, &n_notices);
@@ -1033,7 +1033,7 @@ test_pipeline_idle(PGconn *conn)
*/
if (n_notices > 0)
pg_fatal("got %d notice(s)", n_notices);
- fprintf(stderr, "ok - 1\n");
+ fputs("ok - 1\n", stderr);
/*
* Verify that we can send a query using simple query protocol after one
@@ -1071,7 +1071,7 @@ test_pipeline_idle(PGconn *conn)
pg_fatal("did not receive terminating NULL");
if (n_notices > 0)
pg_fatal("got %d notice(s)", n_notices);
- fprintf(stderr, "ok - 2\n");
+ fputs("ok - 2\n", fputs);
/*
* Case 2: exiting pipeline mode is not OK if a second command is sent.
@@ -1149,7 +1149,7 @@ test_pipeline_idle(PGconn *conn)
if (n_notices > 0)
pg_fatal("got %d notice(s)", n_notices);
- fprintf(stderr, "ok - 3\n");
+ fputs("ok - 3\n", stderr);
/* Have a WARNING in the middle of a resultset */
if (PQenterPipelineMode(conn) != 1)
@@ -1164,7 +1164,7 @@ test_pipeline_idle(PGconn *conn)
pg_fatal("unexpected result code %s", PQresStatus(PQresultStatus(res)));
if (PQexitPipelineMode(conn) != 1)
pg_fatal("failed to exit pipeline mode: %s", PQerrorMessage(conn));
- fprintf(stderr, "ok - 4\n");
+ fputs("ok - 4\n", stderr);
}
static void
@@ -1174,7 +1174,7 @@ test_simple_pipeline(PGconn *conn)
const char *dummy_params[1] = {"1"};
Oid dummy_param_oids[1] = {INT4OID};
- fprintf(stderr, "simple pipeline... ");
+ fputs("simple pipeline... ", stderr);
/*
* Enter pipeline mode and dispatch a set of operations, which we'll then
@@ -1251,7 +1251,7 @@ test_simple_pipeline(PGconn *conn)
if (PQpipelineStatus(conn) != PQ_PIPELINE_OFF)
pg_fatal("Exiting pipeline mode didn't seem to work");
- fprintf(stderr, "ok\n");
+ fputs("ok\n", stderr);
}
static void
@@ -1308,7 +1308,7 @@ test_singlerowmode(PGconn *conn)
if (est == PGRES_PIPELINE_SYNC)
{
- fprintf(stderr, "end of pipeline reached\n");
+ fputs("end of pipeline reached\n", stderr);
pipeline_ended = true;
PQclear(res);
if (i != 3)
@@ -1360,7 +1360,7 @@ test_singlerowmode(PGconn *conn)
if (PQexitPipelineMode(conn) != 1)
pg_fatal("failed to end pipeline mode: %s", PQerrorMessage(conn));
- fprintf(stderr, "ok\n");
+ fputs("ok\n", stderr);
}
/*
@@ -1507,7 +1507,7 @@ test_transaction(PGconn *conn)
pg_fatal("did not get expected tuple");
PQclear(res);
- fprintf(stderr, "ok\n");
+ fputs("ok\n", stderr);
}
/*
@@ -1536,7 +1536,7 @@ test_uniqviol(PGconn *conn)
fd_set in_fds;
fd_set out_fds;
- fprintf(stderr, "uniqviol ...");
+ fputs("uniqviol ...", stderr);
PQsetnonblocking(conn, 1);
@@ -1631,12 +1631,12 @@ test_uniqviol(PGconn *conn)
if (switched >= 1 && !error_sent && ctr % socketful >= socketful / 2)
{
sprintf(paramValue0, "%d", numsent / 2);
- fprintf(stderr, "E");
+ fputc('E', stderr);
error_sent = true;
}
else
{
- fprintf(stderr, ".");
+ fputc('.', stderr);
sprintf(paramValue0, "%d", ctr++);
}
@@ -1650,7 +1650,7 @@ test_uniqviol(PGconn *conn)
if (PQsendFlushRequest(conn) != 1)
pg_fatal("failed to send flush request");
write_done = true;
- fprintf(stderr, "\ndone writing\n");
+ fputs("\ndone writing\n", stderr);
PQflush(conn);
break;
}
@@ -1663,7 +1663,7 @@ test_uniqviol(PGconn *conn)
{
if (socketful == 0)
socketful = numsent;
- fprintf(stderr, "\nswitch to reading\n");
+ fputs("\nswitch to reading\n", stderr);
switched++;
break;
}
@@ -1674,7 +1674,7 @@ test_uniqviol(PGconn *conn)
if (!got_error)
pg_fatal("did not get expected error");
- fprintf(stderr, "ok\n");
+ fputs("ok\n", stderr);
}
/*
diff --git a/src/test/regress/pg_regress.c b/src/test/regress/pg_regress.c
index 7290948eee..13157724c3 100644
--- a/src/test/regress/pg_regress.c
+++ b/src/test/regress/pg_regress.c
@@ -245,10 +245,10 @@ status(const char *fmt,...)
static void
status_end(void)
{
- fprintf(stdout, "\n");
+ fputc('\n', stdout);
fflush(stdout);
if (logfile)
- fprintf(logfile, "\n");
+ fputc('\n', logfile);
}
/*
diff --git a/src/test/regress/pg_regress_main.c b/src/test/regress/pg_regress_main.c
index a4b354c9e6..594d0ce570 100644
--- a/src/test/regress/pg_regress_main.c
+++ b/src/test/regress/pg_regress_main.c
@@ -68,7 +68,7 @@ psql_start_test(const char *testname,
"%s ", launcher);
if (offset >= sizeof(psql_cmd))
{
- fprintf(stderr, _("command too long\n"));
+ fputs(_("command too long\n"), stderr);
exit(2);
}
}
@@ -87,7 +87,7 @@ psql_start_test(const char *testname,
outfile);
if (offset >= sizeof(psql_cmd))
{
- fprintf(stderr, _("command too long\n"));
+ fputs(_("command too long\n"), stderr);
exit(2);
}
diff --git a/src/timezone/zic.c b/src/timezone/zic.c
index 0ea6ead2db..ec432b6a23 100644
--- a/src/timezone/zic.c
+++ b/src/timezone/zic.c
@@ -495,7 +495,7 @@ verror(const char *string, va_list args)
if (rfilename != NULL)
fprintf(stderr, _(" (rule from \"%s\", line %d)"),
rfilename, rlinenum);
- fprintf(stderr, "\n");
+ fputc('\n', stderr);
}
static void
@@ -514,7 +514,7 @@ warning(const char *string,...)
{
va_list args;
- fprintf(stderr, _("warning: "));
+ fputs(_("warning: "), stderr);
va_start(args, string);
verror(string, args);
va_end(args);
Ranier Vilela <ranier.vf@gmail.com> writes:
Em sex., 9 de set. de 2022 às 13:20, Nathan Bossart <
nathandbossart@gmail.com> escreveu:I agree with David [0]. But if you can demonstrate a performance gain,
perhaps it's worth considering a subset of these changes in hot paths.
head:
Time: 418,210 ms
Time: 419,588 ms
Time: 424,713 ms
fprintf patch:
Time: 416,919 ms
Time: 416,246 ms
Time: 416,237 ms
That is most certainly not enough gain to justify a large amount
of code churn. In fact, given that this is probably pretty
platform-dependent and you've checked only one platform, I don't
think I'd call this a sufficient case for even a one-line change.
regards, tom lane
Em sex., 9 de set. de 2022 às 18:53, Tom Lane <tgl@sss.pgh.pa.us> escreveu:
Ranier Vilela <ranier.vf@gmail.com> writes:
Em sex., 9 de set. de 2022 às 13:20, Nathan Bossart <
nathandbossart@gmail.com> escreveu:I agree with David [0]. But if you can demonstrate a performance gain,
perhaps it's worth considering a subset of these changes in hot paths.head:
Time: 418,210 ms
Time: 419,588 ms
Time: 424,713 msfprintf patch:
Time: 416,919 ms
Time: 416,246 ms
Time: 416,237 msThat is most certainly not enough gain to justify a large amount
of code churn. In fact, given that this is probably pretty
platform-dependent and you've checked only one platform, I don't
think I'd call this a sufficient case for even a one-line change.
Of course, base these changes not on performance gain, but on correct style
and increased security.
But out-vote is out-vote, case closed.
Regards,
Ranier Vilela
On Fri, Sep 09, 2022 at 05:53:54PM -0400, Tom Lane wrote:
Ranier Vilela <ranier.vf@gmail.com> writes:
Em sex., 9 de set. de 2022 �s 13:20, Nathan Bossart <
nathandbossart@gmail.com> escreveu:I agree with David [0]. But if you can demonstrate a performance gain,
perhaps it's worth considering a subset of these changes in hot paths.head:
Time: 418,210 ms
Time: 419,588 ms
Time: 424,713 msfprintf patch:
Time: 416,919 ms
Time: 416,246 ms
Time: 416,237 msThat is most certainly not enough gain to justify a large amount
of code churn. In fact, given that this is probably pretty
platform-dependent and you've checked only one platform, I don't
think I'd call this a sufficient case for even a one-line change.
Agreed.
--
Nathan Bossart
Amazon Web Services: https://aws.amazon.com