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:54:52 +0100
commit643498c51747d2b0ff2290352afdac97a9771e02 (patch)
tree487442da40307895a0e51e5cb5e37d2455c796de
parent1400bc33d9f7299da6d21390209d48aef6e9fcca (diff)
downloadgvfs-643498c51747d2b0ff2290352afdac97a9771e02.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 2056a4a3..cde02939 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);
+ }
+ }
text = soup_message_headers_get_content_type (msg->response_headers, NULL);
if (text)