From: Alexander Larsson Date: Fri, 28 Mar 2008 12:43:11 +0000 (+0000) Subject: Fallback to g_file_query_info for source size if X-Git-Tag: GLIB_2_17_0~127 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=941513cdca56bc56b962c38fb63ebfc0a6cc824b;p=platform%2Fupstream%2Fglib.git Fallback to g_file_query_info for source size if 2008-03-28 Alexander Larsson * gfile.c: (copy_stream_with_progress): (file_copy_fallback): Fallback to g_file_query_info for source size if g_file_input_stream_query_info fails. (#524579) svn path=/trunk/; revision=6763 --- diff --git a/gio/ChangeLog b/gio/ChangeLog index ceadde9..377e718 100644 --- a/gio/ChangeLog +++ b/gio/ChangeLog @@ -1,5 +1,13 @@ 2008-03-28 Alexander Larsson + Reviewed by NOBODY (OOPS!). + + * gfile.c: + (copy_stream_with_progress): + (file_copy_fallback): + +2008-03-28 Alexander Larsson + * glocalfile.c (g_local_file_move): Reuse old string instead of adding new one. diff --git a/gio/gfile.c b/gio/gfile.c index 3a6c9a6..b592ed8 100644 --- a/gio/gfile.c +++ b/gio/gfile.c @@ -2117,6 +2117,8 @@ g_file_copy_attributes (GFile *source, static gboolean copy_stream_with_progress (GInputStream *in, GOutputStream *out, + GFile *source, + GFileQueryInfoFlags info_flags, GCancellable *cancellable, GFileProgressCallback progress_callback, gpointer progress_callback_data, @@ -2129,15 +2131,33 @@ copy_stream_with_progress (GInputStream *in, goffset total_size; GFileInfo *info; - total_size = 0; + total_size = -1; info = g_file_input_stream_query_info (G_FILE_INPUT_STREAM (in), G_FILE_ATTRIBUTE_STANDARD_SIZE, cancellable, NULL); if (info) { - total_size = g_file_info_get_size (info); + if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_SIZE)) + total_size = g_file_info_get_size (info); g_object_unref (info); } + + if (total_size == -1) + { + info = g_file_query_info (source, + G_FILE_ATTRIBUTE_STANDARD_SIZE, + G_FILE_QUERY_INFO_NONE, + cancellable, NULL); + if (info) + { + if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_SIZE)) + total_size = g_file_info_get_size (info); + g_object_unref (info); + } + } + + if (total_size == -1) + total_size = 0; current_size = 0; res = TRUE; @@ -2171,7 +2191,7 @@ copy_stream_with_progress (GInputStream *in, if (!res) break; - + if (progress_callback) progress_callback (current_size, total_size, progress_callback_data); } @@ -2182,7 +2202,6 @@ copy_stream_with_progress (GInputStream *in, /* Make sure we send full copied size */ if (progress_callback) progress_callback (current_size, total_size, progress_callback_data); - /* Don't care about errors in source here */ g_input_stream_close (in, cancellable, NULL); @@ -2260,7 +2279,7 @@ file_copy_fallback (GFile *source, return FALSE; } - if (!copy_stream_with_progress (in, out, cancellable, + if (!copy_stream_with_progress (in, out, source, cancellable, progress_callback, progress_callback_data, error)) return FALSE;