diff --git a/src/libostree/ostree-bootloader-grub2.c b/src/libostree/ostree-bootloader-grub2.c index c970e662..6aa551ae 100644 --- a/src/libostree/ostree-bootloader-grub2.c +++ b/src/libostree/ostree-bootloader-grub2.c @@ -83,8 +83,8 @@ _ostree_bootloader_grub2_query (OstreeBootloader *bootloader, const char *fname; g_autofree char *subdir_grub_cfg = NULL; - if (!gs_file_enumerator_iterate (direnum, &file_info, NULL, - cancellable, error)) + if (!g_file_enumerator_iterate (direnum, &file_info, NULL, + cancellable, error)) goto out; if (file_info == NULL) break; diff --git a/src/libostree/ostree-gpg-verifier.c b/src/libostree/ostree-gpg-verifier.c index b9a03a11..0ec0b515 100644 --- a/src/libostree/ostree-gpg-verifier.c +++ b/src/libostree/ostree-gpg-verifier.c @@ -253,8 +253,8 @@ _ostree_gpg_verifier_add_keyring_dir (OstreeGpgVerifier *self, GFile *path; const char *name; - if (!gs_file_enumerator_iterate (enumerator, &file_info, &path, - cancellable, error)) + if (!g_file_enumerator_iterate (enumerator, &file_info, &path, + cancellable, error)) goto out; if (file_info == NULL) break; diff --git a/src/libostree/ostree-repo-checkout.c b/src/libostree/ostree-repo-checkout.c index 5f7cf0bd..59c8517a 100644 --- a/src/libostree/ostree-repo-checkout.c +++ b/src/libostree/ostree-repo-checkout.c @@ -696,8 +696,8 @@ checkout_tree_at (OstreeRepo *self, GFile *src_child; const char *name; - if (!gs_file_enumerator_iterate (dir_enum, &file_info, &src_child, - cancellable, error)) + if (!g_file_enumerator_iterate (dir_enum, &file_info, &src_child, + cancellable, error)) goto out; if (file_info == NULL) break; diff --git a/src/libostree/ostree-repo-commit.c b/src/libostree/ostree-repo-commit.c index cec19e4a..0d45dd47 100644 --- a/src/libostree/ostree-repo-commit.c +++ b/src/libostree/ostree-repo-commit.c @@ -2659,8 +2659,8 @@ write_directory_to_mtree_internal (OstreeRepo *self, { GFileInfo *child_info; - if (!gs_file_enumerator_iterate (dir_enum, &child_info, NULL, - cancellable, error)) + if (!g_file_enumerator_iterate (dir_enum, &child_info, NULL, + cancellable, error)) goto out; if (child_info == NULL) break; diff --git a/src/libostree/ostree-repo-libarchive.c b/src/libostree/ostree-repo-libarchive.c index 45427ef7..cfecd6d9 100644 --- a/src/libostree/ostree-repo-libarchive.c +++ b/src/libostree/ostree-repo-libarchive.c @@ -1075,8 +1075,8 @@ write_directory_to_libarchive_recurse (OstreeRepo *self, GFileInfo *file_info; GFile *path; - if (!gs_file_enumerator_iterate (dir_enum, &file_info, &path, - cancellable, error)) + if (!g_file_enumerator_iterate (dir_enum, &file_info, &path, + cancellable, error)) goto out; if (file_info == NULL) break; diff --git a/src/libostree/ostree-repo-static-delta-core.c b/src/libostree/ostree-repo-static-delta-core.c index de9e6c7a..d4f8a573 100644 --- a/src/libostree/ostree-repo-static-delta-core.c +++ b/src/libostree/ostree-repo-static-delta-core.c @@ -94,8 +94,8 @@ ostree_repo_list_static_delta_names (OstreeRepo *self, GFileInfo *file_info; GFile *child; - if (!gs_file_enumerator_iterate (dir_enum, &file_info, &child, - NULL, error)) + if (!g_file_enumerator_iterate (dir_enum, &file_info, &child, + NULL, error)) goto out; if (file_info == NULL) break; @@ -117,8 +117,8 @@ ostree_repo_list_static_delta_names (OstreeRepo *self, const char *name1; const char *name2; - if (!gs_file_enumerator_iterate (dir_enum2, &file_info2, &child2, - NULL, error)) + if (!g_file_enumerator_iterate (dir_enum2, &file_info2, &child2, + NULL, error)) goto out; if (file_info2 == NULL) break; diff --git a/src/libostree/ostree-repo.c b/src/libostree/ostree-repo.c index 0b918ed8..81fc719f 100644 --- a/src/libostree/ostree-repo.c +++ b/src/libostree/ostree-repo.c @@ -2070,8 +2070,8 @@ append_remotes_d (OstreeRepo *self, const char *name; guint32 type; - if (!gs_file_enumerator_iterate (direnum, &file_info, &path, - NULL, error)) + if (!g_file_enumerator_iterate (direnum, &file_info, &path, + NULL, error)) goto out; if (file_info == NULL) break; diff --git a/src/libostree/ostree-sysroot-cleanup.c b/src/libostree/ostree-sysroot-cleanup.c index 64c1389e..862d8154 100644 --- a/src/libostree/ostree-sysroot-cleanup.c +++ b/src/libostree/ostree-sysroot-cleanup.c @@ -65,8 +65,8 @@ _ostree_sysroot_list_deployment_dirs_for_os (GFile *osdir, g_autofree char *csum = NULL; gint deployserial; - if (!gs_file_enumerator_iterate (dir_enum, &file_info, &child, - cancellable, error)) + if (!g_file_enumerator_iterate (dir_enum, &file_info, &child, + cancellable, error)) goto out; if (file_info == NULL) break; @@ -127,8 +127,8 @@ list_all_deployment_directories (OstreeSysroot *self, GFileInfo *file_info = NULL; GFile *child = NULL; - if (!gs_file_enumerator_iterate (dir_enum, &file_info, &child, - NULL, error)) + if (!g_file_enumerator_iterate (dir_enum, &file_info, &child, + NULL, error)) goto out; if (file_info == NULL) break; @@ -215,8 +215,8 @@ list_all_boot_directories (OstreeSysroot *self, GFile *child = NULL; const char *name; - if (!gs_file_enumerator_iterate (dir_enum, &file_info, &child, - NULL, error)) + if (!g_file_enumerator_iterate (dir_enum, &file_info, &child, + NULL, error)) goto out; if (file_info == NULL) break; diff --git a/src/libotutil/ot-gio-utils.c b/src/libotutil/ot-gio-utils.c index eb9b94f5..4ff2feda 100644 --- a/src/libotutil/ot-gio-utils.c +++ b/src/libotutil/ot-gio-utils.c @@ -493,3 +493,55 @@ ot_util_ensure_directory_and_fsync (GFile *dir, out: return ret; } + +#if !GLIB_CHECK_VERSION(2, 44, 0) + +gboolean +ot_file_enumerator_iterate (GFileEnumerator *direnum, + GFileInfo **out_info, + GFile **out_child, + GCancellable *cancellable, + GError **error) +{ + gboolean ret = FALSE; + GError *temp_error = NULL; + + static GQuark cached_info_quark; + static GQuark cached_child_quark; + static gsize quarks_initialized; + + g_return_val_if_fail (direnum != NULL, FALSE); + g_return_val_if_fail (out_info != NULL, FALSE); + + if (g_once_init_enter (&quarks_initialized)) + { + cached_info_quark = g_quark_from_static_string ("ot-cached-info"); + cached_child_quark = g_quark_from_static_string ("ot-cached-child"); + g_once_init_leave (&quarks_initialized, 1); + } + + *out_info = g_file_enumerator_next_file (direnum, cancellable, &temp_error); + if (out_child) + *out_child = NULL; + if (temp_error != NULL) + { + g_propagate_error (error, temp_error); + goto out; + } + else if (*out_info != NULL) + { + g_object_set_qdata_full ((GObject*)direnum, cached_info_quark, *out_info, (GDestroyNotify)g_object_unref); + if (out_child != NULL) + { + const char *name = g_file_info_get_name (*out_info); + *out_child = g_file_get_child (g_file_enumerator_get_container (direnum), name); + g_object_set_qdata_full ((GObject*)direnum, cached_child_quark, *out_child, (GDestroyNotify)g_object_unref); + } + } + + ret = TRUE; + out: + return ret; +} + +#endif diff --git a/src/libotutil/ot-gio-utils.h b/src/libotutil/ot-gio-utils.h index 355073af..030acac6 100644 --- a/src/libotutil/ot-gio-utils.h +++ b/src/libotutil/ot-gio-utils.h @@ -93,4 +93,26 @@ gboolean ot_util_fsync_directory (GFile *dir, GCancellable *cancellable, GError **error); +#if !GLIB_CHECK_VERSION(2, 44, 0) +gboolean +ot_file_enumerator_iterate (GFileEnumerator *direnum, + GFileInfo **out_info, + GFile **out_child, + GCancellable *cancellable, + GError **error); +#else +static inline gboolean +ot_file_enumerator_iterate (GFileEnumerator *direnum, + GFileInfo **out_info, + GFile **out_child, + GCancellable *cancellable, + GError **error) +{ + G_GNUC_BEGIN_IGNORE_DEPRECATIONS; + return (g_file_enumerator_iterate) (direnum, out_info, out_child, cancellable, error); + G_GNUC_END_IGNORE_DEPRECATIONS; +} +#endif +#define g_file_enumerator_iterate ot_file_enumerator_iterate + G_END_DECLS diff --git a/src/ostree/ot-admin-instutil-builtin-selinux-ensure-labeled.c b/src/ostree/ot-admin-instutil-builtin-selinux-ensure-labeled.c index 776ab54f..692a2623 100644 --- a/src/ostree/ot-admin-instutil-builtin-selinux-ensure-labeled.c +++ b/src/ostree/ot-admin-instutil-builtin-selinux-ensure-labeled.c @@ -114,8 +114,8 @@ relabel_recursively (OstreeSePolicy *sepolicy, GFile *child; GFileType ftype; - if (!gs_file_enumerator_iterate (direnum, &file_info, &child, - cancellable, error)) + if (!g_file_enumerator_iterate (direnum, &file_info, &child, + cancellable, error)) goto out; if (file_info == NULL) break;