First set of licensing changes
[mono.git] / mono / metadata / mono-config.c
index c9e9e030b8c41354b5ddf2af83701ec657a40b3a..80261f2b62e9a3d74741b48af5aff8fb135903b9 100644 (file)
@@ -7,6 +7,7 @@
  *
  * Copyright 2002-2003 Ximian, Inc (http://www.ximian.com)
  * Copyright 2004-2009 Novell, Inc (http://www.novell.com)
+ * Licensed under the MIT license. See LICENSE file in the project root for full license information.
  */
 #include "config.h"
 #include <glib.h>
@@ -17,7 +18,7 @@
 #include "mono/metadata/mono-config.h"
 #include "mono/metadata/metadata-internals.h"
 #include "mono/metadata/object-internals.h"
-#include "mono/utils/mono-logger-internal.h"
+#include "mono/utils/mono-logger-internals.h"
 
 #if defined(TARGET_PS3)
 #define CONFIG_OS "CellOS"
@@ -166,9 +167,9 @@ static void start_element (GMarkupParseContext *context,
                           gpointer             user_data,
                           GError             **error)
 {
-       ParseState *state = user_data;
+       ParseState *state = (ParseState *)user_data;
        if (!state->current) {
-               state->current = g_hash_table_lookup (config_handlers, element_name);
+               state->current = (MonoParseHandler *)g_hash_table_lookup (config_handlers, element_name);
                if (state->current && state->current->init)
                        state->user_data = state->current->init (state->assembly);
        }
@@ -181,7 +182,7 @@ static void end_element   (GMarkupParseContext *context,
                           gpointer             user_data,
                           GError             **error)
 {
-       ParseState *state = user_data;
+       ParseState *state = (ParseState *)user_data;
        if (state->current) {
                if (state->current->end)
                        state->current->end (state->user_data, element_name);
@@ -200,7 +201,7 @@ static void parse_text    (GMarkupParseContext *context,
                           gpointer             user_data,
                           GError             **error)
 {
-       ParseState *state = user_data;
+       ParseState *state = (ParseState *)user_data;
        if (state->current && state->current->text)
                state->current->text (state->user_data, text, text_len);
 }
@@ -218,7 +219,7 @@ static void parse_error   (GMarkupParseContext *context,
                            GError              *error,
                           gpointer             user_data)
 {
-       ParseState *state = user_data;
+       ParseState *state = (ParseState *)user_data;
        const gchar *msg;
        const gchar *filename;
 
@@ -267,7 +268,7 @@ dllmap_start (gpointer user_data,
               const gchar        **attribute_values)
 {
        int i;
-       DllInfo *info = user_data;
+       DllInfo *info = (DllInfo *)user_data;
        
        if (strcmp (element_name, "dllmap") == 0) {
                g_free (info->dll);
@@ -277,9 +278,21 @@ dllmap_start (gpointer user_data,
                for (i = 0; attribute_names [i]; ++i) {
                        if (strcmp (attribute_names [i], "dll") == 0)
                                info->dll = g_strdup (attribute_values [i]);
-                       else if (strcmp (attribute_names [i], "target") == 0)
-                               info->target = g_strdup (attribute_values [i]);
-                       else if (strcmp (attribute_names [i], "os") == 0 && !arch_matches (CONFIG_OS, attribute_values [i]))
+                       else if (strcmp (attribute_names [i], "target") == 0){
+                               char *p = strstr (attribute_values [i], "$mono_libdir");
+                               if (p != NULL){
+                                       const char *libdir = mono_assembly_getrootdir ();
+                                       size_t libdir_len = strlen (libdir);
+                                       char *result;
+                                       
+                                       result = (char *)g_malloc (libdir_len-strlen("$mono_libdir")+strlen(attribute_values[i])+1);
+                                       strncpy (result, attribute_values[i], p-attribute_values[i]);
+                                       strcpy (result+(p-attribute_values[i]), libdir);
+                                       strcat (result, p+strlen("$mono_libdir"));
+                                       info->target = result;
+                               } else 
+                                       info->target = g_strdup (attribute_values [i]);
+                       } else if (strcmp (attribute_names [i], "os") == 0 && !arch_matches (CONFIG_OS, attribute_values [i]))
                                info->ignore = TRUE;
                        else if (strcmp (attribute_names [i], "cpu") == 0 && !arch_matches (CONFIG_CPU, attribute_values [i]))
                                info->ignore = TRUE;
@@ -315,7 +328,7 @@ dllmap_start (gpointer user_data,
 static void
 dllmap_finish (gpointer user_data)
 {
-       DllInfo *info = user_data;
+       DllInfo *info = (DllInfo *)user_data;
 
        g_free (info->dll);
        g_free (info->target);
@@ -436,7 +449,7 @@ mono_config_parse_xml_with_context (ParseState *state, const char *text, gsize l
        if (!inited)
                mono_config_init ();
 
-       context = g_markup_parse_context_new (&mono_parser, 0, state, NULL);
+       context = g_markup_parse_context_new (&mono_parser, (GMarkupParseFlags)0, state, NULL);
        if (g_markup_parse_context_parse (context, text, len, NULL)) {
                g_markup_parse_context_end_parse (context, NULL);
        }
@@ -551,7 +564,6 @@ mono_config_for_assembly (MonoImage *assembly)
        int got_it = 0, i;
        char *aname, *cfg, *cfg_name;
        const char *bundled_config;
-       const char *home;
        
        state.assembly = assembly;
 
@@ -567,14 +579,13 @@ mono_config_for_assembly (MonoImage *assembly)
 
        cfg_name = g_strdup_printf ("%s.config", mono_image_get_name (assembly));
 
-       home = g_get_home_dir ();
-
        for (i = 0; (aname = get_assembly_filename (assembly, i)) != NULL; ++i) {
                cfg = g_build_filename (mono_get_config_dir (), "mono", "assemblies", aname, cfg_name, NULL);
                got_it += mono_config_parse_file_with_context (&state, cfg);
                g_free (cfg);
 
 #ifdef TARGET_WIN32
+               const char *home = g_get_home_dir ();
                cfg = g_build_filename (home, ".mono", "assemblies", aname, cfg_name, NULL);
                got_it += mono_config_parse_file_with_context (&state, cfg);
                g_free (cfg);
@@ -658,7 +669,7 @@ mono_get_machine_config (void)
 static void
 assembly_binding_end (gpointer user_data, const char *element_name)
 {
-       ParserUserData *pud = user_data;
+       ParserUserData *pud = (ParserUserData *)user_data;
 
        if (!strcmp (element_name, "dependentAssembly")) {
                if (pud->info_parsed && pud->info) {
@@ -679,7 +690,7 @@ publisher_policy_start (gpointer user_data,
        MonoAssemblyBindingInfo *info;
        int n;
 
-       pud = user_data;
+       pud = (ParserUserData *)user_data;
        info = pud->info;
        if (!strcmp (element_name, "dependentAssembly")) {
                info->name = NULL;