summaryrefslogtreecommitdiff
path: root/src/cache.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cache.c')
-rw-r--r--src/cache.c28
1 files changed, 16 insertions, 12 deletions
diff --git a/src/cache.c b/src/cache.c
index 4f7f074c..448ce3db 100644
--- a/src/cache.c
+++ b/src/cache.c
@@ -366,7 +366,7 @@ int a_Cache_get_buf(const DilloUrl *Url, char **PBuf, int *BufSize)
/* Test for a redirection loop */
if (entry->Flags & CA_RedirectLoop || i == 3) {
- MSG_WARN("Redirect loop for URL: >%s<\n", URL_STR_(Url));
+ _MSG_WARN("Redirect loop for URL: >%s<\n", URL_STR_(Url));
break;
}
/* Test for a working redirection */
@@ -461,7 +461,7 @@ static void Cache_parse_header(CacheEntry_t *entry,
{
char *header = entry->Header->str;
char *Length, *Type, *location_str, *encoding;
- Dstr *decodedBuf;
+ Dstr *dbuf;
#ifndef DISABLE_COOKIES
Dlist *Cookies;
void *data;
@@ -512,8 +512,10 @@ static void Cache_parse_header(CacheEntry_t *entry,
entry->Decoder = a_Decode_content_init(encoding);
dFree(encoding);
- decodedBuf = a_Decode_process(entry->Decoder, buf + HdrLen,
- buf_size - HdrLen);
+ dbuf = dStr_sized_new(buf_size - HdrLen);
+ dStr_append_l(dbuf, buf + HdrLen, buf_size - HdrLen);
+
+ dbuf = a_Decode_process(entry->Decoder, dbuf);
if (entry->ExpectedSize > 0) {
if (entry->ExpectedSize > HUGE_FILESIZE) {
@@ -525,8 +527,8 @@ static void Cache_parse_header(CacheEntry_t *entry,
dStr_free(entry->Data, 1);
entry->Data = dStr_sized_new(MIN(entry->ExpectedSize+1, MAX_INIT_BUF));
}
- dStr_append_l(entry->Data, decodedBuf->str, decodedBuf->len);
- dStr_free(decodedBuf, 1);
+ dStr_append_l(entry->Data, dbuf->str, dbuf->len);
+ dStr_free(dbuf, 1);
/* Get Content-Type */
if ((Type = Cache_parse_field(header, "Content-Type")) == NULL) {
@@ -582,7 +584,7 @@ void a_Cache_process_dbuf(int Op, const char *buf, size_t buf_size,
{
int len;
CacheEntry_t *entry = Cache_entry_search(Url);
- Dstr *decodedBuf;
+ Dstr *dbuf;
/* Assert a valid entry (not aborted) */
dReturn_if_fail (entry != NULL);
@@ -625,16 +627,18 @@ void a_Cache_process_dbuf(int Op, const char *buf, size_t buf_size,
entry->TransferSize += buf_size;
+ dbuf = dStr_sized_new(buf_size);
+ dStr_append_l(dbuf, buf, buf_size);
+
/* Assert we have a Decoder.
* BUG: this is a workaround, more study and a proper design
* for handling redirects is required */
if (entry->Decoder != NULL) {
- decodedBuf = a_Decode_process(entry->Decoder, buf, buf_size);
- dStr_append_l(entry->Data, decodedBuf->str, decodedBuf->len);
- dStr_free(decodedBuf, 1);
- } else {
- dStr_append_l(entry->Data, buf, buf_size);
+ dbuf = a_Decode_process(entry->Decoder, dbuf);
}
+ dStr_append_l(entry->Data, dbuf->str, dbuf->len);
+ dStr_free(dbuf, 1);
+
Cache_process_queue(entry);
}