X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fconsole-unix.c;h=38a82c92e957f3cb76cde6f66bd2031f6009c881;hb=c5d8e417e2531b56dc765e38f3d5cb1156cf4224;hp=fe59f700ea987d7a621daff20544b7808ec62acd;hpb=8004de2b79b64d8a09ea173b7b2ca679dc54699c;p=mono.git diff --git a/mono/metadata/console-unix.c b/mono/metadata/console-unix.c index fe59f700ea9..38a82c92e95 100644 --- a/mono/metadata/console-unix.c +++ b/mono/metadata/console-unix.c @@ -5,6 +5,7 @@ * Gonzalo Paniagua Javier (gonzalo@ximian.com) * * Copyright (C) 2005-2009 Novell, Inc. (http://www.novell.com) + * Licensed under the MIT license. See LICENSE file in the project root for full license information. */ #if defined(__native_client__) #include "console-null.c" @@ -246,15 +247,21 @@ do_console_cancel_event (void) mono_error_cleanup (&error); return; } - mono_field_static_get_value (vtable, cancel_handler_field, &load_value); - if (load_value == NULL) + mono_field_static_get_value_checked (vtable, cancel_handler_field, &load_value, &error); + if (load_value == NULL || !is_ok (&error)) { + mono_error_cleanup (&error); return; + } klass = load_value->object.vtable->klass; method = mono_class_get_method_from_name (klass, "BeginInvoke", -1); g_assert (method != NULL); - mono_threadpool_ms_begin_invoke (domain, (MonoObject*) load_value, method, NULL); + mono_threadpool_ms_begin_invoke (domain, (MonoObject*) load_value, method, NULL, &error); + if (!is_ok (&error)) { + g_warning ("Couldn't invoke System.Console cancel handler due to %s", mono_error_get_message (&error)); + mono_error_cleanup (&error); + } } static int need_cancel = FALSE; @@ -440,6 +447,8 @@ set_control_chars (MonoArray *control_chars, const guchar *cc) MonoBoolean ves_icall_System_ConsoleDriver_TtySetup (MonoString *keypad, MonoString *teardown, MonoArray **control_chars, int **size) { + MonoError error; + int dims; dims = terminal_get_dimensions (); @@ -465,7 +474,10 @@ ves_icall_System_ConsoleDriver_TtySetup (MonoString *keypad, MonoString *teardow /* 17 is the number of entries set in set_control_chars() above. * NCCS is the total size, but, by now, we only care about those 17 values*/ - mono_gc_wbarrier_generic_store (control_chars, (MonoObject*) mono_array_new (mono_domain_get (), mono_defaults.byte_class, 17)); + MonoArray *control_chars_arr = mono_array_new_checked (mono_domain_get (), mono_defaults.byte_class, 17, &error); + if (mono_error_set_pending_exception (&error)) + return FALSE; + mono_gc_wbarrier_generic_store (control_chars, (MonoObject*) control_chars_arr); if (tcgetattr (STDIN_FILENO, &initial_attr) == -1) return FALSE; @@ -486,13 +498,21 @@ ves_icall_System_ConsoleDriver_TtySetup (MonoString *keypad, MonoString *teardow if (setup_finished) return TRUE; - keypad_xmit_str = keypad != NULL ? mono_string_to_utf8 (keypad) : NULL; + keypad_xmit_str = NULL; + if (keypad != NULL) { + keypad_xmit_str = mono_string_to_utf8_checked (keypad, &error); + if (mono_error_set_pending_exception (&error)) + return FALSE; + } console_set_signal_handlers (); setup_finished = TRUE; if (!atexit_called) { - if (teardown != NULL) - teardown_str = mono_string_to_utf8 (teardown); + if (teardown != NULL) { + teardown_str = mono_string_to_utf8_checked (teardown, &error); + if (mono_error_set_pending_exception (&error)) + return FALSE; + } mono_atexit (tty_teardown); }