X-Git-Url: http://sjero.net/git/?p=wget;a=blobdiff_plain;f=src%2Fconvert.c;h=abad5db09af50bb528f9c5f102596b6be1a613ba;hp=3459edada8d1ec3ca081ab9183583a2fa3dcea2a;hb=8624553a31b148f9051cc11725bc01d9760fa07b;hpb=6ce3d0cf128e41ad9622450a8425b5dda449b0d0 diff --git a/src/convert.c b/src/convert.c index 3459edad..abad5db0 100644 --- a/src/convert.c +++ b/src/convert.c @@ -1,6 +1,6 @@ /* Conversion of links to local files. - Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free - Software Foundation, Inc. + Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 + Free Software Foundation, Inc. This file is part of GNU Wget. @@ -33,9 +33,7 @@ as that of the covered work. */ #include #include #include -#ifdef HAVE_UNISTD_H -# include -#endif /* HAVE_UNISTD_H */ +#include #include #include #include "convert.h" @@ -60,7 +58,7 @@ struct hash_table *downloaded_css_set; static void convert_links (const char *, struct urlpos *); -void +static void convert_links_in_hashtable (struct hash_table *downloaded_set, int is_css, int *file_count) @@ -126,6 +124,9 @@ convert_links_in_hashtable (struct hash_table *downloaded_set, set_uri_encoding (pi, opt.locale, true); u = url_parse (cur_url->url->url, NULL, pi, true); + if (!u) + continue; + local_name = hash_table_get (dl_url_file_map, u->url); /* Decide on the conversion type. */ @@ -203,7 +204,7 @@ static const char *replace_plain (const char*, int, FILE*, const char *); static const char *replace_attr (const char *, int, FILE *, const char *); static const char *replace_attr_refresh_hack (const char *, int, FILE *, const char *, int); -static char *local_quote_string (const char *); +static char *local_quote_string (const char *, bool); static char *construct_relative (const char *, const char *); /* Change the links in one file. LINKS is a list of links in the @@ -301,7 +302,8 @@ convert_links (const char *file, struct urlpos *links) /* Convert absolute URL to relative. */ { char *newname = construct_relative (file, link->local_name); - char *quoted_newname = local_quote_string (newname); + char *quoted_newname = local_quote_string (newname, + link->link_css_p); if (link->link_css_p) p = replace_plain (p, link->size, fp, quoted_newname); @@ -325,7 +327,7 @@ convert_links (const char *file, struct urlpos *links) char *quoted_newlink = html_quote_string (newlink); if (link->link_css_p) - p = replace_plain (p, link->size, fp, quoted_newlink); + p = replace_plain (p, link->size, fp, newlink); else if (!link->link_refresh_p) p = replace_attr (p, link->size, fp, quoted_newlink); else @@ -612,14 +614,14 @@ find_fragment (const char *beg, int size, const char **bp, const char **ep) because those characters have special meanings in URLs. */ static char * -local_quote_string (const char *file) +local_quote_string (const char *file, bool no_html_quote) { const char *from; char *newname, *to; char *any = strpbrk (file, "?#%;"); if (!any) - return html_quote_string (file); + return no_html_quote ? strdup (file) : html_quote_string (file); /* Allocate space assuming the worst-case scenario, each character having to be quoted. */ @@ -656,7 +658,7 @@ local_quote_string (const char *file) } *to = '\0'; - return html_quote_string (newname); + return no_html_quote ? strdup (newname) : html_quote_string (newname); } /* Book-keeping code for dl_file_url_map, dl_url_file_map, @@ -871,7 +873,7 @@ register_delete_file (const char *file) /* Register that FILE is an HTML file that has been downloaded. */ void -register_html (const char *url, const char *file) +register_html (const char *file) { if (!downloaded_html_set) downloaded_html_set = make_string_hash_table (0); @@ -881,7 +883,7 @@ register_html (const char *url, const char *file) /* Register that FILE is a CSS file that has been downloaded. */ void -register_css (const char *url, const char *file) +register_css (const char *file) { if (!downloaded_css_set) downloaded_css_set = make_string_hash_table (0);