diff --git a/common/utils/itti_analyzer/itti_analyzer.c b/common/utils/itti_analyzer/itti_analyzer.c index 9f2d7f20bb27141995ff26a5d45ab9e042132612..94f5c1c191e314c3e90790f5e5d2040cce6a7c7b 100644 --- a/common/utils/itti_analyzer/itti_analyzer.c +++ b/common/utils/itti_analyzer/itti_analyzer.c @@ -82,7 +82,8 @@ int main(int argc, char *argv[]) * between the version it was compiled for and the actual shared * library used. */ - LIBXML_TEST_VERSION + LIBXML_TEST_VERSION; + xmlInitParser(); /* Initialize the widget set */ gtk_init(&argc, &argv); @@ -94,5 +95,10 @@ int main(int argc, char *argv[]) /* Enter the main event loop, and wait for user interaction */ gtk_main (); + /* Free the global variables that may + * have been allocated by the parser. + */ + xmlCleanupParser (); + return ret; } diff --git a/common/utils/itti_analyzer/libparser/xml_parse.c b/common/utils/itti_analyzer/libparser/xml_parse.c index a810c1f1aa47adabcad64d3d2389e69ff5ad5905..20bc0dd9129292fc9ddbd38dca7df3740d1f391d 100644 --- a/common/utils/itti_analyzer/libparser/xml_parse.c +++ b/common/utils/itti_analyzer/libparser/xml_parse.c @@ -752,11 +752,6 @@ static int xml_parse_doc(xmlDocPtr doc) { /* Free the document */ xmlFreeDoc(doc); - /* Free the global variables that may - * have been allocated by the parser. - */ - xmlCleanupParser(); - if (ret == RC_OK) { resolve_typedefs (&head); resolve_pointer_type (&head); diff --git a/common/utils/itti_analyzer/libui/ui_filters.c b/common/utils/itti_analyzer/libui/ui_filters.c index 649631a8a35be7de2765667c47f8c6be491b90ac..5fe994b83a9eaacda76e8c61cb78ece0c24daf2d 100644 --- a/common/utils/itti_analyzer/libui/ui_filters.c +++ b/common/utils/itti_analyzer/libui/ui_filters.c @@ -214,7 +214,7 @@ static int xml_parse_filters(xmlDocPtr doc) xmlNode *filter_node = NULL; xmlNode *cur_node = NULL; ui_filter_e filter; - int ret = RC_OK; + int ret = RC_FAIL; /* Get the root element node */ root_element = xmlDocGetRootElement (doc); @@ -222,7 +222,7 @@ static int xml_parse_filters(xmlDocPtr doc) if (root_element != NULL) { /* Search for the start of filters definition */ - for (cur_node = root_element; (strcmp ((char *) cur_node->name, "filters") != 0) && (cur_node != NULL); + for (cur_node = root_element; (cur_node != NULL) && (strcmp ((char *) cur_node->name, "filters") != 0); cur_node = cur_node->next) ; @@ -265,6 +265,7 @@ static int xml_parse_filters(xmlDocPtr doc) cur_node->properties->children->content[0] == '0' ? ENTRY_ENABLED_FALSE : ENTRY_ENABLED_TRUE); + ret = RC_OK; cur_node = cur_node->next; } } @@ -281,12 +282,7 @@ static int xml_parse_filters(xmlDocPtr doc) /* Free the document */ xmlFreeDoc (doc); - /* Free the global variables that may - * have been allocated by the parser. - */ - xmlCleanupParser (); - - g_message("Parsed filters definition"); + g_message("Parsed XML filters definition"); return ret; } @@ -294,6 +290,7 @@ static int xml_parse_filters(xmlDocPtr doc) int ui_filters_read(const char *file_name) { xmlDocPtr doc; /* the resulting document tree */ + int ret; if (file_name == NULL) { @@ -310,7 +307,16 @@ int ui_filters_read(const char *file_name) return RC_FAIL; } - return xml_parse_filters (doc); + ret = xml_parse_filters (doc); + + if (ret != RC_OK) + { + g_warning("Found no filter definition in \"%s\"", file_name); + ui_notification_dialog (DIALOG_WARNING, "Found no filter definition in \"%s\"", file_name); + return RC_FAIL; + } + + return ret; } static void write_filter(FILE *filter_file, ui_filter_t *filter) @@ -343,7 +349,8 @@ int ui_filters_file_write(const char *file_name) return RC_FAIL; } - fprintf (filter_file, "<filters>\n"); + fprintf (filter_file, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<filters>\n"); write_filter (filter_file, &ui_filters.messages); write_filter (filter_file, &ui_filters.origin_tasks); diff --git a/common/utils/itti_analyzer/libui/ui_main_screen.c b/common/utils/itti_analyzer/libui/ui_main_screen.c index 63e3498e9cc1d89a3abfca80d6fef32c50b1b113..46721db1e3c52ee26d646fad81abb325f1d21be5 100644 --- a/common/utils/itti_analyzer/libui/ui_main_screen.c +++ b/common/utils/itti_analyzer/libui/ui_main_screen.c @@ -42,7 +42,11 @@ static void ui_gtk_parse_arg(int argc, char *argv[]) switch (c) { case 'f': - ui_main_data.filters_file_name = optarg; + ui_main_data.filters_file_name = malloc (strlen (optarg) + 1); + if (ui_main_data.filters_file_name != NULL) + { + strcpy (ui_main_data.filters_file_name, optarg); + } break; case 'h': @@ -55,7 +59,11 @@ static void ui_gtk_parse_arg(int argc, char *argv[]) break; case 'm': - ui_main_data.messages_file_name = optarg; + ui_main_data.messages_file_name = malloc (strlen (optarg) + 1); + if (ui_main_data.messages_file_name != NULL) + { + strcpy (ui_main_data.messages_file_name, optarg); + } break; case 'p': diff --git a/common/utils/itti_analyzer/libui/ui_notifications.c b/common/utils/itti_analyzer/libui/ui_notifications.c index 85b052868ba4cb02da0b567a4ce6a4723e6839a2..1e9006184400e269de714007b5c6b936a8870d2e 100644 --- a/common/utils/itti_analyzer/libui/ui_notifications.c +++ b/common/utils/itti_analyzer/libui/ui_notifications.c @@ -191,7 +191,19 @@ int ui_messages_open_file_chooser(void) if (accept) { result = ui_messages_read (filename); - g_free (filename); + if (result == RC_OK) + { + /* Update messages file name for future use */ + if (ui_main_data.messages_file_name != NULL) + { + g_free (ui_main_data.messages_file_name); + } + ui_main_data.messages_file_name = filename; + } + else + { + g_free (filename); + } } return result; @@ -219,7 +231,19 @@ int ui_filters_open_file_chooser(void) if (accept) { result = ui_filters_read(filename); - g_free (filename); + if (result == RC_OK) + { + /* Update filters file name for future use */ + if (ui_main_data.filters_file_name != NULL) + { + g_free (ui_main_data.filters_file_name); + } + ui_main_data.filters_file_name = filename; + } + else + { + g_free (filename); + } } return result; @@ -231,15 +255,19 @@ int ui_filters_save_file_chooser(void) int result = RC_OK; filechooser = gtk_file_chooser_dialog_new ("Save file", GTK_WINDOW (ui_main_data.window), - GTK_FILE_CHOOSER_ACTION_SAVE, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, - NULL); + GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OK, GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (filechooser), TRUE); - //gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (filechooser), "filters.xml"); - gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (filechooser), "./filters.xml"); + if (ui_main_data.filters_file_name != NULL) + { + gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (filechooser), ui_main_data.filters_file_name); + } + else + { + gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (filechooser), "filters.xml"); + } /* Process the response */ if (gtk_dialog_run (GTK_DIALOG (filechooser)) == GTK_RESPONSE_ACCEPT) @@ -247,8 +275,20 @@ int ui_filters_save_file_chooser(void) char *filename; filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (filechooser)); - result = ui_filters_file_write(filename); - g_free (filename); + result = ui_filters_file_write (filename); + if (result == RC_OK) + { + /* Update filters file name for future use */ + if (ui_main_data.filters_file_name != NULL) + { + g_free (ui_main_data.filters_file_name); + } + ui_main_data.filters_file_name = filename; + } + else + { + g_free (filename); + } } gtk_widget_destroy (filechooser);