[runtime] Don't insta-fail when a faulty COM type is encountered. (#5616)
[mono.git] / mono / utils / mono-error.c
index 06fd8a7ffce5505dd13a44e9b499e66d27719791..27f2b62fb248ff784d2f6dbc9b350f98a7613d07 100644 (file)
@@ -176,6 +176,17 @@ mono_error_get_error_code (MonoError *error)
        return error->error_code;
 }
 
+const char*
+mono_error_get_exception_name (MonoError *oerror)
+{
+       MonoErrorInternal *error = (MonoErrorInternal*)oerror;
+
+       if (error->error_code == MONO_ERROR_NONE)
+               return NULL;
+
+       return error->exception_name;
+}
+
 /*Return a pointer to the internal error message, might be NULL.
 Caller should not release it.*/
 const char*
@@ -459,6 +470,20 @@ mono_error_set_invalid_operation (MonoError *oerror, const char *msg_format, ...
        va_end (args);
 }
 
+/**
+ * mono_error_set_file_not_found:
+ *
+ * System.IO.FileNotFoundException
+ */
+void
+mono_error_set_file_not_found (MonoError *oerror, const char *msg_format, ...)
+{
+       va_list args;
+       va_start (args, msg_format);
+       mono_error_set_generic_errorv (oerror, "System.IO", "FileNotFoundException", msg_format, args);
+       va_end (args);
+}
+
 void
 mono_error_set_invalid_program (MonoError *oerror, const char *msg_format, ...)
 {
@@ -470,6 +495,17 @@ mono_error_set_invalid_program (MonoError *oerror, const char *msg_format, ...)
        set_error_message ();
 }
 
+/**
+ * mono_error_set_invalid_cast:
+ *
+ * System.InvalidCastException
+ */
+void
+mono_error_set_invalid_cast (MonoError *oerror)
+{
+        mono_error_set_generic_error (oerror, "System", "InvalidCastException", "");
+}
+
 void
 mono_error_set_exception_instance (MonoError *oerror, MonoException *exc)
 {
@@ -652,6 +688,8 @@ mono_error_prepare_exception (MonoError *oerror, MonoError *error_out)
                                        mono_error_set_out_of_memory (error_out, "Could not allocate assembly name");
                                        break;
                                }
+                       } else {
+                               assembly_name = mono_string_empty (domain);
                        }
 
                        exception = mono_exception_from_name_two_strings_checked (mono_get_corlib (), "System", "TypeLoadException", type_name, assembly_name, error_out);