[Mono-dev] [Patch] AssemblyName ctor (with corrections)
Paolo Molaro
lupus at ximian.com
Wed Sep 14 14:45:58 EDT 2005
On 09/01/05 Carlos Alberto Cortez wrote:
> Index: AssemblyName.cs
> ===================================================================
> --- AssemblyName.cs (revisión: 48811)
> +++ AssemblyName.cs (copia de trabajo)
> @@ -37,6 +37,7 @@
> using System.Text;
> using System.Runtime.InteropServices;
> using System.Runtime.CompilerServices;
> +using System.IO;
>
> using Mono.Security;
>
> @@ -80,12 +81,23 @@
> versioncompat = AssemblyVersionCompatibility.SameMachine;
> }
>
> -#if NET_2_0
> +#if NET_2_0 || BOOTSTRAP_NET_2_0
> + [MethodImpl (MethodImplOptions.InternalCall)]
> + static extern bool ParseName (AssemblyName aname, string assemblyName);
> +
> public AssemblyName (string assemblyName)
> {
> - name = assemblyName;
> + if (assemblyName == null)
> + throw new ArgumentNullException ("assemblyName");
> + if (assemblyName.Length < 1)
> + throw new ArgumentException ("assemblyName cannot have zero length.");
> +
> + if (!ParseName (this, assemblyName))
> + throw new FileLoadException ("The assembly name is invalid.");
Is a FileLoadException really ok? Do you have tests for this?
> Index: assembly.c
> ===================================================================
> --- assembly.c (revisión: 48811)
> +++ assembly.c (copia de trabajo)
> @@ -1171,10 +1171,92 @@
> g_free ((void *) aname->hash_value);
> }
>
> +static gint
> +to_int32_le (gchar bytes [], gint offset)
> +{
> + return (bytes [offset+3] << 24) | (bytes [offset+2] << 16) | (bytes [offset+1] << 8) | bytes [offset];
> +}
> +
The function name looks wrong. You should likely use read32() anyway.
> static gboolean
> -build_assembly_name (const char *name, const char *version, const char *culture, const char *token, MonoAssemblyName *aname)
> +parse_public_key (const gchar *key, const gchar** pubkey)
> {
[...]
> + if (key && strncmp (key, "null", 4) != 0) {
> + if (!parse_public_key (key, (const gchar**) &pkey)) {
Why declare parse_public_key() to take a const gchar** when it's not in
the only place it's called?
> +
> + if (!g_ascii_strncasecmp (value, "PublicKey=", 10)) {
> + key = g_strstrip (value + 10);
Where is key freed?
> + tmp++;
> + continue;
> + }
>
> g_strfreev (parts);
> return FALSE;
> }
>
> - res = build_assembly_name (dllname, version, culture, token, aname);
> + res = build_assembly_name (dllname, version, culture, token, key, aname, save_public_key);
> g_strfreev (parts);
> return res;
> }
[...]
> Index: icall.c
> ===================================================================
> --- icall.c (revisión: 48811)
> +++ icall.c (copia de trabajo)
> @@ -4152,9 +4152,11 @@
> mono_method_desc_free (desc);
> }
>
> - args [0] = mono_string_new (domain, name->culture);
> - aname->cultureInfo =
> - mono_runtime_invoke (create_culture, NULL, args, NULL);
> + if (name->culture) {
> + args [0] = mono_string_new (domain, name->culture);
> + aname->cultureInfo =
> + mono_runtime_invoke (create_culture, NULL, args, NULL);
Put on the same line.
Thanks.
Once you'll have fixed the remaining issues, please commit.
lupus
--
-----------------------------------------------------------------
lupus at debian.org debian/rules
lupus at ximian.com Monkeys do it better
More information about the Mono-devel-list
mailing list