Mon Dec 24 17:23:45 CET 2001 Paolo Molaro <lupus@ximian.com>
[mono.git] / mono / metadata / image.c
index 9f46067a5d4b21e4b7417e6521af232b4a084070..4fbb06f9bca0231765384685558377d3a84d1a41 100644 (file)
@@ -21,6 +21,7 @@
 #include "rawbuffer.h"
 #include "mono-endian.h"
 #include "private.h"
+#include "tabledefs.h"
 
 #define INVALID_ADDRESS 0xffffffff
 
@@ -355,10 +356,14 @@ load_class_names (MonoImage *image) {
        const char *nspace;
        GHashTable *nspace_table;
        GHashTable *name_cache = image->name_cache;
-       guint32 i;
+       guint32 i, visib;
 
        for (i = 1; i <= t->rows; ++i) {
                mono_metadata_decode_row (t, i - 1, cols, MONO_TYPEDEF_SIZE);
+               /* nested types are accessed from the nesting name */
+               visib = cols [MONO_TYPEDEF_FLAGS] & TYPE_ATTRIBUTE_VISIBILITY_MASK;
+               if (visib > TYPE_ATTRIBUTE_PUBLIC && visib < TYPE_ATTRIBUTE_NESTED_ASSEMBLY)
+                       continue;
                name = mono_metadata_string_heap (image, cols [MONO_TYPEDEF_NAME]);
                nspace = mono_metadata_string_heap (image, cols [MONO_TYPEDEF_NAMESPACE]);
                if (!(nspace_table = g_hash_table_lookup (name_cache, nspace))) {
@@ -379,7 +384,7 @@ do_mono_image_open (const char *fname, enum MonoImageOpenStatus *status)
        int n;
 
        image = g_new0 (MonoImage, 1);
-       image->f = fopen (fname, "r");
+       image->f = fopen (fname, "rb");
        image->name = g_strdup (fname);
        iinfo = g_new0 (MonoCLIImageInfo, 1);
        image->image_info = iinfo;