X-Git-Url: http://sjero.net/git/?a=blobdiff_plain;f=src%2Furl.c;h=e44dfcd2313282426d68e5b5e8591682d7296df7;hb=b718128b4f3eb8473fb3b31c8397b49854e74ab7;hp=ffc62a7edbd2fbe2c71ab03a6a4ebb8c9955ff3a;hpb=33d8b23dfd9bbcfd247908d948a22a9783fc060b;p=wget diff --git a/src/url.c b/src/url.c index ffc62a7e..e44dfcd2 100644 --- a/src/url.c +++ b/src/url.c @@ -1,6 +1,7 @@ /* URL handling. Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, - 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. + 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, + Inc. This file is part of GNU Wget. @@ -33,9 +34,7 @@ as that of the covered work. */ #include #include #include -#ifdef HAVE_UNISTD_H -# include -#endif +#include #include #include @@ -631,7 +630,7 @@ init_seps (enum url_scheme scheme) *p++ = '?'; if (flags & scm_has_fragment) *p++ = '#'; - *p++ = '\0'; + *p = '\0'; return seps; } @@ -1499,13 +1498,13 @@ append_dir_structure (const struct url *u, struct growable *dest) possible. Does not create directories on the file system. */ char * -url_file_name (const struct url *u) +url_file_name (const struct url *u, char *replaced_filename) { struct growable fnres; /* stands for "file name result" */ - const char *u_file, *u_query; + const char *u_file; char *fname, *unique; - char *index_filename = "index.html"; /* The default index file is index.html */ + const char *index_filename = "index.html"; /* The default index file is index.html */ fnres.base = NULL; fnres.size = 0; @@ -1554,18 +1553,28 @@ url_file_name (const struct url *u) append_dir_structure (u, &fnres); } - /* Add the file name. */ - if (fnres.tail) - append_char ('/', &fnres); - u_file = *u->file ? u->file : index_filename; - append_uri_pathel (u_file, u_file + strlen (u_file), false, &fnres); - - /* Append "?query" to the file name. */ - u_query = u->query && *u->query ? u->query : NULL; - if (u_query) + if (!replaced_filename) + { + /* Add the file name. */ + if (fnres.tail) + append_char ('/', &fnres); + u_file = *u->file ? u->file : index_filename; + append_uri_pathel (u_file, u_file + strlen (u_file), false, &fnres); + + /* Append "?query" to the file name, even if empty */ + if (u->query) + { + append_char (FN_QUERY_SEP, &fnres); + append_uri_pathel (u->query, u->query + strlen (u->query), + true, &fnres); + } + } + else { - append_char (FN_QUERY_SEP, &fnres); - append_uri_pathel (u_query, u_query + strlen (u_query), true, &fnres); + if (fnres.tail) + append_char ('/', &fnres); + u_file = replaced_filename; + append_uri_pathel (u_file, u_file + strlen (u_file), false, &fnres); } /* Zero-terminate the file name. */