add script to install ccache
[msysgit.git] / src / ccache-win32 / patches / 0001-escape-double-quotes-in-command-line.patch
blobc4245493e6f1ac6bff033e5f0cc348285c2275bb
1 From b37f1f229dcbd009a0c5cdbd969bc3e79b064f18 Mon Sep 17 00:00:00 2001
2 From: Erik Faye-Lund <kusmabite@gmail.com>
3 Date: Wed, 14 Oct 2009 16:59:43 +0200
4 Subject: [PATCH] escape double quotes in command line
6 Original patch:
7 http://code.google.com/p/ccache-win32/issues/detail?id=4
8 ---
9 execute.c | 48 +++++++++++++++++++++++++++++++++++++++++++-----
10 1 files changed, 43 insertions(+), 5 deletions(-)
12 diff --git a/execute.c b/execute.c
13 index 7d876b3..4059f4b 100644
14 --- a/execute.c
15 +++ b/execute.c
16 @@ -19,13 +19,29 @@
17 #include "ccache.h"
19 #ifdef _WIN32
20 -static char *argvtos(char **argv)
21 +char *argvtos(char **argv)
23 - int i, len;
24 + int i, j, len;
25 + int bs_count = 0;
26 char *ptr, *str;
28 for (i = 0, len = 0; argv[i]; i++) {
29 - len += strlen(argv[i]) + 3;
30 + len += 1;
31 + for (j = 0; argv[i][j]; j++) {
32 + char c = argv[i][j];
33 + if (c == '\\') {
34 + bs_count++;
35 + } else if (c == '"') {
36 + len += 2 * bs_count + 2;
37 + bs_count = 0;
38 + } else {
39 + len += bs_count + 1;
40 + bs_count = 0;
41 + }
42 + }
43 + len += bs_count * 2;
44 + bs_count = 0;
45 + len += 2;
48 str = ptr = (char *)malloc(len + 1);
49 @@ -35,8 +51,30 @@ static char *argvtos(char **argv)
50 for (i = 0; argv[i]; i++) {
51 len = strlen(argv[i]);
52 *ptr++ = '"';
53 - memcpy(ptr, argv[i], len);
54 - ptr += len;
56 + for (j = 0; argv[i][j]; j++) {
57 + char c = argv[i][j];
58 + if (c == '\\') {
59 + bs_count++;
60 + } else if (c == '"') {
61 + for (; bs_count > 0; bs_count--) {
62 + *ptr++ = '\\';
63 + *ptr++ = '\\';
64 + }
65 + *ptr++ = '\\';
66 + *ptr++ = '"';
67 + } else {
68 + for (; bs_count > 0; bs_count--) {
69 + *ptr++ = '\\';
70 + }
71 + *ptr++ = c;
72 + }
73 + }
74 + for (; bs_count > 0; bs_count--) {
75 + *ptr++ = '\\';
76 + *ptr++ = '\\';
77 + }
79 *ptr++ = '"';
80 *ptr++ = ' ';
82 --
83 1.6.4.msysgit.0