=== modified file 'src/ChangeLog' --- src/ChangeLog 2012-01-26 21:30:19 +0000 +++ src/ChangeLog 2012-01-26 21:56:27 +0000 @@ -1,3 +1,9 @@ +2012-01-27 Gijs van Tulder + + * retr.c (fd_read_body): If the response is chunked, the chunk + headers are now written to the WARC file, making the WARC file + an exact copy of the HTTP response. + 2012-01-27 Gijs van Tulder * retr.c (fd_read_body): Fix a memory leak with chunked responses. * http.c (skip_short_body): Fix the same memory leak. === modified file 'src/retr.c' --- src/retr.c 2012-01-26 21:30:19 +0000 +++ src/retr.c 2012-01-26 21:56:27 +0000 @@ -213,6 +213,9 @@ the data is stored to ELAPSED. If OUT2 is non-NULL, the contents is also written to OUT2. + OUT2 will get an exact copy of the response: if this is a chunked + response, everything -- including the chunk headers -- is written + to OUT2. (OUT will only get the unchunked response.) The function exits and returns the amount of data read. In case of error while reading data, -1 is returned. In case of error while @@ -305,6 +308,8 @@ ret = -1; break; } + else if (out2 != NULL) + fwrite (line, 1, strlen (line), out2); remaining_chunk_size = strtol (line, &endl, 16); xfree (line); @@ -316,7 +321,11 @@ if (line == NULL) ret = -1; else - xfree (line); + { + if (out2 != NULL) + fwrite (line, 1, strlen (line), out2); + xfree (line); + } break; } } @@ -384,7 +393,11 @@ break; } else - xfree (line); + { + if (out2 != NULL) + fwrite (line, 1, strlen (line), out2); + xfree (line); + } } } }