path: root/quote.c
diff options
authorJunio C Hamano <>2007-06-24 22:11:24 (GMT)
committerJunio C Hamano <>2007-06-24 22:11:42 (GMT)
commit9378c16135100fb65ad575cd35074af166de1cab (patch)
treef50e7250e04919ccdc3cdd3e194fe52b5d502514 /quote.c
parentaeb59328453cd4f438345ea79ff04c96bccbbbb8 (diff)
Add core.quotepath configuration variable.
We always quote "unusual" byte values in a pathname using C-string style, to make it safer for parsing scripts that do not handle NUL separated records well (or just too lazy to bother). The absolute minimum bytes that need to be quoted for this purpose are TAB, LF (and other control characters), double quote and backslash. However, we have also always quoted the bytes in high 8-bit range; this was partly because we were lazy and partly because we were being cautious. This introduces an internal "quote_path_fully" variable, and core.quotepath configuration variable to control it. When set to false, it does not quote bytes in high 8-bit range anymore but passes them intact. The variable defaults to "true" to retain the traditional behaviour for now. Signed-off-by: Junio C Hamano <>
Diffstat (limited to 'quote.c')
1 files changed, 3 insertions, 2 deletions
diff --git a/quote.c b/quote.c
index aa44009..d88bf75 100644
--- a/quote.c
+++ b/quote.c
@@ -188,7 +188,8 @@ static int quote_c_style_counted(const char *name, int namelen,
#define EMITQ() EMIT('\\')
const char *sp;
- int ch, count = 0, needquote = 0;
+ unsigned char ch;
+ int count = 0, needquote = 0;
if (!no_dq)
@@ -197,7 +198,7 @@ static int quote_c_style_counted(const char *name, int namelen,
if (!ch)
if ((ch < ' ') || (ch == '"') || (ch == '\\') ||
- (ch >= 0177)) {
+ (quote_path_fully && (ch >= 0177))) {
needquote = 1;
switch (ch) {
case '\a': EMITQ(); ch = 'a'; break;