eekboard: error if config file cannot be read.
This commit is contained in:
		
							
								
								
									
										104
									
								
								src/eekboard.c
									
									
									
									
									
								
							
							
						
						
									
										104
									
								
								src/eekboard.c
									
									
									
									
									
								
							@ -1476,6 +1476,60 @@ main (int argc, char *argv[])
 | 
			
		||||
        exit (0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (opt_config) {
 | 
			
		||||
        ConfigContext context;
 | 
			
		||||
        GMarkupParseContext *pcontext;
 | 
			
		||||
        GFile *file;
 | 
			
		||||
        GError *error;
 | 
			
		||||
        GFileInputStream *stream;
 | 
			
		||||
        gchar buf[BUFSIZ];
 | 
			
		||||
        GSList *head;
 | 
			
		||||
        gint i;
 | 
			
		||||
 | 
			
		||||
        memset (&context, 0, sizeof context);
 | 
			
		||||
        file = g_file_new_for_path (opt_config);
 | 
			
		||||
 | 
			
		||||
        error = NULL;
 | 
			
		||||
        stream = g_file_read (file, NULL, &error);
 | 
			
		||||
        if (!stream) {
 | 
			
		||||
            eekboard_free (eekboard);
 | 
			
		||||
            g_print ("Can't read configuration file: %s\n", opt_config);
 | 
			
		||||
            exit (1);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        pcontext = g_markup_parse_context_new (&config_parser,
 | 
			
		||||
                                               0,
 | 
			
		||||
                                               &context,
 | 
			
		||||
                                               NULL);
 | 
			
		||||
        while (1) {
 | 
			
		||||
            gssize len;
 | 
			
		||||
                
 | 
			
		||||
            error = NULL;
 | 
			
		||||
            len = g_input_stream_read (stream, buf, sizeof buf, NULL,
 | 
			
		||||
                                       &error);
 | 
			
		||||
            if (len <= 0)
 | 
			
		||||
                break;
 | 
			
		||||
 | 
			
		||||
            error = NULL;
 | 
			
		||||
            if (!g_markup_parse_context_parse (pcontext, buf, len, &error))
 | 
			
		||||
                break;
 | 
			
		||||
        }
 | 
			
		||||
        g_object_unref (stream);
 | 
			
		||||
 | 
			
		||||
        error = NULL;
 | 
			
		||||
        g_markup_parse_context_end_parse (pcontext, &error);
 | 
			
		||||
        g_markup_parse_context_free (pcontext);
 | 
			
		||||
        g_object_unref (file);
 | 
			
		||||
 | 
			
		||||
        if (context.list) {
 | 
			
		||||
            eekboard->config =
 | 
			
		||||
                g_slice_alloc0 ((g_slist_length (context.list) + 1) *
 | 
			
		||||
                                sizeof (*eekboard->config));
 | 
			
		||||
            for (i = 0, head = context.list; head; head = head->next)
 | 
			
		||||
                eekboard->config[i++] = head->data;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    window = gtk_window_new (opt_standalone ?
 | 
			
		||||
                             GTK_WINDOW_TOPLEVEL :
 | 
			
		||||
                             GTK_WINDOW_POPUP);
 | 
			
		||||
@ -1496,56 +1550,6 @@ main (int argc, char *argv[])
 | 
			
		||||
        gtk_box_pack_start (GTK_BOX (vbox), menubar, FALSE, FALSE, 0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (opt_config) {
 | 
			
		||||
        ConfigContext context;
 | 
			
		||||
        GMarkupParseContext *pcontext;
 | 
			
		||||
        GFile *file;
 | 
			
		||||
        GError *error;
 | 
			
		||||
        GFileInputStream *stream;
 | 
			
		||||
        gchar buf[BUFSIZ];
 | 
			
		||||
        GSList *head;
 | 
			
		||||
        gint i;
 | 
			
		||||
 | 
			
		||||
        memset (&context, 0, sizeof context);
 | 
			
		||||
        file = g_file_new_for_path (opt_config);
 | 
			
		||||
 | 
			
		||||
        error = NULL;
 | 
			
		||||
        stream = g_file_read (file, NULL, &error);
 | 
			
		||||
        if (stream) {
 | 
			
		||||
            pcontext = g_markup_parse_context_new (&config_parser,
 | 
			
		||||
                                                   0,
 | 
			
		||||
                                                   &context,
 | 
			
		||||
                                                   NULL);
 | 
			
		||||
            while (1) {
 | 
			
		||||
                gssize len;
 | 
			
		||||
                
 | 
			
		||||
                error = NULL;
 | 
			
		||||
                len = g_input_stream_read (stream, buf, sizeof buf, NULL,
 | 
			
		||||
                                           &error);
 | 
			
		||||
                if (len <= 0)
 | 
			
		||||
                    break;
 | 
			
		||||
 | 
			
		||||
                error = NULL;
 | 
			
		||||
                if (!g_markup_parse_context_parse (pcontext, buf, len, &error))
 | 
			
		||||
                    break;
 | 
			
		||||
            }
 | 
			
		||||
            g_object_unref (stream);
 | 
			
		||||
 | 
			
		||||
            error = NULL;
 | 
			
		||||
            g_markup_parse_context_end_parse (pcontext, &error);
 | 
			
		||||
            g_markup_parse_context_free (pcontext);
 | 
			
		||||
        }
 | 
			
		||||
        g_object_unref (file);
 | 
			
		||||
 | 
			
		||||
        if (context.list) {
 | 
			
		||||
            eekboard->config =
 | 
			
		||||
                g_slice_alloc0 ((g_slist_length (context.list) + 1) *
 | 
			
		||||
                                sizeof (*eekboard->config));
 | 
			
		||||
            for (i = 0, head = context.list; head; head = head->next)
 | 
			
		||||
                eekboard->config[i++] = head->data;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (eekboard->config) {
 | 
			
		||||
        GtkListStore *store;
 | 
			
		||||
        GtkTreeIter iter;
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user