+/* Functions to parse system.xml file (using glib xml parser) */
+static void parser_start_element (GMarkupParseContext *context,
+ const gchar *element_name,
+ const gchar **attribute_names,
+ const gchar **attribute_values,
+ gpointer user_data,
+ GError **error)
+{
+ int i=0;
+ LttSystemDescription* des = (LttSystemDescription* )user_data;
+ if(strcmp("system", element_name)){
+ g_warning("This is not system.xml file\n");
+ exit(1);
+ }
+
+ while(attribute_names[i]){
+ if(strcmp("node_name", attribute_names[i])==0){
+ des->node_name = g_strdup(attribute_values[i]);
+ }else if(strcmp("domainname", attribute_names[i])==0){
+ des->domain_name = g_strdup(attribute_values[i]);
+ }else if(strcmp("cpu", attribute_names[i])==0){
+ des->nb_cpu = atoi(attribute_values[i]);
+ }else if(strcmp("arch_size", attribute_names[i])==0){
+ if(strcmp(attribute_values[i],"LP32") == 0) des->size = LTT_LP32;
+ else if(strcmp(attribute_values[i],"ILP32") == 0) des->size = LTT_ILP32;
+ else if(strcmp(attribute_values[i],"LP64") == 0) des->size = LTT_LP64;
+ else if(strcmp(attribute_values[i],"ILP64") == 0) des->size = LTT_ILP64;
+ else if(strcmp(attribute_values[i],"UNKNOWN") == 0) des->size = LTT_UNKNOWN;
+ }else if(strcmp("endian", attribute_names[i])==0){
+ if(strcmp(attribute_values[i],"LITTLE_ENDIAN") == 0)
+ des->endian = LTT_LITTLE_ENDIAN;
+ else if(strcmp(attribute_values[i],"BIG_ENDIAN") == 0)
+ des->endian = LTT_BIG_ENDIAN;
+ }else if(strcmp("kernel_name", attribute_names[i])==0){
+ des->kernel_name = g_strdup(attribute_values[i]);
+ }else if(strcmp("kernel_release", attribute_names[i])==0){
+ des->kernel_release = g_strdup(attribute_values[i]);
+ }else if(strcmp("kernel_version", attribute_names[i])==0){
+ des->kernel_version = g_strdup(attribute_values[i]);
+ }else if(strcmp("machine", attribute_names[i])==0){
+ des->machine = g_strdup(attribute_values[i]);
+ }else if(strcmp("processor", attribute_names[i])==0){
+ des->processor = g_strdup(attribute_values[i]);
+ }else if(strcmp("hardware_platform", attribute_names[i])==0){
+ des->hardware_platform = g_strdup(attribute_values[i]);
+ }else if(strcmp("operating_system", attribute_names[i])==0){
+ des->operating_system = g_strdup(attribute_values[i]);
+ }else if(strcmp("ltt_major_version", attribute_names[i])==0){
+ des->ltt_major_version = atoi(attribute_values[i]);
+ }else if(strcmp("ltt_minor_version", attribute_names[i])==0){
+ des->ltt_minor_version = atoi(attribute_values[i]);
+ }else if(strcmp("ltt_block_size", attribute_names[i])==0){
+ des->ltt_block_size = atoi(attribute_values[i]);
+ }else{
+ g_warning("Not a valid attribute\n");
+ exit(1);
+ }
+ i++;
+ }
+}
+
+static void parser_end_element (GMarkupParseContext *context,
+ const gchar *element_name,
+ gpointer user_data,
+ GError **error)
+{
+}
+
+static void parser_characters (GMarkupParseContext *context,
+ const gchar *text,
+ gsize text_len,
+ gpointer user_data,
+ GError **error)
+{
+ LttSystemDescription* des = (LttSystemDescription* )user_data;
+ des->description = g_strdup(text);
+}
+