diff options
-rw-r--r-- | contrib/timeout_watchdog_w32.c | 15 |
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 | } |