From 2caa96dcc97b7d34c5186214a247874b3355071b Mon Sep 17 00:00:00 2001 From: John Mark Bell Date: Thu, 12 Oct 2006 14:00:40 +0000 Subject: Fix attempts to call die() before messages_hash exists: 1) Make hash_* more robust in the face of bad parameters 2) Make messages_* more robust in the face of bad parameters 3) Tidy up gui_init such that localised messages are loaded at the earliest opportunity svn path=/trunk/netsurf/; revision=2998 --- riscos/gui.c | 114 +++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 71 insertions(+), 43 deletions(-) (limited to 'riscos/gui.c') diff --git a/riscos/gui.c b/riscos/gui.c index bb2fe3e18..25f54d590 100644 --- a/riscos/gui.c +++ b/riscos/gui.c @@ -299,33 +299,24 @@ void gui_init(int argc, char** argv) while (*help == 9) help++; if (!memcmp(help, "0.55", 4)) #endif - ro_plot_patterned_lines = false; + ro_plot_patterned_lines = false; } - atexit(ro_gui_cleanup); - prev_sigs.sigabrt = signal(SIGABRT, ro_gui_signal); - prev_sigs.sigfpe = signal(SIGFPE, ro_gui_signal); - prev_sigs.sigill = signal(SIGILL, ro_gui_signal); - prev_sigs.sigint = signal(SIGINT, ro_gui_signal); - prev_sigs.sigsegv = signal(SIGSEGV, ro_gui_signal); - prev_sigs.sigterm = signal(SIGTERM, ro_gui_signal); - - if (prev_sigs.sigabrt == SIG_ERR || prev_sigs.sigfpe == SIG_ERR || - prev_sigs.sigill == SIG_ERR || - prev_sigs.sigint == SIG_ERR || - prev_sigs.sigsegv == SIG_ERR || - prev_sigs.sigterm == SIG_ERR) - die("Failed registering signal handlers"); - - filename_initialise(); + /* Read in the options */ + options_read("NetSurf:Choices"); -#ifdef WITH_SAVE_COMPLETE - save_complete_init(); -#endif + /* Choose the interface language to use */ + ro_gui_choose_language(); - options_read("NetSurf:Choices"); + /* Load in our language-specific Messages */ + if ((length = snprintf(path, sizeof(path), + "NetSurf:Resources.%s.Messages", + option_language)) < 0 || length >= (int)sizeof(path)) + die("Failed to locate Messages resource."); + messages_load(path); + messages_load("NetSurf:Resources.LangNames"); - /* set defaults for absent strings */ + /* Set defaults for absent option strings */ if (!option_theme) option_theme = strdup("Aletheia"); if (!option_toolbar_browser) @@ -369,18 +360,31 @@ void gui_init(int argc, char** argv) !option_theme_save) die("Failed initialising string options"); - /* create our choices directories */ + /* Create our choices directories */ ro_gui_create_dirs(); + /* Register exit and signal handlers */ + atexit(ro_gui_cleanup); + prev_sigs.sigabrt = signal(SIGABRT, ro_gui_signal); + prev_sigs.sigfpe = signal(SIGFPE, ro_gui_signal); + prev_sigs.sigill = signal(SIGILL, ro_gui_signal); + prev_sigs.sigint = signal(SIGINT, ro_gui_signal); + prev_sigs.sigsegv = signal(SIGSEGV, ro_gui_signal); + prev_sigs.sigterm = signal(SIGTERM, ro_gui_signal); + + if (prev_sigs.sigabrt == SIG_ERR || prev_sigs.sigfpe == SIG_ERR || + prev_sigs.sigill == SIG_ERR || + prev_sigs.sigint == SIG_ERR || + prev_sigs.sigsegv == SIG_ERR || + prev_sigs.sigterm == SIG_ERR) + die("Failed registering signal handlers"); + + /* Load in UI sprites */ gui_sprites = ro_gui_load_sprite_file("NetSurf:Resources.Sprites"); if (!gui_sprites) die("Unable to load Sprites."); - ro_gui_choose_language(); - - bitmap_initialise_memory(); - urldb_load(option_url_path); - urldb_load_cookies(option_cookie_file); + /* Find NetSurf directory */ nsdir_temp = getenv("NetSurf$Dir"); if (!nsdir_temp) die("Failed to locate NetSurf directory"); @@ -388,18 +392,28 @@ void gui_init(int argc, char** argv) if (!NETSURF_DIR) die("Failed duplicating NetSurf directory string"); - if ((length = snprintf(path, sizeof(path), - "NetSurf:Resources.%s.Messages", - option_language)) < 0 || length >= (int)sizeof(path)) - die("Failed to locate Messages resource."); - messages_load(path); - messages_load("NetSurf:Resources.LangNames"); - + /* Initialise stylesheet URLs */ default_stylesheet_url = strdup("file:///NetSurf:/Resources/CSS"); adblock_stylesheet_url = strdup("file:///NetSurf:/Resources/AdBlock"); if (!default_stylesheet_url || !adblock_stylesheet_url) die("Failed initialising string constants."); + /* Initialise filename allocator */ + filename_initialise(); + + /* Initialise save complete functionality */ +#ifdef WITH_SAVE_COMPLETE + save_complete_init(); +#endif + + /* Initialise bitmap memory pool */ + bitmap_initialise_memory(); + + /* Load in visited URLs and Cookies */ + urldb_load(option_url_path); + urldb_load_cookies(option_cookie_file); + + /* Initialise with the wimp */ error = xwimp_initialise(wimp_VERSION_RO38, task_name, (const wimp_message_list *) &task_messages, 0, &task_handle); @@ -408,7 +422,7 @@ void gui_init(int argc, char** argv) error->errnum, error->errmess)); die(error->errmess); } - /* register our message handlers */ + /* Register message handlers */ ro_message_register_route(message_HELP_REQUEST, ro_gui_interactive_help_request); ro_message_register_route(message_DATA_OPEN, @@ -427,9 +441,11 @@ void gui_init(int argc, char** argv) ro_gui_selection_drag_claim); ro_message_register_route(message_WINDOW_INFO, ro_msg_window_info); - /* end of handler registration */ + /* Initialise the font subsystem */ nsfont_init(); + + /* Initialise global information */ ro_gui_get_screen_properties(); ro_gui_wimp_get_desktop_font(); @@ -437,8 +453,7 @@ void gui_init(int argc, char** argv) if (getenv("NetSurf$Start_URI_Handler")) xwimp_start_task("Desktop", 0); - /* Open the templates - */ + /* Open the templates */ if ((length = snprintf(path, sizeof(path), "NetSurf:Resources.%s.Templates", option_language)) < 0 || length >= (int)sizeof(path)) @@ -449,17 +464,30 @@ void gui_init(int argc, char** argv) error->errnum, error->errmess)); die(error->errmess); } - ro_gui_theme_initialise(); /* initialise themes before dialogs */ - ro_gui_dialog_init(); /* must be done after sprite loading */ + + /* Initialise themes before dialogs */ + ro_gui_theme_initialise(); + /* Initialise dialog windows (must be after UI sprites are loaded) */ + ro_gui_dialog_init(); + /* Initialise download window */ ro_gui_download_init(); + /* Initialise menus */ ro_gui_menu_init(); + /* Initialise query windows */ ro_gui_query_init(); + /* Initialise the history subsystem */ ro_gui_history_init(); + + /* Done with the templates file */ wimp_close_template(); - ro_gui_tree_initialise(); /* must be done after sprite loading */ + /* Initialise tree views (must be after UI sprites are loaded) */ + ro_gui_tree_initialise(); + /* Create Iconbar icon */ ro_gui_icon_bar_create(); + + /* Finally, check Inet$Resolvers for sanity */ ro_gui_check_resolvers(); } @@ -2196,7 +2224,7 @@ void warn_user(const char *warning, const char *detail) * Should only be used during initialisation. */ -void die(const char *error) +void die(const char * const error) { os_error warn_error; -- cgit v1.2.3