* locales.c
[mono.git] / mono / metadata / image.c
index 16ac1a37bb6df636c8a85083f8784ae94ba2eb52..0c8ca5f9043e6a8c51652c3a35ae2442b0d2576a 100644 (file)
@@ -341,7 +341,7 @@ load_metadata_ptrs (MonoImage *image, MonoCLIImageInfo *iinfo)
                        return FALSE;
                } else {
                        g_message ("Unknown heap type: %s\n", ptr + 8);
-                       ptr += 8 + strlen (ptr) + 1;
+                       ptr += 8 + strlen (ptr + 8) + 1;
                }
                pad = ptr - image->raw_metadata;
                if (pad % 4)
@@ -561,8 +561,11 @@ mono_image_init (MonoImage *image)
        image->remoting_invoke_cache = g_hash_table_new (NULL, NULL);
        image->synchronized_cache = g_hash_table_new (NULL, NULL);
 
-       image->generics_cache = g_hash_table_new ((GHashFunc)mono_metadata_type_hash, (GEqualFunc)mono_metadata_type_equal);
        image->typespec_cache = g_hash_table_new (NULL, NULL);
+
+       image->generic_inst_cache =
+               g_hash_table_new ((GHashFunc)mono_metadata_generic_inst_hash,
+                                 (GCompareFunc)mono_metadata_generic_inst_equal);
 }
 
 static MonoImage *
@@ -759,10 +762,17 @@ do_mono_image_open (const char *fname, MonoImageOpenStatus *status)
        image = g_new0 (MonoImage, 1);
        image->ref_count = 1;
        image->f = filed;
-       image->name = g_strdup (fname);
        iinfo = g_new0 (MonoCLIImageInfo, 1);
        image->image_info = iinfo;
 
+       if (g_path_is_absolute (fname))
+               image->name = g_strdup (fname);
+       else {
+               gchar *path = g_get_current_dir ();
+               image->name = g_build_filename (path, fname, NULL);
+               g_free (path);
+       }
+
        return do_mono_image_load (image, status);
 }
 
@@ -771,9 +781,6 @@ mono_image_loaded (const char *name)
 {
        MonoImage *res;
         
-       if (strcmp (name, "corlib") == 0)
-               name = "mscorlib";
-
        EnterCriticalSection (&images_mutex);
        res = g_hash_table_lookup (loaded_images_hash, name);
        LeaveCriticalSection (&images_mutex);
@@ -949,6 +956,8 @@ mono_image_close (MonoImage *image)
        g_hash_table_destroy (image->delegate_invoke_cache);
        g_hash_table_destroy (image->remoting_invoke_cache);
        g_hash_table_destroy (image->runtime_invoke_cache);
+       g_hash_table_destroy (image->typespec_cache);
+       g_hash_table_destroy (image->generic_inst_cache);
        
        if (image->raw_metadata != NULL)
                mono_raw_buffer_free (image->raw_metadata);