void mono_loader_set_error_from_mono_error (MonoError *oerror) { MonoErrorInternal *error = (MonoErrorInternal*)oerror; switch (error->error_code) { case MONO_ERROR_MISSING_METHOD: mono_loader_set_error_method_load (get_type_name (error), error->member_name); break; case MONO_ERROR_MISSING_FIELD: mono_loader_set_error_field_load (error->exn.klass, error->member_name); break; case MONO_ERROR_TYPE_LOAD: mono_loader_set_error_type_load (get_type_name (error), get_assembly_name (error)); break; case MONO_ERROR_FILE_NOT_FOUND: /* XXX can't recover if it's ref only or not */ mono_loader_set_error_assembly_load (get_assembly_name (error), FALSE); break; case MONO_ERROR_BAD_IMAGE: mono_loader_set_error_bad_image (g_strdup (error->full_message)); break; case MONO_ERROR_EXCEPTION_INSTANCE: mono_loader_set_error_bad_image (g_strdup_printf ("Non translatable error")); default: mono_loader_set_error_bad_image (g_strdup_printf ("Non translatable error: %s", error->full_message)); } }
/*Return a pointer to the internal error message, might be NULL. Caller should not release it.*/ const char* mono_error_get_message (MonoError *oerror) { MonoErrorInternal *error = (MonoErrorInternal*)oerror; const guint16 error_code = error->error_code; if (error_code == MONO_ERROR_NONE) return NULL; g_assert (error_code != MONO_ERROR_CLEANUP_CALLED_SENTINEL); //Those are the simplified errors switch (error_code) { case MONO_ERROR_MISSING_METHOD: case MONO_ERROR_BAD_IMAGE: case MONO_ERROR_FILE_NOT_FOUND: case MONO_ERROR_MISSING_FIELD: return error->full_message; } if (error->full_message_with_fields) return error->full_message_with_fields; error->full_message_with_fields = g_strdup_printf ("%s assembly:%s type:%s member:%s", error->full_message, get_assembly_name (error), get_type_name (error), error->member_name); return error->full_message_with_fields ? error->full_message_with_fields : error->full_message; }
/*Return a pointer to the internal error message, might be NULL. Caller should not release it.*/ const char* mono_error_get_message (MonoError *oerror) { MonoErrorInternal *error = (MonoErrorInternal*)oerror; if (error->error_code == MONO_ERROR_NONE) return NULL; if (error->full_message_with_fields) return error->full_message_with_fields; error->full_message_with_fields = g_strdup_printf ("%s assembly:%s type:%s member:%s", error->full_message, get_assembly_name (error), get_type_name (error), error->member_name ? error->member_name : "<none>"); return error->full_message_with_fields ? error->full_message_with_fields : error->full_message; }