Line data Source code
1 : /*------------------------------------------------------------------------- 2 : * 3 : * quotes.c 4 : * string quoting and escaping functions 5 : * 6 : * Portions Copyright (c) 1996-2024, 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 writing the recovery configuration. 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 * 33 1286 : escape_single_quotes_ascii(const char *src) 34 : { 35 1286 : int len = strlen(src), 36 : i, 37 : j; 38 1286 : char *result = malloc(len * 2 + 1); 39 : 40 1286 : if (!result) 41 0 : return NULL; 42 : 43 26770 : for (i = 0, j = 0; i < len; i++) 44 : { 45 25484 : if (SQL_STR_DOUBLE(src[i], true)) 46 88 : result[j++] = src[i]; 47 25484 : result[j++] = src[i]; 48 : } 49 1286 : result[j] = '\0'; 50 1286 : return result; 51 : }