cmd/tests: Convert line endings to DOS style at runtime before running batch test file.

This commit is contained in:
Frédéric Delanoy 2011-07-16 10:14:50 +02:00 committed by Alexandre Julliard
parent 171e832839
commit 1cb7378e94
1 changed files with 29 additions and 12 deletions

View File

@ -25,22 +25,39 @@
static char workdir[MAX_PATH]; static char workdir[MAX_PATH];
static DWORD workdir_len; static DWORD workdir_len;
/* Substitute escaped spaces with real ones */ /* Convert to DOS line endings, and substitute escaped spaces with real ones */
static const char* replace_escaped_spaces(const char *data, DWORD size, DWORD *new_size) static const char* convert_input_data(const char *data, DWORD size, DWORD *new_size)
{ {
static const char escaped_space[] = {'@','s','p','a','c','e','@','\0'}; static const char escaped_space[] = {'@','s','p','a','c','e','@'};
DWORD i, eol_count = 0;
char *ptr, *new_data; char *ptr, *new_data;
new_data = ptr = HeapAlloc(GetProcessHeap(), 0, size + 1); for (i = 0; i < size; i++)
memcpy( new_data, data, size ); if (data[i] == '\n') eol_count++;
new_data[size] = 0;
while ((ptr = strstr(ptr, escaped_space))) ptr = new_data = HeapAlloc(GetProcessHeap(), 0, size + eol_count + 1);
{
char *end = ptr + sizeof(escaped_space) - 1; for (i = 0; i < size; i++) {
switch (data[i]) {
case '\n':
*ptr++ = '\r';
*ptr++ = '\n';
break;
case '@':
if (data + i + sizeof(escaped_space) - 1 < data + size
&& !memcmp(data + i, escaped_space, sizeof(escaped_space))) {
*ptr++ = ' '; *ptr++ = ' ';
memmove( ptr, end, strlen(end) + 1 ); i += sizeof(escaped_space) - 1;
} else {
*ptr++ = data[i];
} }
break;
default:
*ptr++ = data[i];
}
}
*ptr = '\0';
*new_size = strlen(new_data); *new_size = strlen(new_data);
return new_data; return new_data;
} }
@ -233,7 +250,7 @@ static void run_test(const char *cmd_data, DWORD cmd_size, const char *exp_data,
const char *out_data, *actual_cmd_data; const char *out_data, *actual_cmd_data;
DWORD out_size, actual_cmd_size; DWORD out_size, actual_cmd_size;
actual_cmd_data = replace_escaped_spaces(cmd_data, cmd_size, &actual_cmd_size); actual_cmd_data = convert_input_data(cmd_data, cmd_size, &actual_cmd_size);
if(!actual_cmd_size || !actual_cmd_data) if(!actual_cmd_size || !actual_cmd_data)
goto cleanup; goto cleanup;