int main (int argc, char* argv[]) { char **newargs; int i, k = 0; newargs = (char **) malloc (sizeof (char *) * (argc + 2 + count_mono_options_args ())); newargs [k++] = argv [0]; if (mono_options != NULL) { i = 0; while (mono_options[i] != NULL) newargs[k++] = mono_options[i++]; } newargs [k++] = image_name; for (i = 1; i < argc; i++) { newargs [k++] = argv [i]; } newargs [k] = NULL; if (config_dir != NULL && getenv ("MONO_CFG_DIR") == NULL) mono_set_dirs (getenv ("MONO_PATH"), config_dir); mono_mkbundle_init(); return mono_main (k, newargs); }
int main (int argc, char* argv[]) { char **newargs; int i, k = 0; #ifdef _WIN32 /* CommandLineToArgvW() might return a different argc than the * one passed to main(), so let it overwrite that, as we won't * use argv[] on Windows anyway. */ wchar_t **wargv = CommandLineToArgvW (GetCommandLineW (), &argc); #endif newargs = (char **) malloc (sizeof (char *) * (argc + 2) + count_mono_options_args ()); #ifdef _WIN32 newargs [k++] = g_utf16_to_utf8 (wargv [0], -1, NULL, NULL, NULL); #else newargs [k++] = argv [0]; #endif if (mono_options != NULL) { i = 0; while (mono_options[i] != NULL) newargs[k++] = mono_options[i++]; } newargs [k++] = image_name; for (i = 1; i < argc; i++) { #ifdef _WIN32 newargs [k++] = g_utf16_to_utf8 (wargv [i], -1, NULL, NULL, NULL); #else newargs [k++] = argv [i]; #endif } #ifdef _WIN32 LocalFree (wargv); #endif newargs [k] = NULL; if (config_dir != NULL && getenv ("MONO_CFG_DIR") == NULL) mono_set_dirs (getenv ("MONO_PATH"), config_dir); mono_mkbundle_init(); return mono_main (k, newargs); }
int main (int argc, char* argv[]) { char **newargs; int i, k = 0; #ifdef _WIN32 /* CommandLineToArgvW() might return a different argc than the * one passed to main(), so let it overwrite that, as we won't * use argv[] on Windows anyway. */ wchar_t **wargv = CommandLineToArgvW (GetCommandLineW (), &argc); #endif newargs = (char **) malloc (sizeof (char *) * (argc + 2) + count_mono_options_args ()); #ifdef _WIN32 newargs [k++] = g_utf16_to_utf8 (wargv [0], -1, NULL, NULL, NULL); #else newargs [k++] = argv [0]; #endif if (mono_options != NULL) { i = 0; while (mono_options[i] != NULL) newargs[k++] = mono_options[i++]; } BrInitError err = 0; if (br_init(&err) == 1) { char *exedir = br_find_exe_dir(NULL); if (exedir) { setenv("MONO_PATH",exedir,1); mono_set_dirs(exedir, exedir); chdir(exedir); free(exedir); } } else { switch (err) { case BR_INIT_ERROR_NOMEM: printf("Could not allocate enough memory\n"); break; case BR_INIT_ERROR_OPEN_MAPS: case BR_INIT_ERROR_READ_MAPS: case BR_INIT_ERROR_INVALID_MAPS: printf("Couldn't access /proc/self/maps!\n"); break; case BR_INIT_ERROR_DISABLED: printf("BinReloc disabled!!\n"); break; } return 1; } // Calculate image_name char *image_name; char *exe = br_find_exe(NULL); char *pos = strrchr(exe, '/'); if (pos != NULL) { image_name = strdup(pos+1); pos = strstr(image_name,".bin."); if (pos != NULL) { strcpy(pos, ".exe"); } } free(exe); newargs [k++] = image_name; for (i = 1; i < argc; i++) { #ifdef _WIN32 newargs [k++] = g_utf16_to_utf8 (wargv [i], -1, NULL, NULL, NULL); #else newargs [k++] = argv [i]; #endif } #ifdef _WIN32 LocalFree (wargv); #endif newargs [k] = NULL; return mono_main (k, newargs); }