summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOndrej Holy <oholy@redhat.com>2014-11-24 14:21:39 +0100
committerOndrej Holy <oholy@redhat.com>2014-12-03 08:49:21 +0100
commit38f093cfc0144972adda956320f5f968f7e1220a (patch)
tree920a2c46be4215c80d0c2d665c31bfd72cda65f0
parentf7d5375e4883473b4f8bf4d73d893c8456b1b5d9 (diff)
downloadgvfs-38f093cfc0144972adda956320f5f968f7e1220a.tar.gz
http: Report correct size for partial content msg
Content length is wrongly used as file size for partial content messages (e.g. after seek), therefor length from range header has to be used instead. https://bugzilla.gnome.org/show_bug.cgi?id=690226
-rw-r--r--daemon/gvfsbackendhttp.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/daemon/gvfsbackendhttp.c b/daemon/gvfsbackendhttp.c
index 0db563f4..7d6f32cb 100644
--- a/daemon/gvfsbackendhttp.c
+++ b/daemon/gvfsbackendhttp.c
@@ -540,8 +540,23 @@ file_info_from_message (SoupMessage *msg,
g_free (basename);
g_free (ed_name);
- if (soup_message_headers_get_encoding(msg->response_headers) == SOUP_ENCODING_CONTENT_LENGTH)
- g_file_info_set_size (info, soup_message_headers_get_content_length (msg->response_headers));
+ if (soup_message_headers_get_encoding (msg->response_headers) == SOUP_ENCODING_CONTENT_LENGTH)
+ {
+ goffset start, end, length;
+ gboolean ret;
+
+ ret = soup_message_headers_get_content_range (msg->response_headers,
+ &start, &end, &length);
+ if (ret && length != -1)
+ {
+ g_file_info_set_size (info, length);
+ }
+ else if (!ret)
+ {
+ length = soup_message_headers_get_content_length (msg->response_headers);
+ g_file_info_set_size (info, length);
+ }
+ }
g_file_info_set_file_type (info, G_FILE_TYPE_REGULAR);