From 4ba34702693607f4d6dd5133664dd950b2ce5220 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Tue, 21 Mar 2023 10:29:29 +0000 Subject: [PATCH] gio: Add some missing file info attribute checks in gio-list and gio-tree Further fallout from #2907. Signed-off-by: Philip Withnall Fixes: #2948 --- gio/gio-tool-info.c | 6 ++++-- gio/gio-tool-list.c | 9 ++++++--- gio/gio-tool-tree.c | 11 ++++++++--- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/gio/gio-tool-info.c b/gio/gio-tool-info.c index d51edb47b..749bd2d13 100644 --- a/gio/gio-tool-info.c +++ b/gio/gio-tool-info.c @@ -157,7 +157,8 @@ show_info (GFile *file, GFileInfo *info) GUnixMountEntry *entry; #endif - name = g_file_info_get_display_name (info); + name = g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME) ? + g_file_info_get_display_name (info) : NULL; if (name) { /* Translators: This is a noun and represents and attribute of a file */ @@ -166,7 +167,8 @@ show_info (GFile *file, GFileInfo *info) g_free (flatten); } - name = g_file_info_get_edit_name (info); + name = g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_EDIT_NAME) ? + g_file_info_get_edit_name (info) : NULL; if (name) { /* Translators: This is a noun and represents and attribute of a file */ diff --git a/gio/gio-tool-list.c b/gio/gio-tool-list.c index 24e3dac3c..0da86269d 100644 --- a/gio/gio-tool-list.c +++ b/gio/gio-tool-list.c @@ -54,10 +54,12 @@ show_file_listing (GFileInfo *info, GFile *parent) gboolean first_attr; GFile *child; - if ((g_file_info_get_is_hidden (info)) && !show_hidden) + if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN) && + g_file_info_get_is_hidden (info) && + !show_hidden) return; - if (print_display_names) + if (print_display_names && g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME)) name = g_file_info_get_display_name (info); else name = g_file_info_get_name (info); @@ -71,7 +73,8 @@ show_file_listing (GFileInfo *info, GFile *parent) g_object_unref (child); } - size = g_file_info_get_size (info); + size = g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_SIZE) ? + g_file_info_get_size (info) : 0; type = file_type_to_string (g_file_info_get_file_type (info)); if (show_long) g_print ("%s\t%"G_GUINT64_FORMAT"\t(%s)", print_uris? uri: name, (guint64)size, type); diff --git a/gio/gio-tool-tree.c b/gio/gio-tool-tree.c index 071588240..28fad051f 100644 --- a/gio/gio-tool-tree.c +++ b/gio/gio-tool-tree.c @@ -95,7 +95,9 @@ do_tree (GFile *f, unsigned int level, guint64 pattern) info_list = NULL; while ((info = g_file_enumerator_next_file (enumerator, NULL, NULL)) != NULL) { - if (g_file_info_get_is_hidden (info) && !show_hidden) + if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_IS_HIDDEN) && + g_file_info_get_is_hidden (info) && + !show_hidden) { g_object_unref (info); } @@ -151,7 +153,8 @@ do_tree (GFile *f, unsigned int level, guint64 pattern) } else { - if (g_file_info_get_is_symlink (info)) + if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_IS_SYMLINK) && + g_file_info_get_is_symlink (info)) { const char *target; target = g_file_info_get_symlink_target (info); @@ -162,7 +165,9 @@ do_tree (GFile *f, unsigned int level, guint64 pattern) g_print ("\n"); if ((type & G_FILE_TYPE_DIRECTORY) && - (follow_symlinks || !g_file_info_get_is_symlink (info))) + (follow_symlinks || + !(g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_IS_SYMLINK) && + g_file_info_get_is_symlink (info)))) { guint64 new_pattern; GFile *child;