diff options
author | Xavier Roche <xroche@users.noreply.github.com> | 2013-09-06 16:55:20 +0000 |
---|---|---|
committer | Xavier Roche <xroche@users.noreply.github.com> | 2013-09-06 16:55:20 +0000 |
commit | fa1e5e31132be81e2605706a43a59227a4041f42 (patch) | |
tree | d036fe4ee91dea876e311e8f68b80b0afe77c1bb | |
parent | fd69106947dbb0a5139b032c6c8f7978092061ca (diff) |
Fixed a little bit the infamous DNS cache
-rw-r--r-- | src/htsback.c | 2 | ||||
-rw-r--r-- | src/htslib.c | 28 | ||||
-rw-r--r-- | src/htslib.h | 4 |
3 files changed, 10 insertions, 24 deletions
diff --git a/src/htsback.c b/src/htsback.c index 3dfba75..ccfdba1 100644 --- a/src/htsback.c +++ b/src/htsback.c @@ -2219,6 +2219,8 @@ void Hostlookup(void *pP) { // si c'est un fichier, la résolution est immédiate // idem pour ftp:// void back_solve(httrackp * opt, lien_back * back) { + assertf(opt != NULL); + assertf(back != NULL); if ((!strfield(back->url_adr, "file://")) && !strfield(back->url_adr, "ftp://") #if HTS_USEMMS diff --git a/src/htslib.c b/src/htslib.c index 6a9ba4c..ff8ec72 100644 --- a/src/htslib.c +++ b/src/htslib.c @@ -4628,7 +4628,7 @@ t_hostent *_hts_ghbn(t_dnscache * cache, const char *iadr, t_hostent * retour) { t_hostent *ret = NULL; hts_mutexlock(&dns_lock); - for(;;) { + for(; cache != NULL; cache = cache->n) { if (strcmp(cache->iadr, iadr) == 0) { // ok trouvé if (cache->host_length > 0) { // entrée valide if (retour->h_addr_list[0]) @@ -4644,13 +4644,6 @@ t_hostent *_hts_ghbn(t_dnscache * cache, const char *iadr, t_hostent * retour) { } ret = retour; break; - } else { // on a pas encore trouvé - if (cache->n != NULL) { // chercher encore - cache = cache->n; // suivant! - } else { - ret = NULL; - break; - } } } hts_mutexrelease(&dns_lock); @@ -4662,8 +4655,8 @@ t_hostent *_hts_ghbn(t_dnscache * cache, const char *iadr, t_hostent * retour) { // 1 ok // 2 non présent int hts_dnstest(httrackp * opt, const char *_iadr) { - int ret = 0; - t_dnscache *cache = _hts_cache(opt); // adresse du cache + int ret = 2; + t_dnscache *cache; char iadr[HTS_URLMAXSIZE * 2]; // sauter user:pass@ éventuel @@ -4684,17 +4677,10 @@ int hts_dnstest(httrackp * opt, const char *_iadr) { return 1; hts_mutexlock(&dns_lock); - for(;;) { + for(cache = _hts_cache(opt); cache != NULL; cache = cache->n) { if (strcmp(cache->iadr, iadr) == 0) { // ok trouvé ret = 1; break; - } else { // on a pas encore trouvé - if (cache->n != NULL) { // chercher encore - cache = cache->n; // suivant! - } else { - ret = 2; // non présent - break; - } } } hts_mutexrelease(&dns_lock); @@ -4826,10 +4812,8 @@ t_hostent *hts_gethostbyname2(httrackp * opt, const char *_iadr, void *v_buffer, else return NULL; // entrée erronée (erreur DNS) dans le DNS } else { // non présent dans le cache dns, tester - t_dnscache *c = cache; - - while(c->n) - c = c->n; // calculer queue + // find queue + for(; cache->n != NULL; cache = cache->n) ; #if HTS_WIDE_DEBUG DEBUG_W("gethostbyname\n"); diff --git a/src/htslib.h b/src/htslib.h index f1abc90..b299074 100644 --- a/src/htslib.h +++ b/src/htslib.h @@ -218,12 +218,12 @@ struct OLD_htsblk { typedef struct t_dnscache t_dnscache; #endif struct t_dnscache { - char iadr[1024]; struct t_dnscache *n; - char host_addr[HTS_MAXADDRLEN]; // 4 octets (v4), ou 16 octets (v6) int host_length; // 4 normalement - ==0 alors en cours de résolution + char host_addr[HTS_MAXADDRLEN]; // 4 octets (v4), ou 16 octets (v6) // ou >16 si sockaddr // ==-1 alors erreur (host n'éxiste pas) + char iadr[1024]; }; /* Library internal definictions */ |