+/* Shell quoting
+ *
+ * NOTE: The following is a slightly modified copy of the git project's shell
+ * quoting routines found in the quote.c file.
+ *
+ * Help to copy the thing properly quoted for the shell safety. any single
+ * quote is replaced with '\'', any exclamation point is replaced with '\!',
+ * and the whole thing is enclosed in a
+ *
+ * E.g.
+ * original sq_quote result
+ * name ==> name ==> 'name'
+ * a b ==> a b ==> 'a b'
+ * a'b ==> a'\''b ==> 'a'\''b'
+ * a!b ==> a'\!'b ==> 'a'\!'b'
+ */
+
+static size_t
+sq_quote(char buf[SIZEOF_CMD], size_t bufsize, const char *src)
+{
+ char c;
+
+#define BUFPUT(x) ( (bufsize < SIZEOF_CMD) && (buf[bufsize++] = (x)) )
+
+ BUFPUT('\'');
+ while ((c = *src++)) {
+ if (c == '\'' || c == '!') {
+ BUFPUT('\'');
+ BUFPUT('\\');
+ BUFPUT(c);
+ BUFPUT('\'');
+ } else {
+ BUFPUT(c);
+ }
+ }
+ BUFPUT('\'');
+
+ return bufsize;
+}
+