1 /*------------------------------------------------------------------------- 2 * 3 * quotes.c 4 * string quoting and escaping functions 5 * 6 * Portions Copyright (c) 1996-2018, PostgreSQL Global Development Group 7 * Portions Copyright (c) 1994, Regents of the University of California 8 * 9 * 10 * IDENTIFICATION 11 * src/port/quotes.c 12 * 13 *------------------------------------------------------------------------- 14 */ 15 16 #include "c.h" 17 18 /* 19 * Escape (by doubling) any single quotes or backslashes in given string 20 * 21 * Note: this is used to process postgresql.conf entries and to quote 22 * string literals in pg_basebackup for creating recovery.conf. 23 * Since postgresql.conf strings are defined to treat backslashes as escapes, 24 * we have to double backslashes here. 25 * 26 * Since this function is only used for parsing or creating configuration 27 * files, we do not care about encoding considerations. 28 * 29 * Returns a malloced() string that it's the responsibility of the caller 30 * to free. 31 */ 32 char * escape_single_quotes_ascii(const char * src)33escape_single_quotes_ascii(const char *src) 34 { 35 int len = strlen(src), 36 i, 37 j; 38 char *result = malloc(len * 2 + 1); 39 40 if (!result) 41 return NULL; 42 43 for (i = 0, j = 0; i < len; i++) 44 { 45 if (SQL_STR_DOUBLE(src[i], true)) 46 result[j++] = src[i]; 47 result[j++] = src[i]; 48 } 49 result[j] = '\0'; 50 return result; 51 } 52