| #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; | |
| } | |