2009-06-19 Kai Tietz <kai.tietz@onevision.com>
* crt/crt0_c.c: Allow use of main/wmain as -mwindows entry point
and pass proper Arguments.
* crt/crt0_w.c: Likewise.
* crt/crtexe.c: Use for -mwindows case also main/wmain with proper
arguments.
git-svn-id: svn+ssh://svn.code.sf.net/p/mingw-w64/code/trunk@951 4407c894-4637-0410-b4f5-ada5f102cad1
diff --git a/mingw-w64-crt/ChangeLog b/mingw-w64-crt/ChangeLog
index a78c53d..e6aef82 100644
--- a/mingw-w64-crt/ChangeLog
+++ b/mingw-w64-crt/ChangeLog
@@ -1,3 +1,11 @@
+2009-06-19 Kai Tietz <kai.tietz@onevision.com>
+
+ * crt/crt0_c.c: Allow use of main/wmain as -mwindows entry point
+ and pass proper Arguments.
+ * crt/crt0_w.c: Likewise.
+ * crt/crtexe.c: Use for -mwindows case also main/wmain with proper
+ arguments.
+
2009-05-15 Kai Tietz <kai.tietz@onevision.com>
* threads/: Add sources for EH cleanup DLL.
diff --git a/mingw-w64-crt/crt/crt0_c.c b/mingw-w64-crt/crt/crt0_c.c
index 577fa87..fe7aae3 100644
--- a/mingw-w64-crt/crt/crt0_c.c
+++ b/mingw-w64-crt/crt/crt0_c.c
@@ -6,7 +6,13 @@
#include <windows.h>
+extern HINSTANCE __mingw_winmain_hInstance;
+extern LPSTR __mingw_winmain_lpCmdLine;
+extern DWORD __mingw_winmain_nShowCmd;
+
+/*ARGSUSED*/
int main (int flags, char **cmdline, char **inst)
{
- return (int) WinMain ((HINSTANCE) inst, NULL, (LPSTR) cmdline,(DWORD) flags);
+ return (int) WinMain (__mingw_winmain_hInstance, NULL,
+ __mingw_winmain_lpCmdLine, __mingw_winmain_nShowCmd);
}
diff --git a/mingw-w64-crt/crt/crt0_w.c b/mingw-w64-crt/crt/crt0_w.c
index 4e09648..726b63e 100644
--- a/mingw-w64-crt/crt/crt0_w.c
+++ b/mingw-w64-crt/crt/crt0_w.c
@@ -10,7 +10,13 @@
int WINAPI wWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPWSTR lpCmdLine,int nShowCmd);
+extern HINSTANCE __mingw_winmain_hInstance;
+extern LPWSTR __mingw_winmain_lpCmdLine;
+extern DWORD __mingw_winmain_nShowCmd;
+
+/*ARGSUSED*/
int wmain (int flags, wchar_t **cmdline, wchar_t **inst)
{
- return (int) wWinMain ((HINSTANCE) inst, NULL, (LPWSTR) cmdline,(DWORD) flags);
+ return (int) wWinMain (__mingw_winmain_hInstance, NULL,
+ __mingw_winmain_lpCmdLine, __mingw_winmain_nShowCmd);
}
diff --git a/mingw-w64-crt/crt/crtexe.c b/mingw-w64-crt/crt/crtexe.c
index 1ecbd64..436e088 100644
--- a/mingw-w64-crt/crt/crtexe.c
+++ b/mingw-w64-crt/crt/crtexe.c
@@ -69,6 +69,10 @@
extern int mingw_app_type;
+HINSTANCE __mingw_winmain_hInstance;
+_TCHAR *__mingw_winmain_lpCmdLine;
+DWORD __mingw_winmain_nShowCmd;
+
static int argc;
#ifdef WPRFLAG
extern void __main(void);
@@ -237,21 +241,11 @@
while (*lpszCommandLine && (*lpszCommandLine <= SPACECHAR))
lpszCommandLine++;
-#ifdef WPRFLAG
- /* C++ initialization.
- gcc inserts this call automatically for a function called main, but not for wmain. */
- __main ();
- mainret = wmain (
- (int) (StartupInfo.dwFlags & STARTF_USESHOWWINDOW ? StartupInfo.wShowWindow : SW_SHOWDEFAULT),
- (wchar_t **) lpszCommandLine, (wchar_t **) (HINSTANCE) &__ImageBase);
-#else
- mainret = main (
- (int) (StartupInfo.dwFlags & STARTF_USESHOWWINDOW ? StartupInfo.wShowWindow : SW_SHOWDEFAULT),
- (char **) lpszCommandLine, (char **) (HINSTANCE) &__ImageBase);
-#endif
+ __mingw_winmain_hInstance = (HINSTANCE) &__ImageBase;
+ __mingw_winmain_lpCmdLine = lpszCommandLine;
+ __mingw_winmain_nShowCmd = StartupInfo.dwFlags & STARTF_USESHOWWINDOW ?
+ StartupInfo.wShowWindow : SW_SHOWDEFAULT;
}
- else
- {
duplicate_ppstrings (argc, &argv);
#ifdef WPRFLAG
__winitenv = envp;
@@ -263,7 +257,6 @@
__initenv = envp;
mainret = main (argc, argv, envp);
#endif
- }
if (!managedapp)
exit (mainret);