2002-08-16 Gonzalo Paniagua Javier <gonzalo@ximian.com>
[mono.git] / mono / metadata / assembly.c
index 21beaaacab430c0f2b6d4a251d1f88f71a6b076b..4a36e9ede8d806203c81225f6619994499399cb4 100644 (file)
@@ -228,8 +228,6 @@ mono_assembly_open (const char *filename, MonoImageOpenStatus *status)
        ass->basedir = base_dir;
        ass->image = image;
 
-       image->assembly = ass;
-
        t = &image->tables [MONO_TABLE_ASSEMBLY];
        if (t->rows) {
                mono_metadata_decode_row (t, 0, cols, MONO_ASSEMBLY_SIZE);
@@ -253,6 +251,8 @@ mono_assembly_open (const char *filename, MonoImageOpenStatus *status)
                }
        }
 
+       image->assembly = ass;
+
        /* register right away to prevent loops */
        loaded_assemblies = g_list_prepend (loaded_assemblies, ass);
 
@@ -285,7 +285,6 @@ mono_assembly_open (const char *filename, MonoImageOpenStatus *status)
                g_free (module_ref);
        }
 
-       g_free (base_dir);
        return ass;
 }
 
@@ -367,3 +366,27 @@ mono_assembly_close (MonoAssembly *assembly)
        g_free (assembly);
 }
 
+void
+mono_assembly_foreach (GFunc func, gpointer user_data)
+{
+       /* In the future this can do locking of loaded_assemblies */
+
+       g_list_foreach (loaded_assemblies, func, user_data);
+}
+
+/* Holds the assembly of the application, for
+ * System.Diagnostics.Process::MainModule
+ */
+static MonoAssembly *main_assembly=NULL;
+
+void
+mono_assembly_set_main (MonoAssembly *assembly)
+{
+       main_assembly=assembly;
+}
+
+MonoAssembly *
+mono_assembly_get_main (void)
+{
+       return(main_assembly);
+}