> > > I think that you could use another pattern where you init the > PQExpBufferData structure instead of create it, so that only the string is > malloced.
In v26, I have the functions return PQExpBuffer. The two calling functions then free it, which should solve any leak. > > > I think that you should use appendPQExpBufferChar and Str instead of >>> relying on the format variant which is probably expensive. Something >>> like: >>> >>> if (num_options > 0) >>> append...Char(buf, ' '); >>> append...Str(buf, ...); >>> >> >> All flavors of appendPQExpBuffer*() I can find have a const *char format >> string, so no way to append a naked string. If you know differently, I'm >> listening. Not fixed. >> > > These prototypes are from "pqexpbuffer.h", and do not seem to rely on a > format: > > Here's an addendum that does that. I can combine them in v27, but figured this was quicker.
From 2fa083eb0115278f817a2d1d0439a47951a9c48b Mon Sep 17 00:00:00 2001 From: Corey Huinker <corey.huin...@moat.com> Date: Mon, 27 Mar 2017 10:07:36 -0400 Subject: [PATCH 2/2] simpler append --- src/bin/psql/command.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index aa9dad4..a6168df 100644 --- a/src/bin/psql/command.c +++ b/src/bin/psql/command.c @@ -218,10 +218,9 @@ gather_boolean_expression(PsqlScanState scan_state, bool expansion, bool warn) while ((value = psql_scan_slash_option(scan_state, slash_opt, NULL, false))) { /* add a space in between subsequent tokens */ - if (num_options == 0) - appendPQExpBuffer(exp_buf, "%s", value); - else - appendPQExpBuffer(exp_buf, " %s", value); + if (num_options > 0) + appendPQExpBufferChar(exp_buf, ' '); + appendPQExpBufferStr(exp_buf, value); num_options++; } -- 2.7.4
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers