diff options
author | Ondrej Holy <oholy@redhat.com> | 2014-11-24 14:21:39 +0100 |
---|---|---|
committer | Ondrej Holy <oholy@redhat.com> | 2014-12-03 08:54:52 +0100 |
commit | 643498c51747d2b0ff2290352afdac97a9771e02 (patch) | |
tree | 487442da40307895a0e51e5cb5e37d2455c796de | |
parent | 1400bc33d9f7299da6d21390209d48aef6e9fcca (diff) | |
download | gvfs-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.c | 19 |
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) |