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:
Colin Walters 2016-06-14 21:51:10 -04:00 committed by Atomic Bot
parent 9e2763106b
commit 90b9a06277
11 changed files with 98 additions and 24 deletions

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -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

View File

@ -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;