/* 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.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif /* HAVE_UNISTD_H */
+#include <unistd.h>
#include <errno.h>
#include <assert.h>
#include "convert.h"
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)
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. */
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
/* 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);
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
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. */
}
*to = '\0';
- return html_quote_string (newname);
+ return no_html_quote ? strdup (newname) : html_quote_string (newname);
}
\f
/* Book-keeping code for dl_file_url_map, dl_url_file_map,
/* 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);
/* 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);