[gnome-builder] flatpak: don't follow through symlinks
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-builder] flatpak: don't follow through symlinks
- Date: Thu, 25 Jan 2018 08:23:24 +0000 (UTC)
commit 316097e2369366c442a68034cef1b6244909095c
Author: Christian Hergert <chergert redhat com>
Date: Thu Jan 25 00:19:22 2018 -0800
flatpak: don't follow through symlinks
src/plugins/flatpak/gbp-flatpak-sources.c | 46 ++++++++++++++++++-------------
1 file changed, 27 insertions(+), 19 deletions(-)
---
diff --git a/src/plugins/flatpak/gbp-flatpak-sources.c b/src/plugins/flatpak/gbp-flatpak-sources.c
index 1792134b0..4ffaee53c 100644
--- a/src/plugins/flatpak/gbp-flatpak-sources.c
+++ b/src/plugins/flatpak/gbp-flatpak-sources.c
@@ -352,43 +352,51 @@ strip_components_into (GFile *dest,
int level,
GError **error)
{
- g_autoptr(GFileEnumerator) dir_enum = NULL;
- g_autoptr(GFileInfo) child_info = NULL;
- GError *temp_error = NULL;
-
- dir_enum = g_file_enumerate_children (src, "standard::name,standard::type",
- G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
- NULL, error);
- if (!dir_enum)
+ g_autoptr(GFileEnumerator) enumerator = NULL;
+ g_autoptr(GError) local_error = NULL;
+ gpointer infoptr;
+
+ g_assert (G_IS_FILE (src));
+ g_assert (G_IS_FILE (dest));
+
+ enumerator = g_file_enumerate_children (src,
+ G_FILE_ATTRIBUTE_STANDARD_IS_SYMLINK","
+ G_FILE_ATTRIBUTE_STANDARD_NAME","
+ G_FILE_ATTRIBUTE_STANDARD_TYPE,
+ G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS,
+ NULL,
+ error);
+ if (enumerator == NULL)
return FALSE;
- while ((child_info = g_file_enumerator_next_file (dir_enum, NULL, &temp_error)))
+ while ((infoptr = g_file_enumerator_next_file (enumerator, NULL, &local_error)))
{
+ g_autoptr(GFileInfo) info = infoptr;
g_autoptr(GFile) child = NULL;
g_autoptr(GFile) dest_child = NULL;
+ GFileType file_type;
- child = g_file_enumerator_get_child (dir_enum, child_info);
+ if (g_file_info_get_is_symlink (info))
+ continue;
- if (g_file_info_get_file_type (child_info) == G_FILE_TYPE_DIRECTORY &&
- level > 0)
+ child = g_file_enumerator_get_child (enumerator, info);
+ file_type = g_file_info_get_file_type (info);
+
+ if (file_type == G_FILE_TYPE_DIRECTORY && level > 0)
{
if (!strip_components_into (dest, child, level - 1, error))
return FALSE;
-
- g_clear_object (&child_info);
continue;
}
- dest_child = g_file_get_child (dest, g_file_info_get_name (child_info));
+ dest_child = g_file_get_child (dest, g_file_info_get_name (info));
if (!g_file_move (child, dest_child, G_FILE_COPY_NONE, NULL, NULL, NULL, error))
return FALSE;
-
- g_clear_object (&child_info);
}
- if (temp_error != NULL)
+ if (local_error != NULL)
{
- g_propagate_error (error, temp_error);
+ g_propagate_error (error, g_steal_pointer (&local_error));
return FALSE;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]