MonoString *
ves_icall_System_String_ctor_encoding (gpointer dummy, gint8 *value, gint32 sindex,
- gint32 length, MonoObject *enc)
+ gint32 length, MonoObject *enc)
{
MonoArray *arr;
MonoString *s;
MonoDomain *domain = mono_domain_get ();
MonoMethod *get_string;
gpointer args [1];
+ MonoClass *klass;
MONO_ARCH_SAVE_REGS;
mono_raise_exception (mono_get_exception_argument_out_of_range ("length"));
arr = mono_array_new (domain, mono_defaults.byte_class, length);
- memcpy (mono_array_addr (arr, guint8*, 0), value + sindex, length);
+ memcpy (mono_array_addr (arr, guint8, 0), value + sindex, length);
- get_string = mono_class_get_method_from_name (enc->vtable->klass, "GetString", 1);
+ /* Find the System.Text.Encoding class */
+ for (klass = enc->vtable->klass; klass->parent->parent != NULL; klass = klass->parent)
+ ;
+
+ get_string = mono_class_get_method_from_name (klass, "GetString", 1);
args [0] = arr;
s = (MonoString*)mono_runtime_invoke (get_string, enc, args, &exc);
if (!s || exc)
/* if no split chars found return the string */
if (splitsize == 0) {
retarr = mono_array_new(mono_domain_get(), mono_get_string_class (), 1);
- mono_array_set(retarr, MonoString *, 0, me);
+ mono_array_setref (retarr, 0, me);
return retarr;
}
tmpstrptr = mono_string_chars(tmpstr);
memcpy(tmpstrptr, src + lastpos, tmpstrsize * sizeof(gunichar2));
- mono_array_set(retarr, MonoString *, arrpos, tmpstr);
+ mono_array_setref (retarr, arrpos, tmpstr);
arrpos++;
lastpos = i + 1;
}
tmpstrptr = mono_string_chars(tmpstr);
memcpy(tmpstrptr, src + lastpos, tmpstrsize * sizeof(gunichar2));
- mono_array_set(retarr, MonoString *, arrpos, tmpstr);
+ mono_array_setref (retarr, arrpos, tmpstr);
}
return retarr;