[gedit] metadata-manager: fix bug when xml file doesn't exist yet



commit 40d22d675be22d7c4c44a79061daa1843c12d37c
Author: Sébastien Wilmet <sebastien wilmet uclouvain be>
Date:   Fri Feb 5 10:27:55 2016 +0100

    metadata-manager: fix bug when xml file doesn't exist yet
    
    It's perfectly fine that the xml file doesn't exist, it means that it's
    the first time that the application is used, or at least the first time
    that metadata is set.
    
    There was also a memory leak.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=761498

 gedit/gedit-metadata-manager.c |   22 +++++++++++++++-------
 1 files changed, 15 insertions(+), 7 deletions(-)
---
diff --git a/gedit/gedit-metadata-manager.c b/gedit/gedit-metadata-manager.c
index 199a9a9..ba584bf 100644
--- a/gedit/gedit-metadata-manager.c
+++ b/gedit/gedit-metadata-manager.c
@@ -221,6 +221,7 @@ parseItem (xmlDocPtr doc, xmlNodePtr cur)
        xmlFree (atime);
 }
 
+/* Returns FALSE in case of error. */
 static gboolean
 load_values (void)
 {
@@ -236,13 +237,17 @@ load_values (void)
 
        xmlKeepBlanksDefault (0);
 
-       /* FIXME: file locking - Paolo */
-       if ((gedit_metadata_manager->metadata_filename == NULL) ||
-           (!g_file_test (gedit_metadata_manager->metadata_filename, G_FILE_TEST_EXISTS)))
+       if (gedit_metadata_manager->metadata_filename == NULL)
        {
                return FALSE;
        }
 
+       /* TODO: avoid races */
+       if (!g_file_test (gedit_metadata_manager->metadata_filename, G_FILE_TEST_EXISTS))
+       {
+               return TRUE;
+       }
+
        doc = xmlParseFile (gedit_metadata_manager->metadata_filename);
 
        if (doc == NULL)
@@ -257,7 +262,7 @@ load_values (void)
                           g_path_get_basename (gedit_metadata_manager->metadata_filename));
                xmlFreeDoc (doc);
 
-               return FALSE;
+               return TRUE;
        }
 
        if (xmlStrcmp (cur->name, (const xmlChar *) "metadata"))
@@ -365,12 +370,15 @@ gedit_metadata_manager_set (GFile       *location,
 
        if (!gedit_metadata_manager->values_loaded)
        {
-               gboolean res;
+               gboolean ok;
 
-               res = load_values ();
+               ok = load_values ();
 
-               if (!res)
+               if (!ok)
+               {
+                       g_free (uri);
                        return;
+               }
        }
 
        item = (Item *)g_hash_table_lookup (gedit_metadata_manager->items,


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]