Retire escapeConnectionParameter().
authorNoah Misch <noah@leadboat.com>
Mon, 22 Aug 2016 02:05:57 +0000 (22:05 -0400)
committerNoah Misch <noah@leadboat.com>
Mon, 22 Aug 2016 02:05:57 +0000 (22:05 -0400)
It is redundant with appendConnStrVal(), which became an extern function
in commit 41f18f021a0882eccbeca62e2ed4b66c6b96e9c9.  This changes the
handling of out-of-memory and of certain inputs for which quoting is
optional, but pg_basebackup has no need for unusual treatment thereof.

src/bin/pg_basebackup/Makefile
src/bin/pg_basebackup/pg_basebackup.c

index 585467205b66c6233cdf70ee3c4d0e356367ee5c..a23a83eb9b5795bba79c4886b4f22aa71abd1e47 100644 (file)
@@ -17,6 +17,7 @@ top_builddir = ../../..
 include $(top_builddir)/src/Makefile.global
 
 override CPPFLAGS := -I$(libpq_srcdir) $(CPPFLAGS)
+LDFLAGS += -L$(top_builddir)/src/fe_utils -lpgfeutils -lpq
 
 OBJS=receivelog.o streamutil.o $(WIN32RES)
 
index ed41db8e6e6ccdb7b06e1020c7dcf1bf9808b13a..351a42068fd0e128bfea04d5d1221bbb5c77dda2 100644 (file)
@@ -26,6 +26,7 @@
 #endif
 
 #include "common/string.h"
+#include "fe_utils/string_utils.h"
 #include "getopt_long.h"
 #include "libpq-fe.h"
 #include "pqexpbuffer.h"
@@ -1392,69 +1393,6 @@ ReceiveAndUnpackTarFile(PGconn *conn, PGresult *res, int rownum)
        WriteRecoveryConf();
 }
 
-/*
- * Escape a parameter value so that it can be used as part of a libpq
- * connection string, e.g. in:
- *
- * application_name=<value>
- *
- * The returned string is malloc'd. Return NULL on out-of-memory.
- */
-static char *
-escapeConnectionParameter(const char *src)
-{
-   bool        need_quotes = false;
-   bool        need_escaping = false;
-   const char *p;
-   char       *dstbuf;
-   char       *dst;
-
-   /*
-    * First check if quoting is needed. Any quote (') or backslash (\)
-    * characters need to be escaped. Parameters are separated by whitespace,
-    * so any string containing whitespace characters need to be quoted. An
-    * empty string is represented by ''.
-    */
-   if (strchr(src, '\'') != NULL || strchr(src, '\\') != NULL)
-       need_escaping = true;
-
-   for (p = src; *p; p++)
-   {
-       if (isspace((unsigned char) *p))
-       {
-           need_quotes = true;
-           break;
-       }
-   }
-
-   if (*src == '\0')
-       return pg_strdup("''");
-
-   if (!need_quotes && !need_escaping)
-       return pg_strdup(src);  /* no quoting or escaping needed */
-
-   /*
-    * Allocate a buffer large enough for the worst case that all the source
-    * characters need to be escaped, plus quotes.
-    */
-   dstbuf = pg_malloc(strlen(src) * 2 + 2 + 1);
-
-   dst = dstbuf;
-   if (need_quotes)
-       *(dst++) = '\'';
-   for (; *src; src++)
-   {
-       if (*src == '\'' || *src == '\\')
-           *(dst++) = '\\';
-       *(dst++) = *src;
-   }
-   if (need_quotes)
-       *(dst++) = '\'';
-   *dst = '\0';
-
-   return dstbuf;
-}
-
 /*
  * Escape a string so that it can be used as a value in a key-value pair
  * a configuration file.
@@ -1523,9 +1461,8 @@ GenerateRecoveryConf(PGconn *conn)
         * Write "keyword=value" pieces, the value string is escaped and/or
         * quoted if necessary.
         */
-       escaped = escapeConnectionParameter(option->val);
-       appendPQExpBuffer(&conninfo_buf, "%s=%s", option->keyword, escaped);
-       free(escaped);
+       appendPQExpBuffer(&conninfo_buf, "%s=", option->keyword);
+       appendConnStrVal(&conninfo_buf, option->val);
    }
 
    /*