diff options
Diffstat (limited to 'src/htscache.c')
-rw-r--r-- | src/htscache.c | 28 |
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"); |