2007-05-11 Jonathan Chambers <joncham@gmail.com>
[mono.git] / mono / metadata / string-icalls.c
index d8577c8111f2d9dda80ec1b63c8762d46fe5115c..71bd1f7ebe0f84a29f8570e354c3669b487aec17 100644 (file)
@@ -18,7 +18,6 @@
 #include <mono/metadata/tabledefs.h>
 #include <mono/metadata/loader.h>
 #include <mono/metadata/object.h>
-#include <mono/metadata/unicode.h>
 #include <mono/metadata/exception.h>
 #include <mono/metadata/debug-helpers.h>
 
@@ -64,11 +63,10 @@ ves_icall_System_String_ctor_charp (gpointer dummy, gunichar2 *value)
        domain = mono_domain_get ();
 
        if (value == NULL)
-               length = 0;
-       else {
-               for (i = 0; *(value + i) != '\0'; i++);
-               length = i;
-       }
+               return empty_string (domain);
+
+       for (i = 0; *(value + i) != '\0'; i++);
+       length = i;
 
        return mono_string_new_utf16 (domain, value, length);
 }
@@ -224,7 +222,7 @@ 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);
 
        /* Find the System.Text.Encoding class */
        for (klass = enc->vtable->klass; klass->parent->parent != NULL; klass = klass->parent)
@@ -239,6 +237,14 @@ ves_icall_System_String_ctor_encoding (gpointer dummy, gint8 *value, gint32 sind
        return s;
 }
 
+/* This function is redirected to String.CreateString ()
+   by mono_marshal_get_native_wrapper () */
+void
+ves_icall_System_String_ctor_RedirectToCreateString (void)
+{
+       g_assert_not_reached ();
+}
+
 MonoString * 
 ves_icall_System_String_InternalJoin (MonoString *separator, MonoArray * value, gint32 sindex, gint32 count)
 {
@@ -411,7 +417,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;
        }
@@ -431,7 +437,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;
                }
@@ -443,7 +449,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;