summaryrefslogtreecommitdiff
path: root/src/port/quotes.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/port/quotes.c')
-rw-r--r--src/port/quotes.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/port/quotes.c b/src/port/quotes.c
new file mode 100644
index 00000000000..2ce60905a0b
--- /dev/null
+++ b/src/port/quotes.c
@@ -0,0 +1,36 @@
+#include "c.h"
+
+/*
+ * Escape (by doubling) any single quotes or backslashes in given string
+ *
+ * Note: this is used to process postgresql.conf entries and to quote
+ * string literals in pg_basebackup for creating recovery.conf.
+ * Since postgresql.conf strings are defined to treat backslashes as escapes,
+ * we have to double backslashes here.
+ *
+ * Since this function is only used for parsing or creating configuration
+ * files, we do not care about encoding considerations.
+ *
+ * Returns a malloced() string that it's the responsibility of the caller
+ * to free.
+ */
+char *
+escape_single_quotes_ascii(const char *src)
+{
+ int len = strlen(src),
+ i,
+ j;
+ char *result = malloc(len * 2 + 1);
+
+ if (!result)
+ return NULL;
+
+ for (i = 0, j = 0; i < len; i++)
+ {
+ if (SQL_STR_DOUBLE(src[i], true))
+ result[j++] = src[i];
+ result[j++] = src[i];
+ }
+ result[j] = '\0';
+ return result;
+}