2006-06-15 Zoltan Varga <vargaz@gmail.com>
[mono.git] / mono / metadata / string-icalls.c
index 38e8a5668c96b2a4d7a6afcaaebc1d44dc7135a0..4d8086917029cbffc946a4006ca4dfad8aaca064 100644 (file)
@@ -202,7 +202,7 @@ ves_icall_System_String_ctor_chara_int_int (gpointer dummy, MonoArray *value,
 
 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;
@@ -210,6 +210,7 @@ ves_icall_System_String_ctor_encoding (gpointer dummy, gint8 *value, gint32 sind
        MonoDomain *domain = mono_domain_get ();
        MonoMethod *get_string;
        gpointer args [1];
+       MonoClass *klass;
 
        MONO_ARCH_SAVE_REGS;
 
@@ -223,9 +224,13 @@ ves_icall_System_String_ctor_encoding (gpointer dummy, gint8 *value, gint32 sind
                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)
@@ -406,7 +411,7 @@ ves_icall_System_String_InternalSplit (MonoString *me, MonoArray *separator, gin
        /* 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;
        }
@@ -426,7 +431,7 @@ ves_icall_System_String_InternalSplit (MonoString *me, MonoArray *separator, gin
                        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;
                }
@@ -438,7 +443,7 @@ ves_icall_System_String_InternalSplit (MonoString *me, MonoArray *separator, gin
                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;