History

Win: crt, initialize global __argc, __targv and _tenviron of msvcrt

_tenviron: as far as possible, not in ASC '-run' mode. __argc and __targv are shortcuts for _tWinMain, when you want to use program parameters.

YX Hao committed 9 years ago

Commit faa97441 parent 6f1860e2 files · +34 −41Browse files

Unified · Split

2 files
  1. win32/lib/crt1.c +12 −14
  2. win32/lib/wincrt1.c +22 −27
win32/lib/crt1.c+12−14
@@ -44,9 +44,7 @@ int _dowildcard; · 43 unmodified lines
4444 void _tstart(void)
4545 {
4646 __TRY__
47− int argc, ret;
48− _TCHAR **argv;
49− _TCHAR **env;
47+ int ret;
5048 _startupinfo start_info;
5149
5250 // Sets the current application type
@@ -60,31 +58,31 @@ void _tstart(void) · 7 unmodified lines
6058 #endif
6159
6260 start_info.newmode = 0;
63− __tgetmainargs( &argc, &argv, &env, _dowildcard, &start_info);
64− ret = _tmain(argc, argv, env);
61+ __tgetmainargs( &__argc, &__targv, &_tenviron, _dowildcard, &start_info);
62+ ret = _tmain(__argc, __targv, _tenviron);
6563 exit(ret);
6664 }
6765
6866 int _runtmain(int argc, /* as tcc passed in */ char **argv)
6967 {
7068 #ifdef UNICODE
71− int wargc;
72− _TCHAR **wargv, **wenv;
7369 _startupinfo start_info = {0};
7470
75− __tgetmainargs(&wargc, &wargv, &wenv, _dowildcard, &start_info);
71+ __tgetmainargs(&__argc, &__targv, &_tenviron, _dowildcard, &start_info);
7672 /* may be wrong when tcc has received wildcards (*.c) */
77− if (argc < wargc)
78− wargv += wargc - argc;
79− else
80− argc = wargc;
81−#define argv wargv
73+ if (argc < __argc) {
74+ __targv += __argc - argc;
75+ __argc = argc;
76+ }
77+#else
78+ __argc = argc;
79+ __targv = argv;
8280 #endif
8381
8482 #ifdef __i386
8583 _controlfp(_PC_53, _MCW_PC);
8684 #endif
87− return _tmain(argc, argv, _tenviron);
85+ return _tmain(__argc, __targv, _tenviron);
8886 }
8987
9088 // =============================================
win32/lib/wincrt1.c+22−27
@@ -33,31 +33,25 @@ int __cdecl __tgetmainargs(int *pargc, _TCHAR ***pargv, _TCHAR ***penv, int glob · 32 unmodified lines
3333 int _twinstart(void)
3434 {
3535 __TRY__
36− _TCHAR *szCmd;
36+ _TCHAR *szCmd, *p;
3737 STARTUPINFO startinfo;
38+ _startupinfo start_info_con = {0};
3839 int fShow;
3940 int ret;
4041
4142 __set_app_type(__GUI_APP);
4243 _controlfp(0x10000, 0x30000);
4344
44− szCmd = GetCommandLine();
45− if (szCmd) {
46− while (__T(' ') == *szCmd)
47− szCmd++;
48− if (__T('\"') == *szCmd) {
49− while (*++szCmd)
50− if (__T('\"') == *szCmd) {
51− szCmd++;
52− break;
53− }
54− } else {
55− while (*szCmd && __T(' ') != *szCmd)
56− szCmd++;
57− }
58− while (__T(' ') == *szCmd)
59− szCmd++;
60− }
45+ start_info_con.newmode = 0;
46+ __tgetmainargs(&__argc, &__targv, &_tenviron, 0, &start_info_con);
47+
48+ p = GetCommandLine();
49+ if (__argc > 1)
50+ szCmd = _tcsstr(p, __targv[1]);
51+ if (NULL == szCmd)
52+ szCmd = __T("");
53+ else if (szCmd > p && szCmd[-1] == __T('\"'))
54+ --szCmd;
6155
6256 GetStartupInfo(&startinfo);
6357 fShow = startinfo.wShowWindow;
@@ -73,22 +67,23 @@ int _runtwinmain(int argc, /* as tcc passed in */ char **argv) · 9 unmodified lines
7367 _TCHAR *szCmd, *p;
7468
7569 #ifdef UNICODE
76− int wargc;
77− _TCHAR **wargv, **wenv;
7870 _startupinfo start_info = {0};
7971
80− __tgetmainargs(&wargc, &wargv, &wenv, 0, &start_info);
81− if (argc < wargc)
82− wargv += wargc - argc;
83− else
84− argc = wargc;
85−#define argv wargv
72+ __tgetmainargs(&__argc, &__targv, &_tenviron, 0, &start_info);
73+ /* may be wrong when tcc has received wildcards (*.c) */
74+ if (argc < __argc) {
75+ __targv += __argc - argc;
76+ __argc = argc;
77+ }
78+#else
79+ __argc = argc;
80+ __targv = argv;
8681 #endif
8782
8883 p = GetCommandLine();
8984 szCmd = NULL;
9085 if (argc > 1)
91− szCmd = _tcsstr(p, argv[1]);
86+ szCmd = _tcsstr(p, __targv[1]);
9287 if (NULL == szCmd)
9388 szCmd = __T("");
9489 else if (szCmd > p && szCmd[-1] == __T('\"'))

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t