mirror of
https://github.com/ostreedev/ostree.git
synced 2025-03-19 22:50:35 +03:00
lib: Use g_file_enumerator_iterate() if available, with fallback
Import `gs_file_enumerator_iterate()` for the next six months or so...after RHEL 7.3 is released I'm strongly considering hard requiring 2.46 or so. Likely at some point we should figure out how to share more "glib backport" code with NetworkManager at least. Closes: #341 Approved by: jlebon
This commit is contained in:
parent
9e2763106b
commit
90b9a06277
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user