[runtime] Use MonoError for mono_string_new_utf16
authorAleksey Kliger <aleksey@xamarin.com>
Wed, 27 Jan 2016 17:04:21 +0000 (12:04 -0500)
committerAleksey Kliger <aleksey@xamarin.com>
Wed, 27 Jan 2016 20:35:09 +0000 (15:35 -0500)
mono/metadata/object-internals.h
mono/metadata/object.c

index 3700043213cdf11a4fff6ee33ab6edf34d4014b9..8221594d3e9dddfa46ab3d5dd761a68f4d372dff 100644 (file)
@@ -1692,6 +1692,9 @@ mono_object_clone_checked (MonoObject *obj, MonoError *error);
 MonoString *
 mono_string_new_size_checked (MonoDomain *domain, gint32 len, MonoError *error);
 
+MonoString *
+mono_string_new_utf16_checked (MonoDomain *domain, const guint16 *text, gint32 len, MonoError *error);
+
 #endif /* __MONO_OBJECT_INTERNALS_H__ */
 
 
index bd31aaa2a8be8a431b5335ba6ebdf626fcfcfadb..77cbbebf8f4ae818c4a29077b970f36bbf5305ce 100644 (file)
@@ -5163,12 +5163,34 @@ mono_string_new_utf16 (MonoDomain *domain, const guint16 *text, gint32 len)
        MONO_REQ_GC_UNSAFE_MODE;
 
        MonoError error;
+       MonoString *res = NULL;
+       res = mono_string_new_utf16_checked (domain, text, len, &error);
+       mono_error_raise_exception (&error);
+
+       return res;
+}
+
+/**
+ * mono_string_new_utf16_checked:
+ * @text: a pointer to an utf16 string
+ * @len: the length of the string
+ * @error: written on error.
+ *
+ * Returns: A newly created string object which contains @text.
+ * On error, returns NULL and sets @error.
+ */
+MonoString *
+mono_string_new_utf16_checked (MonoDomain *domain, const guint16 *text, gint32 len, MonoError *error)
+{
+       MONO_REQ_GC_UNSAFE_MODE;
+
        MonoString *s;
        
-       s = mono_string_new_size_checked (domain, len, &error);
-       mono_error_raise_exception (&error); /* FIXME don't raise here */
-
-       memcpy (mono_string_chars (s), text, len * 2);
+       mono_error_init (error);
+       
+       s = mono_string_new_size_checked (domain, len, error);
+       if (s != NULL)
+               memcpy (mono_string_chars (s), text, len * 2);
 
        return s;
 }