1
0
mirror of https://github.com/moparisthebest/wget synced 2024-07-03 16:38:41 -04:00

[svn] Implement tilde-expansion in file name arguments of

`.wgetrc' commands.
Published in <sxsy9tbeyh3.fsf@florida.arsdigita.de>.
This commit is contained in:
hniksic 2001-04-08 16:59:14 -07:00
parent 2cfb2d2ef6
commit 665a84b4a2
3 changed files with 68 additions and 9 deletions

4
NEWS
View File

@ -26,6 +26,10 @@ servers.
** It is now possible to recurse through FTP sites where logging in ** It is now possible to recurse through FTP sites where logging in
puts you in some directory other than '/'. puts you in some directory other than '/'.
** You may now use `~' to mean home directory in `.wgetrc'. For
example, `load_cookies = ~/.netscape/cookies.txt' works as you would
expect.
** The HTML parser has been rewritten. The new one works more ** The HTML parser has been rewritten. The new one works more
reliably, allows finer-grained control over which tags and attributes reliably, allows finer-grained control over which tags and attributes
are detected, and has better support for some features like correctly are detected, and has better support for some features like correctly

View File

@ -1,3 +1,10 @@
2001-04-09 Hrvoje Niksic <hniksic@arsdigita.com>
* init.c (cmd_file): New function.
(enable_tilde_expansion): New variable.
(run_wgetrc): Use it.
(cmd_file): Use it.
2001-04-08 Hrvoje Niksic <hniksic@arsdigita.com> 2001-04-08 Hrvoje Niksic <hniksic@arsdigita.com>
* init.c: Include cookie-related options. * init.c: Include cookie-related options.

View File

@ -55,6 +55,12 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
extern int errno; extern int errno;
#endif #endif
/* We want tilde expansion enabled only when reading `.wgetrc' lines;
otherwise, it will be performed by the shell. This variable will
be set by the wgetrc-reading function. */
static int enable_tilde_expansion;
#define CMD_DECLARE(func) static int func \ #define CMD_DECLARE(func) static int func \
PARAMS ((const char *, const char *, void *)) PARAMS ((const char *, const char *, void *))
@ -67,6 +73,7 @@ CMD_DECLARE (cmd_lockable_boolean);
CMD_DECLARE (cmd_number); CMD_DECLARE (cmd_number);
CMD_DECLARE (cmd_number_inf); CMD_DECLARE (cmd_number_inf);
CMD_DECLARE (cmd_string); CMD_DECLARE (cmd_string);
CMD_DECLARE (cmd_file);
CMD_DECLARE (cmd_time); CMD_DECLARE (cmd_time);
CMD_DECLARE (cmd_vector); CMD_DECLARE (cmd_vector);
@ -105,7 +112,7 @@ static struct {
{ "debug", &opt.debug, cmd_boolean }, { "debug", &opt.debug, cmd_boolean },
#endif #endif
{ "deleteafter", &opt.delete_after, cmd_boolean }, { "deleteafter", &opt.delete_after, cmd_boolean },
{ "dirprefix", &opt.dir_prefix, cmd_string }, { "dirprefix", &opt.dir_prefix, cmd_file },
{ "dirstruct", NULL, cmd_spec_dirstruct }, { "dirstruct", NULL, cmd_spec_dirstruct },
{ "domains", &opt.domains, cmd_vector }, { "domains", &opt.domains, cmd_vector },
{ "dotbytes", &opt.dot_bytes, cmd_bytes }, { "dotbytes", &opt.dot_bytes, cmd_bytes },
@ -130,10 +137,10 @@ static struct {
{ "ignorelength", &opt.ignore_length, cmd_boolean }, { "ignorelength", &opt.ignore_length, cmd_boolean },
{ "ignoretags", &opt.ignore_tags, cmd_vector }, { "ignoretags", &opt.ignore_tags, cmd_vector },
{ "includedirectories", &opt.includes, cmd_directory_vector }, { "includedirectories", &opt.includes, cmd_directory_vector },
{ "input", &opt.input_filename, cmd_string }, { "input", &opt.input_filename, cmd_file },
{ "killlonger", &opt.kill_longer, cmd_boolean }, { "killlonger", &opt.kill_longer, cmd_boolean },
{ "loadcookies", &opt.cookies_input, cmd_string }, { "loadcookies", &opt.cookies_input, cmd_file },
{ "logfile", &opt.lfilename, cmd_string }, { "logfile", &opt.lfilename, cmd_file },
{ "login", &opt.ftp_acc, cmd_string }, { "login", &opt.ftp_acc, cmd_string },
{ "mirror", NULL, cmd_spec_mirror }, { "mirror", NULL, cmd_spec_mirror },
{ "netrc", &opt.netrc, cmd_boolean }, { "netrc", &opt.netrc, cmd_boolean },
@ -141,7 +148,7 @@ static struct {
{ "noparent", &opt.no_parent, cmd_boolean }, { "noparent", &opt.no_parent, cmd_boolean },
{ "noproxy", &opt.no_proxy, cmd_vector }, { "noproxy", &opt.no_proxy, cmd_vector },
{ "numtries", &opt.ntry, cmd_number_inf },/* deprecated*/ { "numtries", &opt.ntry, cmd_number_inf },/* deprecated*/
{ "outputdocument", &opt.output_document, cmd_string }, { "outputdocument", &opt.output_document, cmd_file },
{ "pagerequisites", &opt.page_requisites, cmd_boolean }, { "pagerequisites", &opt.page_requisites, cmd_boolean },
{ "passiveftp", &opt.ftp_pasv, cmd_lockable_boolean }, { "passiveftp", &opt.ftp_pasv, cmd_lockable_boolean },
{ "passwd", &opt.ftp_pass, cmd_string }, { "passwd", &opt.ftp_pass, cmd_string },
@ -157,15 +164,15 @@ static struct {
{ "removelisting", &opt.remove_listing, cmd_boolean }, { "removelisting", &opt.remove_listing, cmd_boolean },
{ "retrsymlinks", &opt.retr_symlinks, cmd_boolean }, { "retrsymlinks", &opt.retr_symlinks, cmd_boolean },
{ "robots", &opt.use_robots, cmd_boolean }, { "robots", &opt.use_robots, cmd_boolean },
{ "savecookies", &opt.cookies_output, cmd_string }, { "savecookies", &opt.cookies_output, cmd_file },
{ "saveheaders", &opt.save_headers, cmd_boolean }, { "saveheaders", &opt.save_headers, cmd_boolean },
{ "serverresponse", &opt.server_response, cmd_boolean }, { "serverresponse", &opt.server_response, cmd_boolean },
{ "simplehostcheck", &opt.simple_check, cmd_boolean }, { "simplehostcheck", &opt.simple_check, cmd_boolean },
{ "spanhosts", &opt.spanhost, cmd_boolean }, { "spanhosts", &opt.spanhost, cmd_boolean },
{ "spider", &opt.spider, cmd_boolean }, { "spider", &opt.spider, cmd_boolean },
#ifdef HAVE_SSL #ifdef HAVE_SSL
{ "sslcertfile", &opt.sslcertfile, cmd_string }, { "sslcertfile", &opt.sslcertfile, cmd_file },
{ "sslcertkey", &opt.sslcertkey, cmd_string }, { "sslcertkey", &opt.sslcertkey, cmd_file },
#endif /* HAVE_SSL */ #endif /* HAVE_SSL */
{ "timeout", &opt.timeout, cmd_time }, { "timeout", &opt.timeout, cmd_time },
{ "timestamping", &opt.timestamping, cmd_boolean }, { "timestamping", &opt.timestamping, cmd_boolean },
@ -341,7 +348,7 @@ run_wgetrc (const char *file)
file, strerror (errno)); file, strerror (errno));
return; return;
} }
/* Reset line number. */ enable_tilde_expansion = 1;
ln = 1; ln = 1;
while ((line = read_whole_line (fp))) while ((line = read_whole_line (fp)))
{ {
@ -365,6 +372,7 @@ run_wgetrc (const char *file)
file, ln); file, ln);
++ln; ++ln;
} }
enable_tilde_expansion = 0;
fclose (fp); fclose (fp);
} }
@ -640,6 +648,46 @@ cmd_string (const char *com, const char *val, void *closure)
return 1; return 1;
} }
/* Like the above, but handles tilde-expansion when reading a user's
`.wgetrc'. In that case, and if VAL begins with `~', the tilde
gets expanded to the user's home directory. */
static int
cmd_file (const char *com, const char *val, void *closure)
{
char **pstring = (char **)closure;
FREE_MAYBE (*pstring);
if (!enable_tilde_expansion || !(*val == '~' && *(val + 1) == '/'))
{
noexpand:
*pstring = xstrdup (val);
}
else
{
char *result;
int homelen;
char *home = home_dir ();
if (!home)
goto noexpand;
homelen = strlen (home);
while (homelen && home[homelen - 1] == '/')
home[--homelen] = '\0';
/* Skip the leading "~/". */
for (++val; *val == '/'; val++)
;
result = xmalloc (homelen + 1 + strlen (val));
memcpy (result, home, homelen);
result[homelen] = '/';
strcpy (result + homelen + 1, val);
*pstring = result;
}
return 1;
}
/* Merge the vector (array of strings separated with `,') in COM with /* Merge the vector (array of strings separated with `,') in COM with
the vector (NULL-terminated array of strings) pointed to by the vector (NULL-terminated array of strings) pointed to by
CLOSURE. */ CLOSURE. */