Index: rostests/apitests/crt/__getmainargs.c =================================================================== --- rostests/apitests/crt/__getmainargs.c (revision 0) +++ rostests/apitests/crt/__getmainargs.c (working copy) @@ -0,0 +1,121 @@ +/* + * PROJECT: ReactOS api tests + * LICENSE: GPLv2+ - See COPYING in the top level directory + * PURPOSE: Test for __getmainargs + * PROGRAMMER: Yaroslav Veremenko + */ + +#include +#include +#include + +void +ok_args(char** argv, const char* arg1, const char* arg2, const char* arg3) +{ + ok_str(argv[3], arg1); + ok_str(argv[4], arg2); + ok_str(argv[5], arg3); +} + +void +CreateSubProcess(const char* name, const char* commandLine) +{ + char cmdline[3 * MAX_PATH]; + STARTUPINFOA startup; + PROCESS_INFORMATION proc; + BOOL result; + + sprintf(cmdline, "%s __getmainargs %s", name, commandLine); + memset(&startup, 0, sizeof(startup)); + startup.cb = sizeof(startup); + result = CreateProcessA(NULL, cmdline, NULL, NULL, TRUE, CREATE_DEFAULT_ERROR_MODE | NORMAL_PRIORITY_CLASS, NULL, NULL, &startup, &proc); + ok(result, "CreateProcessA failed"); + winetest_wait_child_process(proc.hProcess); +} + +void +test___getmainargs_process(int argc, char** argv) +{ + char test; + + ok_str(argv[1], "__getmainargs"); + ok_int(argc, 6); + if(argc != 6) + { + return; + } + + test = argv[2][0]; + switch (test) + { + case '1': + ok_args(argv, "a b c", "d", "e"); + break; + case '2': + ok_args(argv, "ab\"c", "\\", "d"); + break; + case '3': + ok_args(argv, "a\\\\\\b", "de fg", "h"); + break; + case '4': + ok_args(argv, "a\\\"b", "c", "d"); + break; + case '5': + ok_args(argv, "a\\\\b c", "d", "e"); + break; + case '6': + ok_args(argv, "a", "b", ""); + break; + case '7': + ok_args(argv, "a", "", "b"); + break; + case '8': + ok_args(argv, "a", "b\"", "c"); + break; + case '9': + ok_args(argv, "a", "b\"", "c"); + break; + case 'A': + ok_args(argv, "a", " b\\ \"", "c"); + break; + case 'B': + ok_args(argv, "a", "b\\ \" c", "d"); + break; + case 'C': + ok_args(argv, "a", "b\\ \" c", "\" d"); + break; + } +} + +void +test___getmainargs_init(char* name) +{ + CreateSubProcess(name, "1 \"a b c\" d e"); + CreateSubProcess(name, "2 \"ab\\\"c\" \"\\\\\" d"); + CreateSubProcess(name, "3 a\\\\\\b d\"e f\"g h"); + CreateSubProcess(name, "4 a\\\\\\\"b c d"); + CreateSubProcess(name, "5 a\\\\\\\\\"b c\" d e"); + CreateSubProcess(name, "6 a b \"\""); + CreateSubProcess(name, "7 a \"\" b"); + CreateSubProcess(name, "8 a \"b\"\" c"); + CreateSubProcess(name, "9 a \"b\\\"\" c"); + CreateSubProcess(name, "A a \" b\\ \"\" c"); + CreateSubProcess(name, "B a \"b\\ \"\"\" c\" d"); + CreateSubProcess(name, "C a \"b\\ \"\"\" \"c \"\"\"\" d"); +} + +START_TEST(__getmainargs) +{ + int argc; + char** argv; + + argc = winetest_get_mainargs(&argv); + if (argc > 2) + { + test___getmainargs_process(argc, argv); + } + else + { + test___getmainargs_init(argv[0]); + } +} Property changes on: rostests/apitests/crt/__getmainargs.c ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Index: rostests/apitests/crt/msvcrt_crt_apitest.cmake =================================================================== --- rostests/apitests/crt/msvcrt_crt_apitest.cmake (revision 72035) +++ rostests/apitests/crt/msvcrt_crt_apitest.cmake (working copy) @@ -66,7 +66,7 @@ # __doserrno.c # __fpecode.c # __get_app_type.c -# __getmainargs.c + __getmainargs.c # __initenv # __iob_func.c # __isascii.c Index: rostests/apitests/crt/testlist.c =================================================================== --- rostests/apitests/crt/testlist.c (revision 72035) +++ rostests/apitests/crt/testlist.c (working copy) @@ -25,6 +25,7 @@ extern void func_wcsnlen(void); extern void func_wcstombs(void); extern void func_wcstoul(void); +extern void func___getmainargs(void); extern void func_static_construct(void); extern void func_static_init(void); @@ -50,6 +51,7 @@ #endif #if defined(TEST_STATIC_CRT) #elif defined(TEST_MSVCRT) + { "__getmainargs", func___getmainargs }, { "_vscprintf", func__vscprintf }, { "_vscwprintf", func__vscwprintf },