From f03190066214707f906b8e0f0492df19b14d8de6 Mon Sep 17 00:00:00 2001 From: hniksic Date: Thu, 13 Dec 2001 11:18:31 -0800 Subject: [PATCH] [svn] Don't abort when one URL references more than one file. Published in . --- src/ChangeLog | 5 +++++ src/recur.c | 27 +++++++++++++++++++++++---- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index b7d4e3e4..1ca8b348 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2001-12-13 Hrvoje Niksic + + * recur.c (register_download): Don't abort when one URL references + two different files. + 2001-12-13 Hrvoje Niksic * http.c (gethttp): Check for conn->scheme, not u->scheme, before diff --git a/src/recur.c b/src/recur.c index d712b4db..a970c698 100644 --- a/src/recur.c +++ b/src/recur.c @@ -746,13 +746,32 @@ register_download (const char *url, const char *file) dissociate_urls_from_file (file); } + hash_table_put (dl_file_url_map, xstrdup (file), xstrdup (url)); + + url_only: /* A URL->FILE mapping is not possible without a FILE->URL mapping. If the latter were present, it should have been removed by the - above `if'. */ - assert (!hash_table_contains (dl_url_file_map, url)); + above `if'. So we could write: + + assert (!hash_table_contains (dl_url_file_map, url)); + + The above is correct when running in recursive mode where the + same URL always resolves to the same file. But if you do + something like: + + wget URL URL + + then the first URL will resolve to "FILE", and the other to + "FILE.1". In that case, FILE.1 will not be found in + dl_file_url_map, but URL will still point to FILE in + dl_url_file_map. */ + if (hash_table_get_pair (dl_url_file_map, url, &old_url, &old_file)) + { + hash_table_remove (dl_url_file_map, url); + xfree (old_url); + xfree (old_file); + } - hash_table_put (dl_file_url_map, xstrdup (file), xstrdup (url)); - url_only: hash_table_put (dl_url_file_map, xstrdup (url), xstrdup (file)); }