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