glib r6764 - branches/glib-2-16/gio
- From: alexl svn gnome org
- To: svn-commits-list gnome org
- Subject: glib r6764 - branches/glib-2-16/gio
- Date: Fri, 28 Mar 2008 12:44:25 +0000 (GMT)
Author: alexl
Date: Fri Mar 28 12:44:25 2008
New Revision: 6764
URL: http://svn.gnome.org/viewvc/glib?rev=6764&view=rev
Log:
2008-03-28 Alexander Larsson <alexl redhat com>
* 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)
Modified:
branches/glib-2-16/gio/ChangeLog
branches/glib-2-16/gio/gfile.c
Modified: branches/glib-2-16/gio/gfile.c
==============================================================================
--- branches/glib-2-16/gio/gfile.c (original)
+++ branches/glib-2-16/gio/gfile.c Fri Mar 28 12:44:25 2008
@@ -2117,6 +2117,8 @@
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 @@
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 @@
if (!res)
break;
-
+
if (progress_callback)
progress_callback (current_size, total_size, progress_callback_data);
}
@@ -2182,7 +2202,6 @@
/* 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 @@
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;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]