char *config_StringEscape( const char *psz_string ) { char *psz_return; char *psz_dst; int i_escape; if( !psz_string ) return NULL; i_escape = 0; for( const char *p = psz_string; *p; p++ ) { if( IsEscapeNeeded( *p ) ) i_escape++; } psz_return = psz_dst = malloc( strlen( psz_string ) + i_escape + 1 ); for( const char *p = psz_string; *p; p++ ) { if( IsEscapeNeeded( *p ) ) *psz_dst++ = '\\'; *psz_dst++ = *p; } *psz_dst = '\0'; return psz_return; }
char *config_StringEscape( const char *str ) { size_t length = 0; if( str == NULL ) return NULL; for( const char *p = str; *p; p++ ) length += IsEscapeNeeded( *p ) ? 2 : 1; char *ret = xmalloc( length + 1 ), *dst = ret; for( const char *p = str; *p; p++ ) { if( IsEscapeNeeded( *p ) ) *dst++ = '\\'; *dst++ = *p; } *dst = '\0';; return ret; }
static bool IsEscape( const char *psz ) { if( !psz ) return false; return psz[0] == '\\' && IsEscapeNeeded( psz[1] ); }