@@ -63,18 +63,6 @@ typedef struct {
63
63
gboolean framework_facade_assembly ;
64
64
} AssemblyVersionMap ;
65
65
66
- /* Flag bits for assembly_names_equal_flags (). */
67
- typedef enum {
68
- /* Default comparison: all fields must match */
69
- ANAME_EQ_NONE = 0x0 ,
70
- /* Don't compare public key token */
71
- ANAME_EQ_IGNORE_PUBKEY = 0x1 ,
72
- /* Don't compare the versions */
73
- ANAME_EQ_IGNORE_VERSION = 0x2 ,
74
-
75
- ANAME_EQ_MASK = 0x3
76
- } AssemblyNameEqFlags ;
77
-
78
66
/* the default search path is empty, the first slot is replaced with the computed value */
79
67
static const char *
80
68
default_path [] = {
@@ -359,9 +347,6 @@ mono_assembly_is_in_gac (const gchar *filanem);
359
347
static MonoAssembly *
360
348
prevent_reference_assembly_from_running (MonoAssembly * candidate , gboolean refonly );
361
349
362
- static gboolean
363
- assembly_names_equal_flags (MonoAssemblyName * l , MonoAssemblyName * r , AssemblyNameEqFlags flags );
364
-
365
350
/* Assembly name matching */
366
351
static gboolean
367
352
exact_sn_match (MonoAssemblyName * wanted_name , MonoAssemblyName * candidate_name );
@@ -685,28 +670,44 @@ check_policy_versions (MonoAssemblyBindingInfo *info, MonoAssemblyName *name)
685
670
gboolean
686
671
mono_assembly_names_equal (MonoAssemblyName * l , MonoAssemblyName * r )
687
672
{
688
- return assembly_names_equal_flags (l , r , ANAME_EQ_NONE );
673
+ return mono_assembly_names_equal_flags (l , r , MONO_ANAME_EQ_NONE );
689
674
}
690
675
676
+ /**
677
+ * mono_assembly_names_equal_flags:
678
+ * \param l first assembly name
679
+ * \param r second assembly name
680
+ * \param flags flags that affect what is compared.
681
+ *
682
+ * Compares two \c MonoAssemblyName instances and returns whether they are equal.
683
+ *
684
+ * This compares the simple names and cultures and optionally the versions and
685
+ * public key tokens, depending on the \c flags.
686
+ *
687
+ * \returns TRUE if both assembly names are equal.
688
+ */
691
689
gboolean
692
- assembly_names_equal_flags (MonoAssemblyName * l , MonoAssemblyName * r , AssemblyNameEqFlags flags )
690
+ mono_assembly_names_equal_flags (MonoAssemblyName * l , MonoAssemblyName * r , MonoAssemblyNameEqFlags flags )
693
691
{
694
692
if (!l -> name || !r -> name )
695
693
return FALSE;
696
694
697
- if (strcmp (l -> name , r -> name ))
695
+ if ((flags & MONO_ANAME_EQ_IGNORE_CASE ) != 0 && g_strcasecmp (l -> name , r -> name ))
696
+ return FALSE;
697
+
698
+ if ((flags & MONO_ANAME_EQ_IGNORE_CASE ) == 0 && strcmp (l -> name , r -> name ))
698
699
return FALSE;
699
700
700
701
if (l -> culture && r -> culture && strcmp (l -> culture , r -> culture ))
701
702
return FALSE;
702
703
703
704
if ((l -> major != r -> major || l -> minor != r -> minor ||
704
705
l -> build != r -> build || l -> revision != r -> revision ) &&
705
- (flags & ANAME_EQ_IGNORE_VERSION ) == 0 )
706
+ (flags & MONO_ANAME_EQ_IGNORE_VERSION ) == 0 )
706
707
if (! ((l -> major == 0 && l -> minor == 0 && l -> build == 0 && l -> revision == 0 ) || (r -> major == 0 && r -> minor == 0 && r -> build == 0 && r -> revision == 0 )))
707
708
return FALSE;
708
709
709
- if (!l -> public_key_token [0 ] || !r -> public_key_token [0 ] || (flags & ANAME_EQ_IGNORE_PUBKEY ) != 0 )
710
+ if (!l -> public_key_token [0 ] || !r -> public_key_token [0 ] || (flags & MONO_ANAME_EQ_IGNORE_PUBKEY ) != 0 )
710
711
return TRUE;
711
712
712
713
if (!mono_public_tokens_are_equal (l -> public_key_token , r -> public_key_token ))
@@ -3626,13 +3627,13 @@ framework_assembly_sn_match (MonoAssemblyName *wanted_name, MonoAssemblyName *ca
3626
3627
if (vmap ) {
3627
3628
if (!vmap -> framework_facade_assembly ) {
3628
3629
/* If the wanted name is a framework assembly, it's enough for the name/version/culture to match. If the assembly was remapped, the public key token is likely unrelated. */
3629
- gboolean result = assembly_names_equal_flags (wanted_name , candidate_name , ANAME_EQ_IGNORE_PUBKEY );
3630
+ gboolean result = mono_assembly_names_equal_flags (wanted_name , candidate_name , MONO_ANAME_EQ_IGNORE_PUBKEY );
3630
3631
mono_trace (G_LOG_LEVEL_INFO , MONO_TRACE_ASSEMBLY , "Predicate: candidate and wanted names %s (ignoring the public key token)" , result ? "match, returning TRUE" : "don't match, returning FALSE" );
3631
3632
return result ;
3632
3633
} else {
3633
3634
/* For facades, the name and public key token should
3634
3635
* match, but the version doesn't matter. */
3635
- gboolean result = assembly_names_equal_flags (wanted_name , candidate_name , ANAME_EQ_IGNORE_VERSION );
3636
+ gboolean result = mono_assembly_names_equal_flags (wanted_name , candidate_name , MONO_ANAME_EQ_IGNORE_VERSION );
3636
3637
mono_trace (G_LOG_LEVEL_INFO , MONO_TRACE_ASSEMBLY , "Predicate: candidate and wanted names %s (ignoring version)" , result ? "match, returning TRUE" : "don't match, returning FALSE" );
3637
3638
return result ;
3638
3639
}
0 commit comments