ReactOS 0.4.16-dev-2110-ge3521eb
__getmainargs.c File Reference
#include <apitest.h>
#include <stdio.h>
#include <string.h>
Include dependency graph for __getmainargs.c:

Go to the source code of this file.

Macros

#define winetest_ok_str(x, y)    winetest_ok(strcmp(x, y) == 0, "Wrong string. Expected '%s', got '%s'\n", y, x)
 
#define winetest_ok_wstr(x, y)    winetest_ok(wcscmp(x, y) == 0, "Wrong string. Expected '%s', got '%s'\n", wine_dbgstr_w(y), wine_dbgstr_w(x))
 
#define ok_argsA   (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : ok_argsA_imp
 
#define ok_argsW   (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : ok_argsW_imp
 

Functions

const char ** __p__acmdln (void)
 
void __getmainargs (int *argc, char ***argv, char ***env, int expand_wildcards, int *new_mode)
 
const wchar_t ** __p__wcmdln (void)
 
void __wgetmainargs (int *argc, wchar_t ***wargv, wchar_t ***wenv, int expand_wildcards, int *new_mode)
 
void ok_argsA_imp (const char *input_args, const char *arg1, const char *arg2, const char *arg3)
 
void ok_argsW_imp (const wchar_t *input_args, const wchar_t *arg1, const wchar_t *arg2, const wchar_t *arg3)
 
 START_TEST (__getmainargs)
 

Macro Definition Documentation

◆ ok_argsA

#define ok_argsA   (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : ok_argsA_imp

Definition at line 23 of file __getmainargs.c.

◆ ok_argsW

#define ok_argsW   (winetest_set_location(__FILE__, __LINE__), 0) ? (void)0 : ok_argsW_imp

Definition at line 24 of file __getmainargs.c.

◆ winetest_ok_str

#define winetest_ok_str (   x,
  y 
)     winetest_ok(strcmp(x, y) == 0, "Wrong string. Expected '%s', got '%s'\n", y, x)

Definition at line 19 of file __getmainargs.c.

◆ winetest_ok_wstr

#define winetest_ok_wstr (   x,
  y 
)     winetest_ok(wcscmp(x, y) == 0, "Wrong string. Expected '%s', got '%s'\n", wine_dbgstr_w(y), wine_dbgstr_w(x))

Definition at line 21 of file __getmainargs.c.

Function Documentation

◆ __getmainargs()

void __getmainargs ( int argc,
char ***  argv,
char ***  env,
int  expand_wildcards,
int new_mode 
)

Definition at line 579 of file data.c.

581{
582 TRACE("(%p,%p,%p,%d,%p).\n", argc, argv, envp, expand_wildcards, new_mode);
583
584 if (expand_wildcards) {
588 if (wargv_expand) {
590
593 }else {
594 expand_wildcards = 0;
595 }
596 }
597 if (!expand_wildcards) {
598#ifdef __REACTOS__
599 if ((MSVCRT___argv == NULL) || (MSVCRT___argc == 0))
600 {
601 MSVCRT___argv = cmdline_to_argvA(MSVCRT__acmdln, &MSVCRT___argc);
602 }
603#else
606#endif
607 }
608
611 *envp = MSVCRT__environ;
612
613 if (new_mode)
614 _set_new_mode( *new_mode );
615 return 0;
616}
static int argc
Definition: ServiceArgs.c:12
#define NULL
Definition: types.h:112
#define GetProcessHeap()
Definition: compat.h:736
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
static char ** build_argv(WCHAR **wargv)
Definition: data.c:63
static int initial_argc
Definition: data.c:30
static int build_expanded_wargv(int *argc, wchar_t **argv)
Definition: data.c:471
static int wargc_expand
Definition: data.c:32
char ** MSVCRT___argv
Definition: data.c:50
static WCHAR ** initial_wargv
Definition: data.c:29
int MSVCRT___argc
Definition: data.c:31
char ** MSVCRT__environ
Definition: data.c:55
char * MSVCRT__acmdln
Definition: data.c:53
static wchar_t ** wargv_expand
Definition: data.c:52
int CDECL _set_new_mode(int mode)
Definition: heap.c:227
#define argv
Definition: mplay32.c:18
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by ok_argsA_imp(), and test___getmainargs().

◆ __p__acmdln()

const char ** __p__acmdln ( void  )

Definition at line 319 of file data.c.

319{ return &MSVCRT__acmdln; }

Referenced by ok_argsA_imp().

◆ __p__wcmdln()

const wchar_t ** __p__wcmdln ( void  )

Definition at line 324 of file data.c.

324{ return &MSVCRT__wcmdln; }
wchar_t * MSVCRT__wcmdln
Definition: data.c:54

Referenced by ok_argsW_imp().

◆ __wgetmainargs()

void __wgetmainargs ( int argc,
wchar_t ***  wargv,
wchar_t ***  wenv,
int  expand_wildcards,
int new_mode 
)

Definition at line 536 of file data.c.

538{
539 TRACE("(%p,%p,%p,%d,%p).\n", argc, wargv, wenvp, expand_wildcards, new_mode);
540
541 if (expand_wildcards) {
545 if (wargv_expand) {
547
550 }else {
551 expand_wildcards = 0;
552 }
553 }
554 if (!expand_wildcards) {
555#ifdef __REACTOS__
556 if ((MSVCRT___wargv == NULL) || (MSVCRT___argc == 0))
557 {
559 }
560#else
563#endif
564 }
565
567
569 *wargv = MSVCRT___wargv;
570 *wenvp = MSVCRT__wenviron;
571 if (new_mode)
572 _set_new_mode( *new_mode );
573 return 0;
574}
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
wchar_t ** MSVCRT___wargv
Definition: data.c:51
static WCHAR ** cmdline_to_argv(const WCHAR *src, int *ret_argc)
Definition: data.c:85
wchar_t ** MSVCRT__wenviron
Definition: data.c:56
int env_init(BOOL unicode, BOOL modif)
Definition: environ.c:30

Referenced by ok_argsW_imp(), test__wenviron(), and wmainCRTStartup().

◆ ok_argsA_imp()

void ok_argsA_imp ( const char input_args,
const char arg1,
const char arg2,
const char arg3 
)

Definition at line 28 of file __getmainargs.c.

29{
30 int argc = 0, mode = 0;
31 int expect_count = arg3 == NULL ? (arg2 == NULL ? 2 : 3) : 4;
32 char** argv, **env;
33
34 /* Remove cached argv, setup our input as program argument. */
35 *__p___argv() = NULL;
36 *__p__acmdln() = input_args;
37
38 /* Process the commandline stored in _acmdln */
39 __getmainargs(&argc, &argv, &env, 0, &mode);
40
41 winetest_ok(argc == expect_count, "Wrong value for argc, expected: %d, got: %d\n", expect_count, argc);
42 if(argc != expect_count)
43 return;
44
45 winetest_ok_str(argv[0], "test.exe");
47 if (expect_count > 2)
48 {
50 if (expect_count > 3)
52 }
53}
#define winetest_ok_str(x, y)
Definition: __getmainargs.c:19
void __getmainargs(int *argc, char ***argv, char ***env, int expand_wildcards, int *new_mode)
Definition: data.c:579
const char ** __p__acmdln(void)
Definition: data.c:319
static LPCWSTR LPCWSTR LPCWSTR env
Definition: db.cpp:171
char ***CDECL __p___argv(void)
Definition: data.c:329
GLuint GLuint GLuint GLuint arg1
Definition: glext.h:9513
GLuint GLuint GLuint GLuint GLuint GLuint GLuint GLuint GLuint GLuint arg3
Definition: glext.h:9515
GLuint GLuint GLuint GLuint GLuint GLuint GLuint arg2
Definition: glext.h:9514
GLenum mode
Definition: glext.h:6217
void __cdecl winetest_ok(int condition, const char *msg,...) __WINE_PRINTF_ATTR(2

◆ ok_argsW_imp()

void ok_argsW_imp ( const wchar_t input_args,
const wchar_t arg1,
const wchar_t arg2,
const wchar_t arg3 
)

Definition at line 56 of file __getmainargs.c.

57{
58 int argc = 0, mode = 0;
59 int expect_count = arg3 == NULL ? (arg2 == NULL ? 2 : 3) : 4;
60 wchar_t** argv, **env;
61
62 /* Remove cached wargv, setup our input as program argument. */
63 *__p___wargv() = NULL;
64 *__p__wcmdln() = input_args;
65
66 /* Process the commandline stored in _wcmdln */
67 __wgetmainargs(&argc, &argv, &env, 0, &mode);
68
69 winetest_ok(argc == expect_count, "Wrong value for argc, expected: %d, got: %d\n", expect_count, argc);
70 if(argc != expect_count)
71 return;
72
73 winetest_ok_wstr(argv[0], L"test.exe");
75 if (expect_count > 2)
76 {
78 if (expect_count > 3)
80 }
81}
#define winetest_ok_wstr(x, y)
Definition: __getmainargs.c:21
void __wgetmainargs(int *argc, wchar_t ***wargv, wchar_t ***wenv, int expand_wildcards, int *new_mode)
Definition: data.c:536
const wchar_t ** __p__wcmdln(void)
Definition: data.c:324
wchar_t ***CDECL __p___wargv(void)
Definition: data.c:334
#define L(x)
Definition: resources.c:13

◆ START_TEST()

START_TEST ( __getmainargs  )

Definition at line 83 of file __getmainargs.c.

84{
85 ok_argsA("test.exe \"a b c\" d e", "a b c", "d", "e");
86 ok_argsA("test.exe \"ab\\\"c\" \"\\\\\" d", "ab\"c", "\\", "d");
87 ok_argsA("test.exe a\\\\\\b d\"e f\"g h", "a\\\\\\b", "de fg", "h");
88 ok_argsA("test.exe a\\\\\\\"b c d", "a\\\"b", "c", "d");
89 ok_argsA("test.exe a\\\\\\\\\"b c\" d e", "a\\\\b c", "d", "e");
90 ok_argsA("test.exe a b \"\"", "a", "b", "");
91 ok_argsA("test.exe a \"\" b", "a", "", "b");
92 ok_argsA("test.exe a \"b\"\" c", "a", "b\"", "c");
93 ok_argsA("test.exe a \"b\\\"\" c", "a", "b\"", "c");
94 ok_argsA("test.exe a \" b\\ \"\" c", "a", " b\\ \"", "c");
95 ok_argsA("test.exe a \"b\\ \"\"\" c\" d", "a", "b\\ \" c", "d");
96 ok_argsA("test.exe a \"b\\ \"\"\" \"c \"\"\"\" d", "a", "b\\ \" c", "\" d");
97 ok_argsA("test.exe a b c ", "a", "b", "c");
98 ok_argsA("test.exe \"a b c\"", "a b c", NULL, NULL);
99
100 ok_argsW(L"test.exe \"a b c\" d e", L"a b c", L"d", L"e");
101 ok_argsW(L"test.exe \"ab\\\"c\" \"\\\\\" d", L"ab\"c", L"\\", L"d");
102 ok_argsW(L"test.exe a\\\\\\b d\"e f\"g h", L"a\\\\\\b", L"de fg", L"h");
103 ok_argsW(L"test.exe a\\\\\\\"b c d", L"a\\\"b", L"c", L"d");
104 ok_argsW(L"test.exe a\\\\\\\\\"b c\" d e", L"a\\\\b c", L"d", L"e");
105 ok_argsW(L"test.exe a b \"\"", L"a", L"b", L"");
106 ok_argsW(L"test.exe a \"\" b", L"a", L"", L"b");
107 ok_argsW(L"test.exe a \"b\"\" c", L"a", L"b\"", L"c");
108 ok_argsW(L"test.exe a \"b\\\"\" c", L"a", L"b\"", L"c");
109 ok_argsW(L"test.exe a \" b\\ \"\" c", L"a", L" b\\ \"", L"c");
110 ok_argsW(L"test.exe a \"b\\ \"\"\" c\" d", L"a", L"b\\ \" c", L"d");
111 ok_argsW(L"test.exe a \"b\\ \"\"\" \"c \"\"\"\" d", L"a", L"b\\ \" c", L"\" d");
112 ok_argsW(L"test.exe a b c ", L"a", L"b", L"c");
113 ok_argsW(L"test.exe \"a b c\"", L"a b c", NULL, NULL);
114}
#define ok_argsA
Definition: __getmainargs.c:23
#define ok_argsW
Definition: __getmainargs.c:24