diff options
author | DongHun Kwak <dh0128.kwak@samsung.com> | 2017-05-19 09:25:12 +0900 |
---|---|---|
committer | DongHun Kwak <dh0128.kwak@samsung.com> | 2017-05-19 09:25:15 +0900 |
commit | 0ae6bccb945f3a47a486e2634867d7f89e805229 (patch) | |
tree | 3dcd94f8fa7da5116ebb21407d4c0ec00fb83271 /gio | |
parent | 8f6c550e4787e8ec2c1eb2a12e2a4d6563d78689 (diff) | |
download | glib-0ae6bccb945f3a47a486e2634867d7f89e805229.tar.gz glib-0ae6bccb945f3a47a486e2634867d7f89e805229.tar.bz2 glib-0ae6bccb945f3a47a486e2634867d7f89e805229.zip |
Imported Upstream version 2.51.4
Change-Id: I0a090d45ab8f1805c5f98fd4d804da23a4033a41
Signed-off-by: DongHun Kwak <dh0128.kwak@samsung.com>
Diffstat (limited to 'gio')
-rw-r--r-- | gio/glib-compile-schemas.c | 92 | ||||
-rw-r--r-- | gio/gsettings.c | 19 | ||||
-rw-r--r-- | gio/tests/gsettings.c | 5 |
3 files changed, 78 insertions, 38 deletions
diff --git a/gio/glib-compile-schemas.c b/gio/glib-compile-schemas.c index 833ae6bb0..e190ff5af 100644 --- a/gio/glib-compile-schemas.c +++ b/gio/glib-compile-schemas.c @@ -879,6 +879,7 @@ schema_state_free (gpointer data) g_free (state->path); g_free (state->gettext_domain); g_hash_table_unref (state->keys); + g_slice_free (SchemaState, state); } static void @@ -1621,6 +1622,12 @@ gvdb_pair_init (GvdbPair *pair) pair->root = gvdb_hash_table_insert (pair->table, ""); } +static void +gvdb_pair_clear (GvdbPair *pair) +{ + g_hash_table_unref (pair->table); +} + typedef struct { GHashTable *schema_table; @@ -1643,6 +1650,7 @@ output_key (gpointer key, const gchar *name; KeyState *state; GvdbItem *item; + GVariant *serialised = NULL; name = key; state = value; @@ -1650,7 +1658,9 @@ output_key (gpointer key, item = gvdb_hash_table_insert (data->pair.table, name); gvdb_item_set_parent (item, data->pair.root); - gvdb_item_set_value (item, key_state_serialise (state)); + serialised = key_state_serialise (state); + gvdb_item_set_value (item, serialised); + g_variant_unref (serialised); if (state->l10n) data->l10n = TRUE; @@ -1702,6 +1712,8 @@ output_schema (gpointer key, gvdb_hash_table_insert_string (data.pair.table, ".gettext-domain", state->gettext_domain); + + gvdb_pair_clear (&data.pair); } static gboolean @@ -1796,6 +1808,8 @@ parse_gschema_files (gchar **files, g_hash_table_unref (state.flags_table); g_hash_table_unref (state.enum_table); + g_free (contents); + return NULL; } else @@ -1803,6 +1817,7 @@ parse_gschema_files (gchar **files, } /* cleanup */ + g_free (contents); g_markup_parse_context_free (context); g_slist_free (state.this_file_schemas); g_slist_free (state.this_file_flagss); @@ -2020,19 +2035,20 @@ set_overrides (GHashTable *schema_table, int main (int argc, char **argv) { - GError *error; - GHashTable *table; - GDir *dir; + GError *error = NULL; + GHashTable *table = NULL; + GDir *dir = NULL; const gchar *file; - gchar *srcdir; + const gchar *srcdir; gboolean show_version_and_exit = FALSE; gchar *targetdir = NULL; - gchar *target; + gchar *target = NULL; gboolean dry_run = FALSE; gboolean strict = FALSE; gchar **schema_files = NULL; gchar **override_files = NULL; - GOptionContext *context; + GOptionContext *context = NULL; + gint retval; GOptionEntry entries[] = { { "version", 0, 0, G_OPTION_ARG_NONE, &show_version_and_exit, N_("Show program version and exit"), NULL }, { "targetdir", 0, 0, G_OPTION_ARG_FILENAME, &targetdir, N_("where to store the gschemas.compiled file"), N_("DIRECTORY") }, @@ -2046,7 +2062,7 @@ main (int argc, char **argv) }; #ifdef G_OS_WIN32 - gchar *tmp; + gchar *tmp = NULL; #endif setlocale (LC_ALL, ""); @@ -2055,7 +2071,6 @@ main (int argc, char **argv) #ifdef G_OS_WIN32 tmp = _glib_get_locale_dir (); bindtextdomain (GETTEXT_PACKAGE, tmp); - g_free (tmp); #else bindtextdomain (GETTEXT_PACKAGE, GLIB_LOCALE_DIR); #endif @@ -2072,33 +2087,30 @@ main (int argc, char **argv) "and the cache file is called gschemas.compiled.")); g_option_context_add_main_entries (context, entries, GETTEXT_PACKAGE); - error = NULL; if (!g_option_context_parse (context, &argc, &argv, &error)) { fprintf (stderr, "%s\n", error->message); - return 1; + retval = 1; + goto done; } - g_option_context_free (context); - if (show_version_and_exit) { g_print (PACKAGE_VERSION "\n"); - return 0; + retval = 0; + goto done; } if (!schema_files && argc != 2) { fprintf (stderr, _("You should give exactly one directory name\n")); - return 1; + retval = 1; + goto done; } srcdir = argv[1]; - if (targetdir == NULL) - targetdir = srcdir; - - target = g_build_filename (targetdir, "gschemas.compiled", NULL); + target = g_build_filename (targetdir ? targetdir : srcdir, "gschemas.compiled", NULL); if (!schema_files) { @@ -2112,7 +2124,12 @@ main (int argc, char **argv) if (dir == NULL) { fprintf (stderr, "%s\n", error->message); - return 1; + + g_ptr_array_unref (files); + g_ptr_array_unref (overrides); + + retval = 1; + goto done; } while ((file = g_dir_read_name (dir)) != NULL) @@ -2136,7 +2153,11 @@ main (int argc, char **argv) else fprintf (stdout, _("removed existing output file.\n")); - return 0; + g_ptr_array_unref (files); + g_ptr_array_unref (overrides); + + retval = 0; + goto done; } g_ptr_array_sort (files, compare_strings); g_ptr_array_add (files, NULL); @@ -2150,27 +2171,42 @@ main (int argc, char **argv) if ((table = parse_gschema_files (schema_files, strict)) == NULL) { - g_free (target); - return 1; + retval = 1; + goto done; } if (override_files != NULL && !set_overrides (table, override_files, strict)) { - g_free (target); - return 1; + retval = 1; + goto done; } if (!dry_run && !write_to_file (table, target, &error)) { fprintf (stderr, "%s\n", error->message); - g_free (target); - return 1; + retval = 1; + goto done; } + /* Success. */ + retval = 0; + +done: + g_clear_error (&error); + g_clear_pointer (&table, g_hash_table_unref); + g_clear_pointer (&dir, g_dir_close); + g_free (targetdir); g_free (target); + g_strfreev (schema_files); + g_strfreev (override_files); + g_option_context_free (context); + +#ifdef G_OS_WIN32 + g_free (tmp); +#endif - return 0; + return retval; } /* Epilogue {{{1 */ diff --git a/gio/gsettings.c b/gio/gsettings.c index 2b974e90c..66c6f9bde 100644 --- a/gio/gsettings.c +++ b/gio/gsettings.c @@ -1571,6 +1571,7 @@ g_settings_set_value (GSettings *settings, g_return_val_if_fail (G_IS_SETTINGS (settings), FALSE); g_return_val_if_fail (key != NULL, FALSE); + g_variant_ref_sink (value); g_settings_schema_key_init (&skey, settings->priv->schema, key); if (!g_settings_schema_key_type_check (&skey, value)) @@ -1580,22 +1581,23 @@ g_settings_set_value (GSettings *settings, g_settings_schema_get_id (settings->priv->schema), g_variant_type_peek_string (skey.type), g_variant_get_type_string (value)); - - return FALSE; - } - - if (!g_settings_schema_key_range_check (&skey, value)) + success = FALSE; + } + else if (!g_settings_schema_key_range_check (&skey, value)) { g_warning ("g_settings_set_value: value for key '%s' in schema '%s' " "is outside of valid range", key, g_settings_schema_get_id (settings->priv->schema)); - - return FALSE; + success = FALSE; + } + else + { + success = g_settings_write_to_backend (settings, &skey, value); } - success = g_settings_write_to_backend (settings, &skey, value); g_settings_schema_key_clear (&skey); + g_variant_unref (value); return success; } @@ -3271,6 +3273,7 @@ g_settings_action_finalize (GObject *object) g_signal_handlers_disconnect_by_data (gsa->settings, gsa); g_object_unref (gsa->settings); + g_settings_schema_key_clear (&gsa->key); G_OBJECT_CLASS (g_settings_action_parent_class) ->finalize (object); diff --git a/gio/tests/gsettings.c b/gio/tests/gsettings.c index 18d28c25d..b1bbd4ed1 100644 --- a/gio/tests/gsettings.c +++ b/gio/tests/gsettings.c @@ -2373,10 +2373,8 @@ test_schema_list_keys (void) "farewell", NULL)); - g_strfreev (keys); g_settings_schema_unref (schema); - g_settings_schema_source_unref (src); } static void @@ -2440,6 +2438,8 @@ test_actions (void) g_assert_cmpstr (g_variant_get_string (state, NULL), ==, "kthxbye"); g_free (name); + g_variant_type_free (param_type); + g_variant_type_free (state_type); g_variant_unref (state); g_object_unref (string); @@ -2629,6 +2629,7 @@ main (int argc, char *argv[]) g_assert (g_file_get_contents (SRCDIR "/org.gtk.test.gschema.xml.orig", &schema_text, NULL, NULL)); g_assert (g_file_set_contents ("org.gtk.test.gschema.xml", schema_text, -1, NULL)); + g_free (schema_text); g_remove ("gschemas.compiled"); g_assert (g_spawn_command_line_sync ("../glib-compile-schemas --targetdir=. " |