Age Owner Branch data TLA Line data Source code
1 : : /*-------------------------------------------------------------------------
2 : : *
3 : : * quotes.c
4 : : * string quoting and escaping functions
5 : : *
6 : : * Portions Copyright (c) 1996-2025, 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 *
4627 magnus@hagander.net 33 :CBC 692 : escape_single_quotes_ascii(const char *src)
34 : : {
35 : 692 : int len = strlen(src),
36 : : i,
37 : : j;
38 : 692 : char *result = malloc(len * 2 + 1);
39 : :
40 [ - + ]: 692 : if (!result)
4627 magnus@hagander.net 41 :UBC 0 : return NULL;
42 : :
4627 magnus@hagander.net 43 [ + + ]:CBC 17104 : for (i = 0, j = 0; i < len; i++)
44 : : {
45 [ + + - + ]: 16412 : if (SQL_STR_DOUBLE(src[i], true))
46 : 48 : result[j++] = src[i];
47 : 16412 : result[j++] = src[i];
48 : : }
49 : 692 : result[j] = '\0';
50 : 692 : return result;
51 : : }
|