* icall.c (ves_icall_System_Enum_ToObject): in case of big endian
and s2 > s1, just copy lower bytes to be compatible with little
endian (i.e. 64bit value & 0xffffffff --> 32bit value)
svn path=/trunk/mono/; revision=2454
2002-02-16 Radek Doulik <rodo@ximian.com>
+ * icall.c (ves_icall_System_Enum_ToObject): in case of big endian
+ and s2 > s1, just copy lower bytes to be compatible with little
+ endian (i.e. 64bit value & 0xffffffff --> 32bit value)
+
* unicode.c (ves_icall_iconv_new_encoder): decide on big_endian,
force big_endian to be 1 for big endian machines
(ves_icall_iconv_new_decoder): ditto
s2 = mono_class_value_size (obj->vtable->klass, NULL);
res = mono_object_new (domain, enumc);
- memcpy ((gpointer)res + sizeof (MonoObject), (gpointer)obj + sizeof (MonoObject), MIN (s1, s2));
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
+ memcpy ((gpointer)res + sizeof (MonoObject), (gpointer)obj + sizeof (MonoObject), MIN (s1, s2));
+#else
+ memcpy ((gpointer)res + sizeof (MonoObject), (gpointer)obj + sizeof (MonoObject) + (s2 > s1 ? s2 - s1 : 0),
+ MIN (s1, s2));
+#endif
return res;
}