summaryrefslogtreecommitdiff
path: root/gio
diff options
context:
space:
mode:
authorDongHun Kwak <dh0128.kwak@samsung.com>2017-05-19 09:25:12 +0900
committerDongHun Kwak <dh0128.kwak@samsung.com>2017-05-19 09:25:15 +0900
commit0ae6bccb945f3a47a486e2634867d7f89e805229 (patch)
tree3dcd94f8fa7da5116ebb21407d4c0ec00fb83271 /gio
parent8f6c550e4787e8ec2c1eb2a12e2a4d6563d78689 (diff)
downloadglib-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.c92
-rw-r--r--gio/gsettings.c19
-rw-r--r--gio/tests/gsettings.c5
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=. "