Blob Blame History Raw
From 9de0b3df99d1c2fabe03d06c0e9fdec040aafca8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= <mail@3v1n0.net>
Date: Mon, 22 Jul 2019 00:05:05 +0200
Subject: [PATCH 19/28] monitor-config-store: Use autopointers to cleanup parse
 context and buffer

https://gitlab.gnome.org/GNOME/mutter/merge_requests/682
---
 src/backends/meta-monitor-config-store.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/src/backends/meta-monitor-config-store.c b/src/backends/meta-monitor-config-store.c
index 770bef734..e24ce707a 100644
--- a/src/backends/meta-monitor-config-store.c
+++ b/src/backends/meta-monitor-config-store.c
@@ -1060,95 +1060,92 @@ handle_text (GMarkupParseContext *context,
           {
             g_set_error (error, G_MARKUP_ERROR, G_MARKUP_ERROR_INVALID_CONTENT,
                          "Invalid mode flag %.*s", (int) text_len, text);
           }
 
         return;
       }
 
     case STATE_MONITOR_UNDERSCANNING:
       {
         read_bool (text, text_len,
                    &parser->current_monitor_config->enable_underscanning,
                    error);
         return;
       }
     }
 }
 
 static const GMarkupParser config_parser = {
   .start_element = handle_start_element,
   .end_element = handle_end_element,
   .text = handle_text
 };
 
 static gboolean
 read_config_file (MetaMonitorConfigStore  *config_store,
                   GFile                   *file,
                   MetaMonitorsConfigFlag   extra_config_flags,
                   GError                 **error)
 {
-  char *buffer;
+  g_autoptr (GMarkupParseContext) parse_context = NULL;
+  g_autofree char *buffer = NULL;
   gsize size;
   ConfigParser parser;
-  GMarkupParseContext *parse_context;
 
   if (!g_file_load_contents (file, NULL, &buffer, &size, NULL, error))
     return FALSE;
 
   parser = (ConfigParser) {
     .state = STATE_INITIAL,
     .config_store = config_store,
     .extra_config_flags = extra_config_flags,
   };
 
   parse_context = g_markup_parse_context_new (&config_parser,
                                               G_MARKUP_TREAT_CDATA_AS_TEXT |
                                               G_MARKUP_PREFIX_ERROR_POSITION,
                                               &parser, NULL);
   if (!g_markup_parse_context_parse (parse_context, buffer, size, error))
     {
       g_list_free_full (parser.current_logical_monitor_configs,
                         (GDestroyNotify) meta_logical_monitor_config_free);
       g_clear_pointer (&parser.current_monitor_spec,
                        meta_monitor_spec_free);
       g_free (parser.current_monitor_mode_spec);
       g_clear_pointer (&parser.current_monitor_config,
                       meta_monitor_config_free);
       g_clear_pointer (&parser.current_logical_monitor_config,
                        meta_logical_monitor_config_free);
       return FALSE;
     }
 
-  g_markup_parse_context_free (parse_context);
-  g_free (buffer);
-
   return TRUE;
 }
 
 MetaMonitorsConfig *
 meta_monitor_config_store_lookup (MetaMonitorConfigStore *config_store,
                                   MetaMonitorsConfigKey  *key)
 {
   return META_MONITORS_CONFIG (g_hash_table_lookup (config_store->configs,
                                                     key));
 }
 
 static void
 append_monitor_spec (GString         *buffer,
                      MetaMonitorSpec *monitor_spec,
                      const char      *indentation)
 {
   g_string_append_printf (buffer, "%s<monitorspec>\n", indentation);
   g_string_append_printf (buffer, "%s  <connector>%s</connector>\n",
                           indentation,
                           monitor_spec->connector);
   g_string_append_printf (buffer, "%s  <vendor>%s</vendor>\n",
                           indentation,
                           monitor_spec->vendor);
   g_string_append_printf (buffer, "%s  <product>%s</product>\n",
                           indentation,
                           monitor_spec->product);
   g_string_append_printf (buffer, "%s  <serial>%s</serial>\n",
                           indentation,
                           monitor_spec->serial);
   g_string_append_printf (buffer, "%s</monitorspec>\n", indentation);
-- 
2.26.2