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);