summaryrefslogtreecommitdiff
path: root/src/htscache.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/htscache.c')
-rw-r--r--src/htscache.c28
1 files changed, 24 insertions, 4 deletions
diff --git a/src/htscache.c b/src/htscache.c
index d3698cf..a8fd2af 100644
--- a/src/htscache.c
+++ b/src/htscache.c
@@ -153,7 +153,7 @@ void cache_mayadd(httrackp* opt,cache_back* cache,htsblk* r,const char* url_adr,
// (problem reported by Lars Clausen)
// we just store statuscode + location (if any)
if (url_save == NULL && r->statuscode / 100 >= 3) {
- // cached "fast" header doesn't uet exists
+ // cached "fast" header doesn't yet exists
if (inthash_read(cache->cached_tests, concat(OPT_GET_BUFF(opt), url_adr, url_fil), NULL) == 0) {
char BIGSTK tempo[HTS_URLMAXSIZE*2];
sprintf(tempo, "%d", (int)r->statuscode);
@@ -244,6 +244,8 @@ void cache_add(httrackp* opt,cache_back* cache,const htsblk *r,const char* url_a
/* Data in cache ? */
if (is_hypertext_mime(opt,r->contenttype, url_fil)
|| (may_be_hypertext_mime(opt,r->contenttype, url_fil) && r->adr != NULL)
+ /* store error messages! */
+ || !HTTP_IS_OK(r->statuscode)
)
{
dataincache=1;
@@ -543,7 +545,7 @@ htsblk cache_read_ro(httrackp* opt,cache_back* cache,const char* adr,const char*
htsblk cache_read_including_broken(httrackp* opt,cache_back* cache,const char* adr,const char* fil) {
htsblk r = cache_read(opt,cache,adr,fil,NULL,NULL);
- if (r.statuscode = -1) {
+ if (r.statuscode == -1) {
lien_back *itemback = NULL;
if (back_unserialize_ref(opt, adr, fil, &itemback) == 0) {
r = itemback->r;
@@ -766,8 +768,26 @@ static htsblk cache_readex_new(httrackp* opt,cache_back* cache,const char* adr,c
if (!dataincache) {
if (strnotempty(save)) { // Pas de donnée en cache, bizarre car html!!!
- r.statuscode=STATUSCODE_INVALID;
- strcpybuff(r.msg,"Previous cache file not found (2)");
+ // Hack: if error page data is missing (pre-3.45 releases), create one. We won't use it anyway.
+ if (!HTTP_IS_OK(r.statuscode)) {
+ const int size = 512;
+ r.adr = malloct(size);
+ sprintf(r.adr, "<html><!-- Missing Error Page ; Generated by HTTrack Website Copier --><head><title>HTTP Error %u</title></head><body><h1>HTTP Error %u</h1></body></html>",
+ r.statuscode, r.statuscode);
+ r.size = strlen(r.adr);
+ assertf(r.size < size);
+ strcpy(r.contenttype, "text/html");
+ strcpy(r.charset, "utf-8");
+ // Fake total size, too.
+ r.totalsize = r.size;
+ // Not on disk anymore!
+ r.is_write = 0;
+ }
+ // Otherwise, this is a real error.
+ else {
+ r.statuscode=STATUSCODE_INVALID;
+ strcpybuff(r.msg,"Previous cache file not found (2)");
+ }
} else { /* Read in memory from cache */
if (strnotempty(previous_save) && fexist(previous_save)) {
FILE* fp = fopen(fconv(catbuff, previous_save), "rb");