summaryrefslogtreecommitdiffstats
path: root/quote.c
diff options
context:
space:
mode:
authorChristian Couder <chriscool@tuxfamily.org>2006-08-31 08:42:11 +0200
committerJunio C Hamano <junkio@cox.net>2006-08-31 14:16:38 -0700
commit7cf67205ca68a157c6ffdb4e5a4ff231217c0871 (patch)
treef0b8a3170cf5abcc5e448e8d1c58ccae7bfc940c /quote.c
parent2c6d22df9f8a975c88fc9a93c4db8bb0bd116b74 (diff)
downloadgit-7cf67205ca68a157c6ffdb4e5a4ff231217c0871.tar.gz
git-7cf67205ca68a157c6ffdb4e5a4ff231217c0871.tar.xz
Trace into open fd and refactor tracing code.
Now if GIT_TRACE is set to an integer value greater than 1 and lower than 10, we interpret this as an open fd value and we trace into it. Note that this behavior is not compatible with the previous one. We also trace whole messages using one write(2) call to make sure messages from processes do net get mixed up in the middle. It's now possible to run the tests like this: GIT_TRACE=9 make test 9>/var/tmp/trace.log Signed-off-by: Christian Couder <chriscool@tuxfamily.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'quote.c')
-rw-r--r--quote.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/quote.c b/quote.c
index e220dcc28..a38786c17 100644
--- a/quote.c
+++ b/quote.c
@@ -74,6 +74,38 @@ char *sq_quote(const char *src)
return buf;
}
+char *sq_quote_argv(const char** argv, int count)
+{
+ char *buf, *to;
+ int i;
+ size_t len = 0;
+
+ /* Count argv if needed. */
+ if (count < 0) {
+ for (count = 0; argv[count]; count++)
+ ; /* just counting */
+ }
+
+ /* Special case: no argv. */
+ if (!count)
+ return xcalloc(1,1);
+
+ /* Get destination buffer length. */
+ for (i = 0; i < count; i++)
+ len += sq_quote_buf(NULL, 0, argv[i]) + 1;
+
+ /* Alloc destination buffer. */
+ to = buf = xmalloc(len + 1);
+
+ /* Copy into destination buffer. */
+ for (i = 0; i < count; ++i) {
+ *to++ = ' ';
+ to += sq_quote_buf(to, len, argv[i]);
+ }
+
+ return buf;
+}
+
char *sq_dequote(char *arg)
{
char *dst = arg;