summaryrefslogtreecommitdiff
path: root/quote.c
diff options
context:
space:
mode:
authorShawn O. Pearce <spearce@spearce.org>2007-01-28 07:39:13 (GMT)
committerJunio C Hamano <junkio@cox.net>2007-01-28 21:00:26 (GMT)
commit5558e55c06a1e897f3064f0c8a343d5c9858f6b2 (patch)
tree7bc79784574ecdba84ff23a67ea7263f88f86240 /quote.c
parentcace16fdcb5d1a3518f92e04c65e78f06b0cd051 (diff)
downloadgit-5558e55c06a1e897f3064f0c8a343d5c9858f6b2.zip
git-5558e55c06a1e897f3064f0c8a343d5c9858f6b2.tar.gz
git-5558e55c06a1e897f3064f0c8a343d5c9858f6b2.tar.bz2
Teach for-each-ref about a little language called Tcl.
Love it or hate it, some people actually still program in Tcl. Some of those programs are meant for interfacing with Git. Programs such as gitk and git-gui. It may be useful to have Tcl-safe output available from for-each-ref, just like shell, Perl and Python already enjoy. Thanks to Sergey Vlasov for pointing out the horrible flaws in the first and second version of this patch, and steering me in the right direction for Tcl value quoting. Signed-off-by: Shawn O. Pearce <spearce@spearce.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'quote.c')
-rw-r--r--quote.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/quote.c b/quote.c
index a418a0f..fb9e4ca 100644
--- a/quote.c
+++ b/quote.c
@@ -387,3 +387,37 @@ void python_quote_print(FILE *stream, const char *src)
}
fputc(sq, stream);
}
+
+void tcl_quote_print(FILE *stream, const char *src)
+{
+ char c;
+
+ fputc('"', stream);
+ while ((c = *src++)) {
+ switch (c) {
+ case '[': case ']':
+ case '{': case '}':
+ case '$': case '\\': case '"':
+ fputc('\\', stream);
+ default:
+ fputc(c, stream);
+ break;
+ case '\f':
+ fputs("\\f", stream);
+ break;
+ case '\r':
+ fputs("\\r", stream);
+ break;
+ case '\n':
+ fputs("\\n", stream);
+ break;
+ case '\t':
+ fputs("\\t", stream);
+ break;
+ case '\v':
+ fputs("\\v", stream);
+ break;
+ }
+ }
+ fputc('"', stream);
+}