[Mono-dev] Support for runtime configuration of assembly loading path - related to bug #81446
Marek Habersack
grendello at gmail.com
Thu Aug 23 09:26:25 EDT 2007
On Thu, 23 Aug 2007 14:58:20 +0200, Paolo Molaro <lupus at ximian.com> scribbled:
Updated patch attached.
regards,
marek
> On 08/23/07 Marek Habersack wrote:
> > <?xml version="1.0"?>
> > <configuration>
> > <runtime>
> > <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
> > <probing privatePath="test:libraries" />
> > </assemblyBinding>
> > </runtime>
> > </configuration>
>
> > Index: mono/metadata/appdomain.c
> > ===================================================================
> > --- mono/metadata/appdomain.c (revision 84664)
> > +++ mono/metadata/appdomain.c (working copy)
> [...]
> > static gunichar2 process_guid [36];
> > @@ -484,6 +491,114 @@
> > return root->domain;
> > }
> >
> > +static
> > +char* get_attribute_value (const gchar **attribute_names,
>
> static char*
> get_attribute_value (...)
>
> > + const gchar **attribute_values,
> > + const char *att_name)
> > +{
> > + int n;
> > + for (n=0; attribute_names[n] != NULL; n++) {
>
> You need spaces around = and before an opening paren.
>
> > + if (strcmp (attribute_names[n], att_name) == 0)
> > + return g_strdup (attribute_values[n]);
> > + }
> > + return NULL;
> > +}
> > +
> > +static void start_element (GMarkupParseContext *context,
>
> static void on its own line.
>
> > + const gchar *element_name,
> > + const gchar **attribute_names,
>
> The args are aligned with random amounts of tabs and spaces.
>
> > + const gchar **attribute_values,
> > + gpointer user_data,
> > + GError **error)
> > +{
> > + RuntimeConfig *runtime_config = (RuntimeConfig*) user_data;
>
> Remove the useless cast.
>
> > + if (strcmp (element_name, "runtime") == 0) {
> > + runtime_config->runtime_count++;
> > + return;
> > + }
> > +
> > + if (strcmp (element_name, "assemblyBinding") == 0) {
> > + runtime_config->assemblybinding_count++;
> > + return;
> > + }
> > +
> > + if (runtime_config->runtime_count != 1 ||
> > runtime_config->assemblybinding_count != 1)
> > + return;
> > +
> > + if (strcmp (element_name, "probing") != 0)
> > + return;
> > +
> > + runtime_config->domain->private_bin_path = get_attribute_value
> > (attribute_names, attribute_values, "privatePath");
>
> If private_bin_path had a value it is leaked.
>
> > +static void
> > +mono_set_private_bin_path_from_config (MonoDomain *domain)
> > +{
> > + gchar *config_file, *text, *runtime_start;
> > + gsize len;
> > + struct stat sbuf;
> > + GMarkupParseContext *context;
> > + RuntimeConfig *runtime_config;
> > +
> > + if (!domain || !domain->setup
> > || !domain->setup->configuration_file)
> > + return;
> > +
> > + config_file = mono_string_to_utf8
> > (domain->setup->configuration_file);
> > + if (stat (config_file, &sbuf) != 0) {
> > + g_free (config_file);
> > + return;
> > + }
> > +
> > + if (!g_file_get_contents (config_file, &text, &len, NULL)) {
> > + g_free (config_file);
> > + return;
> > + }
> > + g_free (config_file);
> > +
> > + runtime_start = strstr (text, "<runtime>");
> > + if (!runtime_start) {
> > + g_free (text);
> > + return;
> > + }
>
> Please remove this questionable (because it is buggy) hack.
>
> > + runtime_config = g_new0 (RuntimeConfig, 1);
>
> No need to alloc/free this struct, just put it in the stack as a local var.
>
> > + runtime_config->domain = domain;
> > +
> > + context = g_markup_parse_context_new (&mono_parser, 0,
> > runtime_config, NULL);
> > + if (g_markup_parse_context_parse (context, runtime_start, len -
> > (runtime_start - text), NULL))
> > + g_markup_parse_context_end_parse (context, NULL);
>
> XML files need to parsed from the start, not from a ranom spot.
> Please also make sure no new warning are added to the compilation and
> that the test case actually runs.
>
> Thanks!
>
> lupus
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Bug57612.diff
Type: text/x-patch
Size: 6289 bytes
Desc: not available
Url : http://lists.ximian.com/pipermail/mono-devel-list/attachments/20070823/1a5d37d0/attachment.bin
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 194 bytes
Desc: not available
Url : http://lists.ximian.com/pipermail/mono-devel-list/attachments/20070823/1a5d37d0/attachment-0001.bin
More information about the Mono-devel-list
mailing list