From b0bce4ad41937dabf7e5c94dcce3caf4e88f3f97 Mon Sep 17 00:00:00 2001 From: "Owen W. Taylor" Date: Mon, 30 Jul 2012 13:33:05 +0200 Subject: [PATCH] g_file_make_directory_with_parents: Fix error propagation When creating a directory fails for some reason other than the parent not existing, don't clear the error before we try to propagate it. To reproduce, run 'ostadmin init' on /ostree or otherwise try to run the function on a directory with a parent directory where the current user is not allowed to write. https://bugzilla.gnome.org/show_bug.cgi?id=680823 --- gio/gfile.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/gio/gfile.c b/gio/gfile.c index f66487575..3bdae74c1 100644 --- a/gio/gfile.c +++ b/gio/gfile.c @@ -3395,12 +3395,14 @@ g_file_make_directory_with_parents (GFile *file, work_file = g_object_ref (parent_file); if (!result && my_error->code == G_IO_ERROR_NOT_FOUND) - list = g_list_prepend (list, parent_file); /* Transfer ownership of ref */ + { + g_clear_error (&my_error); + list = g_list_prepend (list, parent_file); /* Transfer ownership of ref */ + } else g_object_unref (parent_file); } - g_clear_error (&my_error); for (l = list; result && l; l = l->next) { result = g_file_make_directory ((GFile *) l->data, cancellable, &my_error);