Merge pull request #3119 from kumpera/fix-getname-and-shadowcopy
[mono.git] / mono / metadata / icall.c
index 4376addf3e091105345b82a2cc53daca0e94154f..636d7eab796547ce4fb7d2f79a42a5193f7cad71 100644 (file)
@@ -5632,15 +5632,20 @@ ICALL_EXPORT void
 ves_icall_System_Reflection_Assembly_FillName (MonoReflectionAssembly *assembly, MonoReflectionAssemblyName *aname)
 {
        MonoError error;
-       gchar *absolute;
+       gchar *absolute, *dirname;
        MonoAssembly *mass = assembly->assembly;
 
+       /* XXX this is duplicated code to compute the codebase URI, unify it */
        if (g_path_is_absolute (mass->image->name)) {
-               fill_reflection_assembly_name (mono_object_domain (assembly), aname, &mass->aname, mass->image->name, TRUE, TRUE, TRUE, &error);
-               mono_error_set_pending_exception (&error);
-               return;
+               absolute = g_strdup (mass->image->name);
+               dirname = g_path_get_dirname (absolute);
+       } else {
+               absolute = g_build_filename (mass->basedir, mass->image->name, NULL);
+               dirname = g_strdup (mass->basedir);
        }
-       absolute = g_build_filename (mass->basedir, mass->image->name, NULL);
+
+       replace_shadow_path (mono_object_domain (assembly), dirname, &absolute);
+       g_free (dirname);
 
        fill_reflection_assembly_name (mono_object_domain (assembly), aname, &mass->aname, absolute, TRUE, TRUE, TRUE, &error);
        mono_error_set_pending_exception (&error);