aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--contrib/timeout_watchdog_w32.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/contrib/timeout_watchdog_w32.c b/contrib/timeout_watchdog_w32.c
index 46a615755..e136c03a8 100644
--- a/contrib/timeout_watchdog_w32.c
+++ b/contrib/timeout_watchdog_w32.c
@@ -37,7 +37,6 @@ main (int argc, char *argv[])
37 wchar_t **wargv; 37 wchar_t **wargv;
38 wchar_t *arg; 38 wchar_t *arg;
39 unsigned int cmdlen; 39 unsigned int cmdlen;
40 wchar_t *idx;
41 STARTUPINFOW start; 40 STARTUPINFOW start;
42 PROCESS_INFORMATION proc; 41 PROCESS_INFORMATION proc;
43 42
@@ -50,6 +49,7 @@ main (int argc, char *argv[])
50 wchar_t *wcmd; 49 wchar_t *wcmd;
51 int wargc; 50 int wargc;
52 int timeout = 0; 51 int timeout = 0;
52 ssize_t wrote;
53 53
54 HANDLE job; 54 HANDLE job;
55 55
@@ -125,22 +125,25 @@ main (int argc, char *argv[])
125 while (NULL != (arg = wargv[i++])) 125 while (NULL != (arg = wargv[i++]))
126 cmdlen += wcslen (arg) + 4; 126 cmdlen += wcslen (arg) + 4;
127 127
128 wcmd = idx = malloc (sizeof (wchar_t) * (cmdlen + 1)); 128 wcmd = malloc (sizeof (wchar_t) * (cmdlen + 1));
129 wrote = 0;
129 i = 2; 130 i = 2;
130 while (NULL != (arg = wargv[i++])) 131 while (NULL != (arg = wargv[i++]))
131 { 132 {
132 /* This is to escape trailing slash */ 133 /* This is to escape trailing slash */
133 wchar_t arg_lastchar = arg[wcslen (arg) - 1]; 134 wchar_t arg_lastchar = arg[wcslen (arg) - 1];
134 if (idx == wcmd) 135 if (wrote == 0)
135 idx += swprintf (idx, L"\"%s%s\" ", wpath, 136 {
137 wrote += _snwprintf (&wcmd[wrote], cmdlen + 1 - wrote, L"\"%s%s\" ", wpath,
136 arg_lastchar == L'\\' ? L"\\" : L""); 138 arg_lastchar == L'\\' ? L"\\" : L"");
139 }
137 else 140 else
138 { 141 {
139 if (wcschr (arg, L' ') != NULL) 142 if (wcschr (arg, L' ') != NULL)
140 idx += swprintf (idx, L"\"%s%s\"%s", arg, 143 wrote += swprintf (&wcmd[wrote], cmdlen + 1 - wrote, L"\"%s%s\"%s", arg,
141 arg_lastchar == L'\\' ? L"\\" : L"", i == wargc ? L"" : L" "); 144 arg_lastchar == L'\\' ? L"\\" : L"", i == wargc ? L"" : L" ");
142 else 145 else
143 idx += swprintf (idx, L"%s%s%s", arg, 146 wrote += swprintf (&wcmd[wrote], cmdlen + 1 - wrote, L"%s%s%s", arg,
144 arg_lastchar == L'\\' ? L"\\" : L"", i == wargc ? L"" : L" "); 147 arg_lastchar == L'\\' ? L"\\" : L"", i == wargc ? L"" : L" ");
145 } 148 }
146 } 149 }