2009-12-05 Zoltan Varga <vargaz@gmail.com>
[mono.git] / mono / metadata / image.h
1 #ifndef _MONONET_METADATA_IMAGE_H_ 
2 #define _MONONET_METADATA_IMAGE_H_
3
4 #include <stdio.h>
5 #include <glib.h>
6
7 G_BEGIN_DECLS
8
9 typedef struct _MonoImage MonoImage;
10 typedef struct _MonoAssembly MonoAssembly;
11 typedef struct _MonoTableInfo MonoTableInfo;
12
13 #define MONO_PUBLIC_KEY_TOKEN_LENGTH    17
14
15 typedef struct {
16         const char *name;
17         const char *culture;
18         const char *hash_value;
19         const guint8* public_key;
20         // string of 16 hex chars + 1 NULL
21         guchar public_key_token [MONO_PUBLIC_KEY_TOKEN_LENGTH];
22         guint32 hash_alg;
23         guint32 hash_len;
24         guint32 flags;
25         guint16 major, minor, build, revision;
26 } MonoAssemblyName;
27
28 typedef enum {
29         MONO_IMAGE_OK,
30         MONO_IMAGE_ERROR_ERRNO,
31         MONO_IMAGE_MISSING_ASSEMBLYREF,
32         MONO_IMAGE_IMAGE_INVALID
33 } MonoImageOpenStatus;
34
35 void          mono_images_init    (void);
36 void          mono_images_cleanup (void);
37
38 MonoImage    *mono_image_open     (const char *fname,
39                                    MonoImageOpenStatus *status);
40 MonoImage    *mono_image_open_full (const char *fname,
41                                    MonoImageOpenStatus *status, gboolean refonly);
42 MonoImage    *mono_pe_file_open     (const char *fname,
43                                      MonoImageOpenStatus *status);
44 MonoImage    *mono_image_open_from_data (char *data, guint32 data_len, gboolean need_copy,
45                                          MonoImageOpenStatus *status);
46 MonoImage    *mono_image_open_from_data_full (char *data, guint32 data_len, gboolean need_copy,
47                                          MonoImageOpenStatus *status, gboolean refonly);
48 MonoImage    *mono_image_open_from_data_with_name (char *data, guint32 data_len, gboolean need_copy,
49                                                    MonoImageOpenStatus *status, gboolean refonly, const char *name);
50 void          mono_image_fixup_vtable (MonoImage *image);
51 MonoImage    *mono_image_loaded   (const char *name);
52 MonoImage    *mono_image_loaded_full   (const char *name, gboolean refonly);
53 MonoImage    *mono_image_loaded_by_guid (const char *guid);
54 MonoImage    *mono_image_loaded_by_guid_full (const char *guid, gboolean refonly);
55 void          mono_image_init     (MonoImage *image);
56 void          mono_image_close    (MonoImage *image);
57 void          mono_image_addref   (MonoImage *image);
58 const char   *mono_image_strerror (MonoImageOpenStatus status);
59
60 int           mono_image_ensure_section     (MonoImage *image,
61                                              const char *section);
62 int           mono_image_ensure_section_idx (MonoImage *image,
63                                              int section);
64
65 guint32       mono_image_get_entry_point    (MonoImage *image);
66 const char   *mono_image_get_resource       (MonoImage *image, guint32 offset, guint32 *size);
67 MonoImage*    mono_image_load_file_for_image (MonoImage *image, int fileidx);
68
69 MonoImage*    mono_image_load_module (MonoImage *image, int idx);
70
71 const char*   mono_image_get_name       (MonoImage *image);
72 const char*   mono_image_get_filename   (MonoImage *image);
73 const char *  mono_image_get_guid       (MonoImage *image);
74 MonoAssembly* mono_image_get_assembly   (MonoImage *image);
75 gboolean      mono_image_is_dynamic     (MonoImage *image);
76 char*         mono_image_rva_map        (MonoImage *image, guint32 rva);
77
78 const MonoTableInfo *mono_image_get_table_info (MonoImage *image, int table_id);
79 int                  mono_image_get_table_rows (MonoImage *image, int table_id);
80 int                  mono_table_info_get_rows  (const MonoTableInfo *table);
81
82 /* This actually returns a MonoPEResourceDataEntry *, but declaring it
83  * causes an include file loop.
84  */
85 gpointer      mono_image_lookup_resource (MonoImage *image, guint32 res_id,
86                                           guint32 lang_id, gunichar2 *name);
87
88 const char*   mono_image_get_public_key  (MonoImage *image, guint32 *size);
89 const char*   mono_image_get_strong_name (MonoImage *image, guint32 *size);
90 guint32       mono_image_strong_name_position (MonoImage *image, guint32 *size);
91 void          mono_image_add_to_name_cache (MonoImage *image, 
92                                                                                         const char *nspace, 
93                                                                                         const char *name, guint32 idx);
94 gboolean      mono_image_has_authenticode_entry (MonoImage *image);
95
96 G_END_DECLS
97
98 #endif