#include "cache.h" | |
#include "quote.h" | |
/* Help to copy the thing properly quoted for the shell safety. | |
* any single quote is replaced with '\'', and the caller is | |
* expected to enclose the result within a single quote pair. | |
* | |
* E.g. | |
* original sq_quote result | |
* name ==> name ==> 'name' | |
* a b ==> a b ==> 'a b' | |
* a'b ==> a'\''b ==> 'a'\''b' | |
*/ | |
char *sq_quote(const char *src) | |
{ | |
static char *buf = NULL; | |
int cnt, c; | |
const char *cp; | |
char *bp; | |
/* count bytes needed to store the quoted string. */ | |
for (cnt = 3, cp = src; *cp; cnt++, cp++) | |
if (*cp == '\'') | |
cnt += 3; | |
buf = xmalloc(cnt); | |
bp = buf; | |
*bp++ = '\''; | |
while ((c = *src++)) { | |
if (c != '\'') | |
*bp++ = c; | |
else { | |
bp = strcpy(bp, "'\\''"); | |
bp += 4; | |
} | |
} | |
*bp++ = '\''; | |
*bp = 0; | |
return buf; | |
} | |