Index: gio/gfile.c
===================================================================
--- gio/gfile.c	(revision 6756)
+++ gio/gfile.c	(working copy)
@@ -2115,8 +2115,10 @@
 
 /* Closes the streams */
 static gboolean
-copy_stream_with_progress (GInputStream           *in,
+copy_stream_with_progress (GFile                  *src,
+                           GInputStream           *in,
 			   GOutputStream          *out,
+                           GFileQueryInfoFlags     info_flags,
 			   GCancellable           *cancellable,
 			   GFileProgressCallback   progress_callback,
 			   gpointer                progress_callback_data,
@@ -2130,9 +2132,10 @@
   GFileInfo *info;
 
   total_size = 0;
-  info = g_file_input_stream_query_info (G_FILE_INPUT_STREAM (in),
-					 G_FILE_ATTRIBUTE_STANDARD_SIZE,
-					 cancellable, NULL);
+  info = g_file_query_info (src,
+                            G_FILE_ATTRIBUTE_STANDARD_SIZE,
+                            info_flags,
+                            cancellable, NULL);
   if (info)
     {
       total_size = g_file_info_get_size (info);
@@ -2210,6 +2213,7 @@
   GOutputStream *out;
   GFileInfo *info;
   const char *target;
+  GFileQueryInfoFlags info_flags = 0;
 
   /* Maybe copy the symlink? */
   if (flags & G_FILE_COPY_NOFOLLOW_SYMLINKS)
@@ -2260,7 +2264,11 @@
       return FALSE;
     }
 
-  if (!copy_stream_with_progress (in, out, cancellable,
+
+  if (flags & G_FILE_COPY_NOFOLLOW_SYMLINKS)
+    info_flags |= G_FILE_QUERY_INFO_NOFOLLOW_SYMLINKS;
+
+  if (!copy_stream_with_progress (source, in, out, info_flags, cancellable,
 				  progress_callback, progress_callback_data,
 				  error))
     return FALSE;
