diff --git a/gio/gfile.c b/gio/gfile.c index 2ceeb3b05..d52262f13 100644 --- a/gio/gfile.c +++ b/gio/gfile.c @@ -3378,10 +3378,24 @@ file_copy_fallback (GFile *source, if (!info) goto out; + if (!g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_TYPE)) + { + g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, + _("Cannot retrieve attribute %s"), G_FILE_ATTRIBUTE_STANDARD_TYPE); + goto out; + } + /* Maybe copy the symlink? */ if ((flags & G_FILE_COPY_NOFOLLOW_SYMLINKS) && g_file_info_get_file_type (info) == G_FILE_TYPE_SYMBOLIC_LINK) { + if (!g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET)) + { + g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, + _("Cannot retrieve attribute %s"), G_FILE_ATTRIBUTE_STANDARD_SYMLINK_TARGET); + goto out; + } + target = g_file_info_get_symlink_target (info); if (target) { diff --git a/gio/win32/gwinhttpfile.c b/gio/win32/gwinhttpfile.c index e73c87658..408c2ade8 100644 --- a/gio/win32/gwinhttpfile.c +++ b/gio/win32/gwinhttpfile.c @@ -537,6 +537,9 @@ g_winhttp_file_query_info (GFile *file, g_free (display_name); } + if (_g_file_attribute_matcher_matches_id (matcher, G_FILE_ATTRIBUTE_ID_STANDARD_TYPE)) + g_file_info_set_file_type (info, G_FILE_TYPE_REGULAR); + content_length = NULL; if (_g_winhttp_query_header (winhttp_file->vfs, request,