[mkbundle] Don't free bundled dylibrary directory (#3897)
[mono.git] / mono / mini / main.c
index 6149ca75fa0996be2da5c08a5ed076fd8685a539..77f8bc9578c9cea42168c5695dd3dca43d53ff6c 100644 (file)
@@ -149,9 +149,9 @@ static void
 bundle_save_library_initialize ()
 {
        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);
+       /* don't free path - mkdtemp modifies it in place, and bundled_dylibrary_directory is an alias of it */
        if (bundled_dylibrary_directory == NULL)
                return;
        atexit (delete_bundled_libraries);
@@ -161,19 +161,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 +280,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)++;