From f2e2bba844ed36ab3b9ce0c936dad673cfc865b9 Mon Sep 17 00:00:00 2001 From: Jiri Moskovcak Date: Mon, 7 Mar 2011 15:36:07 +0100 Subject: added function to parse event description from xml file --- src/lib/event_xml_parser.c | 186 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 186 insertions(+) create mode 100644 src/lib/event_xml_parser.c (limited to 'src/lib/event_xml_parser.c') diff --git a/src/lib/event_xml_parser.c b/src/lib/event_xml_parser.c new file mode 100644 index 00000000..6b562957 --- /dev/null +++ b/src/lib/event_xml_parser.c @@ -0,0 +1,186 @@ +//#include +#include +#include +#include +#include "event_xml_parser.h" + +#define EVENT_ELEMENT "event" +#define LABEL_ELEMENT "label" +#define DESCRIPTION_ELEMENT "description" +#define ALLOW_EMPTY_ELEMENT "allow-empty" +#define OPTION_ELEMENT "option" +#define ACTION_ELEMENT "action" +#define NAME_ELEMENT "name" + +int in_option = 0; + +static const char *option_types[] = +{ + "text", + "bool", + "password", + "number", + NULL +}; + +// Called for open tags +void start_element(GMarkupParseContext *context, + const gchar *element_name, + const gchar **attribute_names, + const gchar **attribute_values, + gpointer user_data, + GError **error) +{ + //g_print("start: %s\n", element_name); + + event_obj_t *ui = (event_obj_t *)user_data; + + if(strcmp(element_name, OPTION_ELEMENT) == 0) + { + if(in_option == 0) + { + in_option = 1; + event_option_obj_t *option = (event_option_obj_t *)malloc(sizeof(event_option_obj_t)); + //we need to prepend, so ui->options always points to the last created option + ui->options = g_list_prepend(ui->options, option); + + int i; + for(i = 0; attribute_names[i] != NULL; ++i) + { + //g_print("attr: %s:%s\n", attribute_names[i], attribute_values[i]); + if(strcmp(attribute_names[i], "name") == 0) + option->name = strdup(attribute_values[i]); + if(strcmp(attribute_names[i], "type") == 0) + { + option_type_t type = 0; + for(type = OPTION_TYPE_TEXT; type < OPTION_TYPE_INVALID; ++type) + { + if(strcmp(option_types[type], attribute_values[i]) == 0) + option->type = type; + } + } + } + } + else + { + g_print("error, option nested in option!\n"); + exit(-127); + } + } + +} + + // Called for close tags +void end_element(GMarkupParseContext *context, + const gchar *element_name, + gpointer user_data, + GError **error) +{ + event_obj_t *ui = (event_obj_t *)user_data; + if(strcmp(element_name, OPTION_ELEMENT) == 0) + { + in_option = 0; + } + if(strcmp(element_name, EVENT_ELEMENT) == 0) + { + //we need to revers the list, because we we're prepending + ui->options = g_list_reverse(ui->options); + in_option = 0; + } +} + + // Called for character data + // text is not nul-terminated +void text(GMarkupParseContext *context, + const gchar *text, + gsize text_len, + gpointer user_data, + GError **error) +{ + event_obj_t *ui = (event_obj_t *)user_data; + const gchar * inner_element = g_markup_parse_context_get_element(context); + char *_text = (char *)malloc(text_len+1); + strncpy(_text, text, text_len); + _text[text_len] = '\0'; + if(in_option == 1) + { + event_option_obj_t *option = (event_option_obj_t *)((ui->options)->data); + if(strcmp(inner_element, LABEL_ELEMENT) == 0) + { + //g_print("\tnew label: \t\t%s\n", _text); + option->label = _text; + } + if(strcmp(inner_element, DESCRIPTION_ELEMENT) == 0) + { + //g_print("\ttooltip: \t\t%s\n", _text); + option->description = _text; + } + } + else + { + /* we're not in option, so the description is for the event */ + if(strcmp(inner_element, ACTION_ELEMENT) == 0) + { + //g_print("\taction description: \t%s\n", _text); + ui->action = _text; + } + if(strcmp(inner_element, NAME_ELEMENT) == 0) + { + //g_print("\tevent name: \t\t%s\n", _text); + ui->name = _text; + } + } + //will be freed when the event_option is freed + //free(_text); +} + + // Called for strings that should be re-saved verbatim in this same + // position, but are not otherwise interpretable. At the moment + // this includes comments and processing instructions. + // text is not nul-terminated +void passthrough(GMarkupParseContext *context, + const gchar *passthrough_text, + gsize text_len, + gpointer user_data, + GError **error) +{ + g_print("passthrough\n"); +} + +// Called on error, including one set by other +// methods in the vtable. The GError should not be freed. +void error(GMarkupParseContext *context, + GError *error, + gpointer user_data) +{ + g_print("error\n"); +} + +/* this function takes 2 parameters + * ui -> pointer to event_obj_t + * filename -> filename to read + * event_obj_t contains list of options, which is malloced by hits function + * and must be freed by the caller + */ + +void load_event_from_file(event_obj_t *ui, const char* filename) +{ + GMarkupParser parser; + parser.start_element = &start_element; + parser.end_element = &end_element; + parser.text = &text; + parser.passthrough = &passthrough; + parser.error = &error; + GMarkupParseContext *context = g_markup_parse_context_new( + &parser, G_MARKUP_TREAT_CDATA_AS_TEXT, + ui, NULL); + FILE* fin = fopen(filename, "r"); + size_t read_bytes = 0; + char buff[1024] = {'\0'}; + while((read_bytes = fread(buff, 1, 1024, fin))) + { + g_markup_parse_context_parse(context, buff, read_bytes, NULL); + } + fclose(fin); + free(context); +} -- cgit From bad8487bf919ba4b221b7be065c346221943812c Mon Sep 17 00:00:00 2001 From: Jiri Moskovcak Date: Mon, 7 Mar 2011 15:47:54 +0100 Subject: minor build fixes --- src/lib/event_xml_parser.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/lib/event_xml_parser.c') diff --git a/src/lib/event_xml_parser.c b/src/lib/event_xml_parser.c index 6b562957..d429291f 100644 --- a/src/lib/event_xml_parser.c +++ b/src/lib/event_xml_parser.c @@ -163,7 +163,7 @@ void error(GMarkupParseContext *context, * and must be freed by the caller */ -void load_event_from_file(event_obj_t *ui, const char* filename) +void load_event_description_from_file(event_obj_t *ui, const char* filename) { GMarkupParser parser; parser.start_element = &start_element; -- cgit From d18a48afc602a19130d13af6097df566fa260690 Mon Sep 17 00:00:00 2001 From: Jiri Moskovcak Date: Mon, 7 Mar 2011 16:11:33 +0100 Subject: event_option_obj_t -> event_option_t, event_obj_t -> event_config_t --- src/lib/event_xml_parser.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'src/lib/event_xml_parser.c') diff --git a/src/lib/event_xml_parser.c b/src/lib/event_xml_parser.c index d429291f..da56a51c 100644 --- a/src/lib/event_xml_parser.c +++ b/src/lib/event_xml_parser.c @@ -33,14 +33,14 @@ void start_element(GMarkupParseContext *context, { //g_print("start: %s\n", element_name); - event_obj_t *ui = (event_obj_t *)user_data; + event_config_t *ui = (event_config_t *)user_data; if(strcmp(element_name, OPTION_ELEMENT) == 0) { if(in_option == 0) { in_option = 1; - event_option_obj_t *option = (event_option_obj_t *)malloc(sizeof(event_option_obj_t)); + event_option_t *option = (event_option_t *)malloc(sizeof(event_option_t)); //we need to prepend, so ui->options always points to the last created option ui->options = g_list_prepend(ui->options, option); @@ -76,7 +76,7 @@ void end_element(GMarkupParseContext *context, gpointer user_data, GError **error) { - event_obj_t *ui = (event_obj_t *)user_data; + event_config_t *ui = (event_config_t *)user_data; if(strcmp(element_name, OPTION_ELEMENT) == 0) { in_option = 0; @@ -97,14 +97,14 @@ void text(GMarkupParseContext *context, gpointer user_data, GError **error) { - event_obj_t *ui = (event_obj_t *)user_data; + event_config_t *ui = (event_config_t *)user_data; const gchar * inner_element = g_markup_parse_context_get_element(context); char *_text = (char *)malloc(text_len+1); strncpy(_text, text, text_len); _text[text_len] = '\0'; if(in_option == 1) { - event_option_obj_t *option = (event_option_obj_t *)((ui->options)->data); + event_option_t *option = (event_option_t *)((ui->options)->data); if(strcmp(inner_element, LABEL_ELEMENT) == 0) { //g_print("\tnew label: \t\t%s\n", _text); @@ -157,13 +157,13 @@ void error(GMarkupParseContext *context, } /* this function takes 2 parameters - * ui -> pointer to event_obj_t + * ui -> pointer to event_config_t * filename -> filename to read - * event_obj_t contains list of options, which is malloced by hits function + * event_config_t contains list of options, which is malloced by hits function * and must be freed by the caller */ -void load_event_description_from_file(event_obj_t *ui, const char* filename) +void load_event_description_from_file(event_config_t *event_config, const char* filename) { GMarkupParser parser; parser.start_element = &start_element; @@ -173,7 +173,7 @@ void load_event_description_from_file(event_obj_t *ui, const char* filename) parser.error = &error; GMarkupParseContext *context = g_markup_parse_context_new( &parser, G_MARKUP_TREAT_CDATA_AS_TEXT, - ui, NULL); + event_config, NULL); FILE* fin = fopen(filename, "r"); size_t read_bytes = 0; char buff[1024] = {'\0'}; -- cgit From 75d2a56b6420fd65f596b8ee18b02e121147ea4e Mon Sep 17 00:00:00 2001 From: Jiri Moskovcak Date: Mon, 7 Mar 2011 17:09:43 +0100 Subject: renamed some files, no code changes --- src/lib/event_xml_parser.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/lib/event_xml_parser.c') diff --git a/src/lib/event_xml_parser.c b/src/lib/event_xml_parser.c index da56a51c..7b9edc4f 100644 --- a/src/lib/event_xml_parser.c +++ b/src/lib/event_xml_parser.c @@ -2,7 +2,7 @@ #include #include #include -#include "event_xml_parser.h" +#include "event_config.h" #define EVENT_ELEMENT "event" #define LABEL_ELEMENT "label" -- cgit From 02ba31ab300c06461d444f53139dd3712700abf5 Mon Sep 17 00:00:00 2001 From: Jiri Moskovcak Date: Tue, 8 Mar 2011 14:13:51 +0100 Subject: silence the output --- src/lib/event_xml_parser.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'src/lib/event_xml_parser.c') diff --git a/src/lib/event_xml_parser.c b/src/lib/event_xml_parser.c index 7b9edc4f..ee22102e 100644 --- a/src/lib/event_xml_parser.c +++ b/src/lib/event_xml_parser.c @@ -2,6 +2,7 @@ #include #include #include +#include "abrtlib.h" #include "event_config.h" #define EVENT_ELEMENT "event" @@ -42,12 +43,13 @@ void start_element(GMarkupParseContext *context, in_option = 1; event_option_t *option = (event_option_t *)malloc(sizeof(event_option_t)); //we need to prepend, so ui->options always points to the last created option + VERB2 log("adding option\n"); ui->options = g_list_prepend(ui->options, option); int i; for(i = 0; attribute_names[i] != NULL; ++i) { - //g_print("attr: %s:%s\n", attribute_names[i], attribute_values[i]); + VERB2 log("attr: %s:%s\n", attribute_names[i], attribute_values[i]); if(strcmp(attribute_names[i], "name") == 0) option->name = strdup(attribute_values[i]); if(strcmp(attribute_names[i], "type") == 0) @@ -107,12 +109,12 @@ void text(GMarkupParseContext *context, event_option_t *option = (event_option_t *)((ui->options)->data); if(strcmp(inner_element, LABEL_ELEMENT) == 0) { - //g_print("\tnew label: \t\t%s\n", _text); + VERB2 log("\tnew label: \t\t%s\n", _text); option->label = _text; } if(strcmp(inner_element, DESCRIPTION_ELEMENT) == 0) { - //g_print("\ttooltip: \t\t%s\n", _text); + VERB2 log("\ttooltip: \t\t%s\n", _text); option->description = _text; } } @@ -144,7 +146,7 @@ void passthrough(GMarkupParseContext *context, gpointer user_data, GError **error) { - g_print("passthrough\n"); + VERB2 log("passthrough\n"); } // Called on error, including one set by other -- cgit From f6ac33ecf6635bbb34e2da196f0cab6f92724907 Mon Sep 17 00:00:00 2001 From: Jiri Moskovcak Date: Tue, 8 Mar 2011 14:52:25 +0100 Subject: event_xml_parser: minor fixes based on review from Denys --- src/lib/event_xml_parser.c | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) (limited to 'src/lib/event_xml_parser.c') diff --git a/src/lib/event_xml_parser.c b/src/lib/event_xml_parser.c index ee22102e..6f23cfb3 100644 --- a/src/lib/event_xml_parser.c +++ b/src/lib/event_xml_parser.c @@ -15,7 +15,7 @@ int in_option = 0; -static const char *option_types[] = +static const char *const option_types[] = { "text", "bool", @@ -25,7 +25,7 @@ static const char *option_types[] = }; // Called for open tags -void start_element(GMarkupParseContext *context, +static void start_element(GMarkupParseContext *context, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, @@ -43,7 +43,7 @@ void start_element(GMarkupParseContext *context, in_option = 1; event_option_t *option = (event_option_t *)malloc(sizeof(event_option_t)); //we need to prepend, so ui->options always points to the last created option - VERB2 log("adding option\n"); + VERB2 log("adding option"); ui->options = g_list_prepend(ui->options, option); int i; @@ -66,14 +66,13 @@ void start_element(GMarkupParseContext *context, else { g_print("error, option nested in option!\n"); - exit(-127); } } } // Called for close tags -void end_element(GMarkupParseContext *context, +static void end_element(GMarkupParseContext *context, const gchar *element_name, gpointer user_data, GError **error) @@ -93,7 +92,7 @@ void end_element(GMarkupParseContext *context, // Called for character data // text is not nul-terminated -void text(GMarkupParseContext *context, +static void text(GMarkupParseContext *context, const gchar *text, gsize text_len, gpointer user_data, @@ -109,12 +108,12 @@ void text(GMarkupParseContext *context, event_option_t *option = (event_option_t *)((ui->options)->data); if(strcmp(inner_element, LABEL_ELEMENT) == 0) { - VERB2 log("\tnew label: \t\t%s\n", _text); + VERB2 log("\tnew label: \t\t%s", _text); option->label = _text; } if(strcmp(inner_element, DESCRIPTION_ELEMENT) == 0) { - VERB2 log("\ttooltip: \t\t%s\n", _text); + VERB2 log("\ttooltip: \t\t%s", _text); option->description = _text; } } @@ -123,12 +122,12 @@ void text(GMarkupParseContext *context, /* we're not in option, so the description is for the event */ if(strcmp(inner_element, ACTION_ELEMENT) == 0) { - //g_print("\taction description: \t%s\n", _text); + VERB2 log("\taction description: \t%s", _text); ui->action = _text; } if(strcmp(inner_element, NAME_ELEMENT) == 0) { - //g_print("\tevent name: \t\t%s\n", _text); + VERB2 log("\tevent name: \t\t%s", _text); ui->name = _text; } } @@ -140,18 +139,18 @@ void text(GMarkupParseContext *context, // position, but are not otherwise interpretable. At the moment // this includes comments and processing instructions. // text is not nul-terminated -void passthrough(GMarkupParseContext *context, +static void passthrough(GMarkupParseContext *context, const gchar *passthrough_text, gsize text_len, gpointer user_data, GError **error) { - VERB2 log("passthrough\n"); + VERB2 log("passthrough"); } // Called on error, including one set by other // methods in the vtable. The GError should not be freed. -void error(GMarkupParseContext *context, +static void error(GMarkupParseContext *context, GError *error, gpointer user_data) { @@ -178,11 +177,11 @@ void load_event_description_from_file(event_config_t *event_config, const char* event_config, NULL); FILE* fin = fopen(filename, "r"); size_t read_bytes = 0; - char buff[1024] = {'\0'}; + char buff[1024]; while((read_bytes = fread(buff, 1, 1024, fin))) { g_markup_parse_context_parse(context, buff, read_bytes, NULL); } fclose(fin); - free(context); + g_markup_parse_context_free(context); } -- cgit From a6ee8958dbe6f45f95fca4fa2ea1490c7035be65 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Tue, 8 Mar 2011 16:23:31 +0100 Subject: implement load_event_config_data. Untested. Signed-off-by: Denys Vlasenko --- src/lib/event_xml_parser.c | 98 ++++++++++++++++++++++++---------------------- 1 file changed, 52 insertions(+), 46 deletions(-) (limited to 'src/lib/event_xml_parser.c') diff --git a/src/lib/event_xml_parser.c b/src/lib/event_xml_parser.c index 6f23cfb3..5126022e 100644 --- a/src/lib/event_xml_parser.c +++ b/src/lib/event_xml_parser.c @@ -1,7 +1,3 @@ -//#include -#include -#include -#include #include "abrtlib.h" #include "event_config.h" @@ -13,7 +9,7 @@ #define ACTION_ELEMENT "action" #define NAME_ELEMENT "name" -int in_option = 0; +static int in_option = 0; //FIXME static const char *const option_types[] = { @@ -34,30 +30,33 @@ static void start_element(GMarkupParseContext *context, { //g_print("start: %s\n", element_name); - event_config_t *ui = (event_config_t *)user_data; + event_config_t *ui = user_data; - if(strcmp(element_name, OPTION_ELEMENT) == 0) + if (strcmp(element_name, OPTION_ELEMENT) == 0) { - if(in_option == 0) + if (in_option == 0) { in_option = 1; - event_option_t *option = (event_option_t *)malloc(sizeof(event_option_t)); + event_option_t *option = xzalloc(sizeof(*option)); //we need to prepend, so ui->options always points to the last created option VERB2 log("adding option"); ui->options = g_list_prepend(ui->options, option); int i; - for(i = 0; attribute_names[i] != NULL; ++i) + for (i = 0; attribute_names[i] != NULL; ++i) { - VERB2 log("attr: %s:%s\n", attribute_names[i], attribute_values[i]); - if(strcmp(attribute_names[i], "name") == 0) - option->name = strdup(attribute_values[i]); - if(strcmp(attribute_names[i], "type") == 0) + VERB2 log("attr: %s:%s", attribute_names[i], attribute_values[i]); + if (strcmp(attribute_names[i], "name") == 0) { - option_type_t type = 0; - for(type = OPTION_TYPE_TEXT; type < OPTION_TYPE_INVALID; ++type) + free(option->name); + option->name = xstrdup(attribute_values[i]); + } + else if (strcmp(attribute_names[i], "type") == 0) + { + option_type_t type; + for (type = OPTION_TYPE_TEXT; type < OPTION_TYPE_INVALID; ++type) { - if(strcmp(option_types[type], attribute_values[i]) == 0) + if (strcmp(option_types[type], attribute_values[i]) == 0) option->type = type; } } @@ -65,74 +64,79 @@ static void start_element(GMarkupParseContext *context, } else { - g_print("error, option nested in option!\n"); + error_msg("error, option nested in option"); } } } - // Called for close tags +// Called for close tags static void end_element(GMarkupParseContext *context, const gchar *element_name, gpointer user_data, GError **error) { - event_config_t *ui = (event_config_t *)user_data; - if(strcmp(element_name, OPTION_ELEMENT) == 0) + event_config_t *ui = user_data; + if (strcmp(element_name, OPTION_ELEMENT) == 0) { in_option = 0; } - if(strcmp(element_name, EVENT_ELEMENT) == 0) + if (strcmp(element_name, EVENT_ELEMENT) == 0) { - //we need to revers the list, because we we're prepending + //we need to reverse the list, because we we're prepending ui->options = g_list_reverse(ui->options); in_option = 0; } } - // Called for character data - // text is not nul-terminated +// Called for character data +// text is not nul-terminated static void text(GMarkupParseContext *context, const gchar *text, gsize text_len, gpointer user_data, GError **error) { - event_config_t *ui = (event_config_t *)user_data; + event_config_t *ui = user_data; const gchar * inner_element = g_markup_parse_context_get_element(context); - char *_text = (char *)malloc(text_len+1); - strncpy(_text, text, text_len); - _text[text_len] = '\0'; - if(in_option == 1) + char *_text = xstrndup(text, text_len); + if (in_option == 1) { - event_option_t *option = (event_option_t *)((ui->options)->data); - if(strcmp(inner_element, LABEL_ELEMENT) == 0) + event_option_t *option = ui->options->data; + if (strcmp(inner_element, LABEL_ELEMENT) == 0) { - VERB2 log("\tnew label: \t\t%s", _text); + VERB2 log("new label:'%s'", _text); + free(option->label); option->label = _text; + return; } - if(strcmp(inner_element, DESCRIPTION_ELEMENT) == 0) + if (strcmp(inner_element, DESCRIPTION_ELEMENT) == 0) { - VERB2 log("\ttooltip: \t\t%s", _text); + VERB2 log("tooltip:'%s'", _text); + free(option->description); option->description = _text; + return; } } else { /* we're not in option, so the description is for the event */ - if(strcmp(inner_element, ACTION_ELEMENT) == 0) + if (strcmp(inner_element, ACTION_ELEMENT) == 0) { - VERB2 log("\taction description: \t%s", _text); + VERB2 log("action description:'%s'", _text); + free(ui->action); ui->action = _text; + return; } - if(strcmp(inner_element, NAME_ELEMENT) == 0) + if (strcmp(inner_element, NAME_ELEMENT) == 0) { - VERB2 log("\tevent name: \t\t%s", _text); + VERB2 log("event name:'%s'", _text); + free(ui->name); ui->name = _text; + return; } } - //will be freed when the event_option is freed - //free(_text); + free(_text); } // Called for strings that should be re-saved verbatim in this same @@ -154,12 +158,12 @@ static void error(GMarkupParseContext *context, GError *error, gpointer user_data) { - g_print("error\n"); + error_msg("error in XML parsing"); } /* this function takes 2 parameters - * ui -> pointer to event_config_t - * filename -> filename to read + * ui -> pointer to event_config_t + * filename -> filename to read * event_config_t contains list of options, which is malloced by hits function * and must be freed by the caller */ @@ -174,14 +178,16 @@ void load_event_description_from_file(event_config_t *event_config, const char* parser.error = &error; GMarkupParseContext *context = g_markup_parse_context_new( &parser, G_MARKUP_TREAT_CDATA_AS_TEXT, - event_config, NULL); + event_config, /*GDestroyNotify:*/ NULL); + FILE* fin = fopen(filename, "r"); size_t read_bytes = 0; char buff[1024]; - while((read_bytes = fread(buff, 1, 1024, fin))) + while ((read_bytes = fread(buff, 1, 1024, fin))) { g_markup_parse_context_parse(context, buff, read_bytes, NULL); } fclose(fin); + g_markup_parse_context_free(context); } -- cgit From e2fdf6c58eba440770624d13e25a63c3d77040db Mon Sep 17 00:00:00 2001 From: Jiri Moskovcak Date: Tue, 8 Mar 2011 21:31:45 +0100 Subject: added event description support into xml parser - so event now has: action: description of what will happen when this event is used - the main purpose is for the event selector in wizard description: description of the event --- src/lib/event_xml_parser.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) (limited to 'src/lib/event_xml_parser.c') diff --git a/src/lib/event_xml_parser.c b/src/lib/event_xml_parser.c index 5126022e..a0e6c3c4 100644 --- a/src/lib/event_xml_parser.c +++ b/src/lib/event_xml_parser.c @@ -135,8 +135,13 @@ static void text(GMarkupParseContext *context, ui->name = _text; return; } + if(strcmp(inner_element, DESCRIPTION_ELEMENT) == 0) + { + VERB2 log("event description:'%s'", _text); + free(ui->description); + ui->description = _text; + } } - free(_text); } // Called for strings that should be re-saved verbatim in this same @@ -181,13 +186,16 @@ void load_event_description_from_file(event_config_t *event_config, const char* event_config, /*GDestroyNotify:*/ NULL); FILE* fin = fopen(filename, "r"); - size_t read_bytes = 0; - char buff[1024]; - while ((read_bytes = fread(buff, 1, 1024, fin))) + if(fin != NULL) { - g_markup_parse_context_parse(context, buff, read_bytes, NULL); + size_t read_bytes = 0; + char buff[1024]; + while ((read_bytes = fread(buff, 1, 1024, fin))) + { + g_markup_parse_context_parse(context, buff, read_bytes, NULL); + } + fclose(fin); } - fclose(fin); g_markup_parse_context_free(context); } -- cgit From 12afc6905e943f8f358a6e7adcbc7f06ae665787 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Wed, 9 Mar 2011 15:04:04 +0100 Subject: fix a leak in event_xml_parser.c; simplify load_conf_file() a bit Signed-off-by: Denys Vlasenko --- src/lib/event_xml_parser.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'src/lib/event_xml_parser.c') diff --git a/src/lib/event_xml_parser.c b/src/lib/event_xml_parser.c index a0e6c3c4..5f1974fd 100644 --- a/src/lib/event_xml_parser.c +++ b/src/lib/event_xml_parser.c @@ -135,13 +135,15 @@ static void text(GMarkupParseContext *context, ui->name = _text; return; } - if(strcmp(inner_element, DESCRIPTION_ELEMENT) == 0) + if (strcmp(inner_element, DESCRIPTION_ELEMENT) == 0) { VERB2 log("event description:'%s'", _text); free(ui->description); ui->description = _text; + return; } } + free(_text); } // Called for strings that should be re-saved verbatim in this same @@ -186,11 +188,11 @@ void load_event_description_from_file(event_config_t *event_config, const char* event_config, /*GDestroyNotify:*/ NULL); FILE* fin = fopen(filename, "r"); - if(fin != NULL) + if (fin != NULL) { size_t read_bytes = 0; char buff[1024]; - while ((read_bytes = fread(buff, 1, 1024, fin))) + while ((read_bytes = fread(buff, 1, 1024, fin)) != 0) { g_markup_parse_context_parse(context, buff, read_bytes, NULL); } -- cgit From 4db62cf9807f4ec11a7c8c8c91875080c90f0ec1 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Wed, 9 Mar 2011 16:43:27 +0100 Subject: gui-wizard-gtk: add load_event_config_data() to wizard Signed-off-by: Denys Vlasenko --- src/lib/event_xml_parser.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/lib/event_xml_parser.c') diff --git a/src/lib/event_xml_parser.c b/src/lib/event_xml_parser.c index 5f1974fd..be4a9e09 100644 --- a/src/lib/event_xml_parser.c +++ b/src/lib/event_xml_parser.c @@ -37,7 +37,7 @@ static void start_element(GMarkupParseContext *context, if (in_option == 0) { in_option = 1; - event_option_t *option = xzalloc(sizeof(*option)); + event_option_t *option = new_event_option(); //we need to prepend, so ui->options always points to the last created option VERB2 log("adding option"); ui->options = g_list_prepend(ui->options, option); -- cgit