Mercurial > projects > ddmd
diff main.d @ 25:3f834bed4f13
FWindows linking issues fixed
author | korDen |
---|---|
date | Tue, 13 Apr 2010 00:38:04 +0400 |
parents | fd4acc376c45 |
children | 544b922227c7 |
line wrap: on
line diff
--- a/main.d Mon Apr 12 17:02:32 2010 +0100 +++ b/main.d Tue Apr 13 00:38:04 2010 +0400 @@ -60,92 +60,93 @@ version (Windows) { import win32.windows; -} -/* Link to druntimes main() */ -/+ -extern (C) int main(int argc, char **argv) -{ - char[][] args; - int result; + + /* Link to druntimes main() */ + + extern (C) int main(int argc, char **argv) + { + char[][] args; + int result; - version (OSX) - { /* OSX does not provide a way to get at the top of the - * stack, except for the magic value 0xC0000000. - * But as far as the gc is concerned, argv is at the top - * of the main thread's stack, so save the address of that. - */ - __osx_stack_end = cast(void*)&argv; - } + version (OSX) + { /* OSX does not provide a way to get at the top of the + * stack, except for the magic value 0xC0000000. + * But as far as the gc is concerned, argv is at the top + * of the main thread's stack, so save the address of that. + */ + __osx_stack_end = cast(void*)&argv; + } - version (Posix) - { - _STI_monitor_staticctor(); - _STI_critical_init(); - } + version (Posix) + { + _STI_monitor_staticctor(); + _STI_critical_init(); + } - version (Windows) - { - wchar_t* wcbuf = GetCommandLineW(); - size_t wclen = wcslen(wcbuf); - int wargc = 0; - wchar_t** wargs = CommandLineToArgvW(wcbuf, &wargc); - assert(wargc == argc); + version (Windows) + { + wchar_t* wcbuf = GetCommandLineW(); + size_t wclen = wcslen(wcbuf); + int wargc = 0; + wchar_t** wargs = CommandLineToArgvW(wcbuf, &wargc); + assert(wargc == argc); - char* cargp = null; - size_t cargl = WideCharToMultiByte(65001, 0, wcbuf, wclen, null, 0, null, null); + char* cargp = null; + size_t cargl = WideCharToMultiByte(65001, 0, wcbuf, wclen, null, 0, null, null); - cargp = cast(char*) alloca(cargl); - args = ((cast(char[]*) alloca(wargc * (char[]).sizeof)))[0 .. wargc]; + cargp = cast(char*) alloca(cargl); + args = ((cast(char[]*) alloca(wargc * (char[]).sizeof)))[0 .. wargc]; - for (size_t i = 0, p = 0; i < wargc; i++) - { - int wlen = wcslen(wargs[i]); - int clen = WideCharToMultiByte(65001, 0, &wargs[i][0], wlen, null, 0, null, null); - args[i] = cargp[p .. p+clen]; - p += clen; assert(p <= cargl); - WideCharToMultiByte(65001, 0, &wargs[i][0], wlen, &args[i][0], clen, null, null); - } - LocalFree(cast(HANDLE)wargs); - wargs = null; - wargc = 0; - } - else version (Posix) - { - char[]* am = cast(char[]*) malloc(argc * (char[]).sizeof); - scope(exit) free(am); + for (size_t i = 0, p = 0; i < wargc; i++) + { + int wlen = wcslen(wargs[i]); + int clen = WideCharToMultiByte(65001, 0, &wargs[i][0], wlen, null, 0, null, null); + args[i] = cargp[p .. p+clen]; + p += clen; assert(p <= cargl); + WideCharToMultiByte(65001, 0, &wargs[i][0], wlen, &args[i][0], clen, null, null); + } + LocalFree(cast(HANDLE)wargs); + wargs = null; + wargc = 0; + } + else version (Posix) + { + char[]* am = cast(char[]*) malloc(argc * (char[]).sizeof); + scope(exit) free(am); - for (size_t i = 0; i < argc; i++) - { - auto len = strlen(argv[i]); - am[i] = argv[i][0 .. len]; - } - args = am[0 .. argc]; - } + for (size_t i = 0; i < argc; i++) + { + auto len = strlen(argv[i]); + am[i] = argv[i][0 .. len]; + } + args = am[0 .. argc]; + } - gc_init(); - version (Windows) - _minit(); - _moduleCtor(); - - GC.disable(); - CrashHandlerInit(); + gc_init(); + version (Windows) + _minit(); + _moduleCtor(); + + GC.disable(); + CrashHandlerInit(); - result = main(cast(string[])args); - - thread_joinAll(); - _d_isHalting = true; - _moduleDtor(); - gc_term(); + result = main(cast(string[])args); + + thread_joinAll(); + _d_isHalting = true; + _moduleDtor(); + gc_term(); - version (Posix) - { - _STD_critical_term(); - _STD_monitor_staticdtor(); - } + version (Posix) + { + _STD_critical_term(); + _STD_monitor_staticdtor(); + } - return result; + return result; + } } -+/ + int main(string[] args) { GC.disable();