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