msvcrt: NULL terminate program arguments list in __getmainargs.
This commit is contained in:
parent
04fb8a913c
commit
6e485f13c0
|
@ -424,7 +424,7 @@ static int build_expanded_argv(int *argc, char **argv)
|
||||||
|
|
||||||
len = strlen(data.cFileName)+1;
|
len = strlen(data.cFileName)+1;
|
||||||
if(argv) {
|
if(argv) {
|
||||||
argv[args_no] = (char*)(argv+*argc)+size;
|
argv[args_no] = (char*)(argv+*argc+1)+size;
|
||||||
memcpy(argv[args_no], __wine_main_argv[i], path_len*sizeof(char));
|
memcpy(argv[args_no], __wine_main_argv[i], path_len*sizeof(char));
|
||||||
memcpy(argv[args_no]+path_len, data.cFileName, len*sizeof(char));
|
memcpy(argv[args_no]+path_len, data.cFileName, len*sizeof(char));
|
||||||
}
|
}
|
||||||
|
@ -437,7 +437,7 @@ static int build_expanded_argv(int *argc, char **argv)
|
||||||
if(!len) {
|
if(!len) {
|
||||||
len = strlen(__wine_main_argv[i])+1;
|
len = strlen(__wine_main_argv[i])+1;
|
||||||
if(argv) {
|
if(argv) {
|
||||||
argv[args_no] = (char*)(argv+*argc)+size;
|
argv[args_no] = (char*)(argv+*argc+1)+size;
|
||||||
memcpy(argv[args_no], __wine_main_argv[i], len*sizeof(char));
|
memcpy(argv[args_no], __wine_main_argv[i], len*sizeof(char));
|
||||||
}
|
}
|
||||||
args_no++;
|
args_no++;
|
||||||
|
@ -445,7 +445,9 @@ static int build_expanded_argv(int *argc, char **argv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
size += args_no*sizeof(char*);
|
if(argv)
|
||||||
|
argv[args_no] = NULL;
|
||||||
|
size += (args_no+1)*sizeof(char*);
|
||||||
*argc = args_no;
|
*argc = args_no;
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
@ -519,7 +521,7 @@ static int build_expanded_wargv(int *argc, MSVCRT_wchar_t **argv)
|
||||||
|
|
||||||
len = strlenW(data.cFileName)+1;
|
len = strlenW(data.cFileName)+1;
|
||||||
if(argv) {
|
if(argv) {
|
||||||
argv[args_no] = (MSVCRT_wchar_t*)(argv+*argc)+size;
|
argv[args_no] = (MSVCRT_wchar_t*)(argv+*argc+1)+size;
|
||||||
memcpy(argv[args_no], __wine_main_wargv[i], path_len*sizeof(MSVCRT_wchar_t));
|
memcpy(argv[args_no], __wine_main_wargv[i], path_len*sizeof(MSVCRT_wchar_t));
|
||||||
memcpy(argv[args_no]+path_len, data.cFileName, len*sizeof(MSVCRT_wchar_t));
|
memcpy(argv[args_no]+path_len, data.cFileName, len*sizeof(MSVCRT_wchar_t));
|
||||||
}
|
}
|
||||||
|
@ -532,7 +534,7 @@ static int build_expanded_wargv(int *argc, MSVCRT_wchar_t **argv)
|
||||||
if(!len) {
|
if(!len) {
|
||||||
len = strlenW(__wine_main_wargv[i])+1;
|
len = strlenW(__wine_main_wargv[i])+1;
|
||||||
if(argv) {
|
if(argv) {
|
||||||
argv[args_no] = (MSVCRT_wchar_t*)(argv+*argc)+size;
|
argv[args_no] = (MSVCRT_wchar_t*)(argv+*argc+1)+size;
|
||||||
memcpy(argv[args_no], __wine_main_wargv[i], len*sizeof(MSVCRT_wchar_t));
|
memcpy(argv[args_no], __wine_main_wargv[i], len*sizeof(MSVCRT_wchar_t));
|
||||||
}
|
}
|
||||||
args_no++;
|
args_no++;
|
||||||
|
@ -540,8 +542,10 @@ static int build_expanded_wargv(int *argc, MSVCRT_wchar_t **argv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(argv)
|
||||||
|
argv[args_no] = NULL;
|
||||||
size *= sizeof(MSVCRT_wchar_t);
|
size *= sizeof(MSVCRT_wchar_t);
|
||||||
size += args_no*sizeof(MSVCRT_wchar_t*);
|
size += (args_no+1)*sizeof(MSVCRT_wchar_t*);
|
||||||
*argc = args_no;
|
*argc = args_no;
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
|
|
@ -146,6 +146,7 @@ static void test___getmainargs(void)
|
||||||
ok(!strcmp(argv[2], filepath), "argv[2] = %s\n", argv[2]);
|
ok(!strcmp(argv[2], filepath), "argv[2] = %s\n", argv[2]);
|
||||||
sprintf(filepath, "%swine_test/*", tmppath);
|
sprintf(filepath, "%swine_test/*", tmppath);
|
||||||
ok(!strcmp(argv[3], filepath), "argv[3] = %s\n", argv[3]);
|
ok(!strcmp(argv[3], filepath), "argv[3] = %s\n", argv[3]);
|
||||||
|
ok(!argv[4], "argv[4] != NULL\n");
|
||||||
|
|
||||||
if(p___p___argc && p___p___argv) {
|
if(p___p___argc && p___p___argv) {
|
||||||
new_argc = *p___p___argc();
|
new_argc = *p___p___argc();
|
||||||
|
@ -172,6 +173,7 @@ static void test___getmainargs(void)
|
||||||
sprintf(filepath, "%swine_test/test", tmppath);
|
sprintf(filepath, "%swine_test/test", tmppath);
|
||||||
ok(!strcmp(argv[3], filepath), "argv[3] = %s\n", argv[3]);
|
ok(!strcmp(argv[3], filepath), "argv[3] = %s\n", argv[3]);
|
||||||
}
|
}
|
||||||
|
ok(!argv[5], "argv[5] != NULL\n");
|
||||||
|
|
||||||
if(p___p___argc && p___p___argv) {
|
if(p___p___argc && p___p___argv) {
|
||||||
new_argc = *p___p___argc();
|
new_argc = *p___p___argc();
|
||||||
|
|
Loading…
Reference in New Issue