X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fmain.c;h=bd4f6674dfbc0d82273461ef9aabab9b56689604;hb=f8ca228b2e781a5f54c68fa1b85d7eabfc4fd098;hp=6149ca75fa0996be2da5c08a5ed076fd8685a539;hpb=b1b28a15d690655d49eb538af2fa0d6cfc254ccf;p=mono.git diff --git a/mono/mini/main.c b/mono/mini/main.c index 6149ca75fa0..bd4f6674dfb 100644 --- a/mono/mini/main.c +++ b/mono/mini/main.c @@ -1,5 +1,6 @@ -/* - * main.c: The main entry point for the mono executable +/** + * \file + * The main entry point for the mono executable * * The main entry point does a few things: * @@ -135,7 +136,7 @@ static GSList *bundle_library_paths; static char *bundled_dylibrary_directory; static void -delete_bundled_libraries () +delete_bundled_libraries (void) { GSList *list; @@ -146,10 +147,10 @@ delete_bundled_libraries () } static void -bundle_save_library_initialize () +bundle_save_library_initialize (void) { bundle_save_library_initialized = 1; - char *path = g_build_filename (g_get_tmp_dir (), "mono-bundle-XXXXXX"); + char *path = g_build_filename (g_get_tmp_dir (), "mono-bundle-XXXXXX", NULL); bundled_dylibrary_directory = g_mkdtemp (path); g_free (path); if (bundled_dylibrary_directory == NULL) @@ -161,19 +162,23 @@ static void save_library (int fd, uint64_t offset, uint64_t size, const char *destfname) { MonoDl *lib; - char *file, *buffer, *err; + char *file, *buffer, *err, *internal_path; if (!bundle_save_library_initialized) bundle_save_library_initialize (); - file = g_build_filename (bundled_dylibrary_directory, destfname); + file = g_build_filename (bundled_dylibrary_directory, destfname, NULL); buffer = load_from_region (fd, offset, size); g_file_set_contents (file, buffer, size, NULL); + lib = mono_dl_open (file, MONO_DL_LAZY, &err); - if (err != NULL){ - fprintf (stderr, "Error loading shared library: %s\n", file); + if (lib == NULL){ + fprintf (stderr, "Error loading shared library: %s %s\n", file, err); exit (1); } - mono_loader_register_module (destfname, lib); + // Register the name with "." as this is how it will be found when embedded + internal_path = g_build_filename (".", destfname, NULL); + mono_loader_register_module (internal_path, lib); + g_free (internal_path); bundle_library_paths = g_slist_append (bundle_library_paths, file); g_free (buffer); @@ -276,9 +281,10 @@ probe_embedded (const char *program, int *ref_argc, char **ref_argv []) mono_register_bundled_assemblies ((const MonoBundledAssembly **) assemblies->data); new_argv = g_new (char *, (*ref_argc)+1); - for (j = 0; j < *ref_argc; j++) - new_argv [j] = (*ref_argv)[j]; - new_argv [j] = entry_point; + new_argv [0] = (*ref_argv)[0]; + new_argv [1] = entry_point; + for (j = 1; j < *ref_argc; j++) + new_argv [j+1] = (*ref_argv)[j]; *ref_argv = new_argv; (*ref_argc)++;