LCOV - code coverage report
Current view: top level - src/port - quotes.c (source / functions) Hit Total Coverage
Test: PostgreSQL 17devel Lines: 10 11 90.9 %
Date: 2024-04-24 16:11:43 Functions: 1 1 100.0 %
Legend: Lines: hit not hit

          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        1138 : escape_single_quotes_ascii(const char *src)
      34             : {
      35        1138 :     int         len = strlen(src),
      36             :                 i,
      37             :                 j;
      38        1138 :     char       *result = malloc(len * 2 + 1);
      39             : 
      40        1138 :     if (!result)
      41           0 :         return NULL;
      42             : 
      43       24636 :     for (i = 0, j = 0; i < len; i++)
      44             :     {
      45       23498 :         if (SQL_STR_DOUBLE(src[i], true))
      46          88 :             result[j++] = src[i];
      47       23498 :         result[j++] = src[i];
      48             :     }
      49        1138 :     result[j] = '\0';
      50        1138 :     return result;
      51             : }

Generated by: LCOV version 1.14