/* Command line parsing.
- Copyright (C) 1995, 1996, 1997, 1998, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001
+ Free Software Foundation, Inc.
-This file is part of Wget.
+This file is part of GNU Wget.
-This program is free software; you can redistribute it and/or modify
+GNU Wget is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
-This program is distributed in the hope that it will be useful,
+GNU Wget is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
+along with Wget; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include <config.h>
#include "wget.h"
#include "utils.h"
-#include "getopt.h"
#include "init.h"
#include "retr.h"
#include "recur.h"
#include "host.h"
+#include "cookies.h"
+#include "url.h"
+#include "progress.h" /* for progress_handle_sigwinch */
+
+/* On GNU system this will include system-wide getopt.h. */
+#include "getopt.h"
#ifndef PATH_SEPARATOR
# define PATH_SEPARATOR '/'
/* It's kosher to declare these here because their interface _has_ to
be void foo(void). */
-void url_init PARAMS ((void));
void host_init PARAMS ((void));
/* This just calls the various initialization functions from the
static void
private_initialize (void)
{
- url_init ();
host_init ();
}
\f
-O --output-document=FILE write documents to FILE.\n\
-nc, --no-clobber don\'t clobber existing files or use .# suffixes.\n\
-c, --continue resume getting a partially-downloaded file.\n\
- --dot-style=STYLE set retrieval display style.\n\
+ --progress=TYPE select progress gauge type.\n\
-N, --timestamping don\'t re-retrieve files unless newer than local.\n\
-S, --server-response print server response.\n\
--spider don\'t download anything.\n\
--referer=URL include `Referer: URL\' header in HTTP request.\n\
-s, --save-headers save the HTTP headers to file.\n\
-U, --user-agent=AGENT identify as AGENT instead of Wget/VERSION.\n\
+ --no-http-keep-alive disable HTTP keep-alive (persistent connections).\n\
+ --cookies=off don't use cookies.\n\
+ --load-cookies=FILE load cookies from FILE before session.\n\
+ --save-cookies=FILE save cookies to FILE after session.\n\
\n"), stdout);
fputs (_("\
FTP options:\n\
{
char **url, **t;
int i, c, nurl, status, append_to_log;
- int wr = 0;
static struct option long_options[] =
{
/* Options without arguments: */
{ "background", no_argument, NULL, 'b' },
+ { "backup-converted", no_argument, NULL, 'K' },
{ "continue", no_argument, NULL, 'c' },
{ "convert-links", no_argument, NULL, 'k' },
- { "backup-converted", no_argument, NULL, 'K' },
{ "debug", no_argument, NULL, 'd' },
{ "delete-after", no_argument, NULL, 136 },
{ "dont-remove-listing", no_argument, NULL, 149 },
- { "email-address", no_argument, NULL, 154 }, /* undocumented (debug) */
{ "follow-ftp", no_argument, NULL, 142 },
{ "force-directories", no_argument, NULL, 'x' },
{ "force-hier", no_argument, NULL, 'x' }, /* obsolete */
{ "base", required_argument, NULL, 'B' },
{ "bind-address", required_argument, NULL, 155 },
{ "cache", required_argument, NULL, 'C' },
+ { "cookies", required_argument, NULL, 160 },
{ "cut-dirs", required_argument, NULL, 145 },
{ "directory-prefix", required_argument, NULL, 'P' },
{ "domains", required_argument, NULL, 'D' },
{ "include-directories", required_argument, NULL, 'I' },
{ "input-file", required_argument, NULL, 'i' },
{ "level", required_argument, NULL, 'l' },
+ { "load-cookies", required_argument, NULL, 161 },
{ "no", required_argument, NULL, 'n' },
{ "output-document", required_argument, NULL, 'O' },
{ "output-file", required_argument, NULL, 'o' },
+ { "progress", required_argument, NULL, 163 },
{ "proxy", required_argument, NULL, 'Y' },
{ "proxy-passwd", required_argument, NULL, 144 },
{ "proxy-user", required_argument, NULL, 143 },
{ "quota", required_argument, NULL, 'Q' },
{ "reject", required_argument, NULL, 'R' },
+ { "save-cookies", required_argument, NULL, 162 },
{ "timeout", required_argument, NULL, 'T' },
{ "tries", required_argument, NULL, 't' },
{ "user-agent", required_argument, NULL, 'U' },
that the options with required arguments must be followed by a ':'.
-- Dan Harkless <wget@harkless.org>] */
while ((c = getopt_long (argc, argv, "\
-hpVqvdkKsxmNWrHSLcFbEY:G:g:T:U:O:l:n:i:o:a:t:D:A:R:P:B:e:Q:X:I:w:",
+hpVqvdkKsxmNWrHSLcFbEY:G:g:T:U:O:l:n:i:o:a:t:D:A:R:P:B:e:Q:X:I:w:C:",
long_options, (int *)0)) != EOF)
{
switch (c)
case 150:
setval ("simplehostcheck", "on");
break;
- case 154:
- /* For debugging purposes. */
- printf ("%s\n", ftp_getaddress ());
- exit (0);
- break;
case 155:
setval ("bindaddress", optarg);
break;
case 'V':
printf ("GNU Wget %s\n\n", version_string);
printf ("%s", _("\
-Copyright (C) 1995, 1996, 1997, 1998, 2000 Free Software Foundation, Inc.\n\
+Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001 Free Software Foundation, Inc.\n"));
+ printf ("%s", _("\
This program is distributed in the hope that it will be useful,\n\
but WITHOUT ANY WARRANTY; without even the implied warranty of\n\
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\
setval ("header", optarg);
break;
case 134:
- setval ("dotstyle", optarg);
+ /* Supported for compatibility; --dot-style=foo equivalent
+ to --progress=dot:foo. */
+ {
+ char *tmp = alloca (3 + 1 + strlen (optarg));
+ sprintf (tmp, "dot:%s", optarg);
+ setval ("progress", tmp);
+ }
break;
case 135:
setval ("htmlify", optarg);
break;
case 152:
setval ("waitretry", optarg);
- wr = 1;
break;
case 153:
setval ("followtags", optarg);
break;
+ case 160:
+ setval ("cookies", optarg);
+ break;
+ case 161:
+ setval ("loadcookies", optarg);
+ break;
+ case 162:
+ setval ("savecookies", optarg);
+ break;
+ case 163:
+ setval ("progress", optarg);
+ break;
case 157:
setval ("referer", optarg);
break;
if (opt.verbose == -1)
opt.verbose = !opt.quiet;
- /* Retain compatibility with previous scripts.
- if wait has been set, but waitretry has not, give it the wait value.
- A simple check on the values is not enough, I could have set
- wait to n>0 and waitretry to 0 - HEH */
- if (opt.wait && !wr)
- {
- char opt_wait_str[256]; /* bigger than needed buf to prevent overflow */
-
- sprintf(opt_wait_str, "%ld", opt.wait);
- setval ("waitretry", opt_wait_str);
- }
-
/* Sanity checks. */
if (opt.verbose && opt.quiet)
{
/* Fill in the arguments. */
for (i = 0; i < nurl; i++, optind++)
{
- char *irix4_cc_needs_this;
- STRDUP_ALLOCA (irix4_cc_needs_this, argv[optind]);
- url[i] = irix4_cc_needs_this;
+ char *rewritten = rewrite_shorthand_url (argv[optind]);
+ if (rewritten)
+ {
+ printf ("Converted %s to %s\n", argv[optind], rewritten);
+ url[i] = rewritten;
+ }
+ else
+ url[i] = xstrdup (argv[optind]);
}
url[i] = NULL;
DEBUGP (("DEBUG output created by Wget %s on %s.\n\n", version_string,
OS_TYPE));
+
/* Open the output filename if necessary. */
if (opt.output_document)
{
else
{
struct stat st;
- opt.dfp = fopen (opt.output_document, "wb");
+ opt.dfp = fopen (opt.output_document, opt.always_rest ? "ab" : "wb");
if (opt.dfp == NULL)
{
perror (opt.output_document);
process exits. What we want is to ignore SIGPIPE and just check
for the return value of write(). */
signal (SIGPIPE, SIG_IGN);
+#ifdef SIGWINCH
+ signal (SIGWINCH, progress_handle_sigwinch);
+#endif
#endif /* HAVE_SIGNAL */
status = RETROK; /* initialize it, just-in-case */
_("Download quota (%s bytes) EXCEEDED!\n"),
legible (opt.quota));
}
+
+ if (opt.cookies_output)
+ save_cookies (opt.cookies_output);
+
if (opt.convert_links && !opt.delete_after)
{
convert_all_links ();
}
+
log_close ();
+ for (i = 0; i < nurl; i++)
+ xfree (url[i]);
cleanup ();
+
#ifdef DEBUG_MALLOC
print_malloc_debug_stats ();
#endif
return 1;
}
\f
+#ifdef HAVE_SIGNAL
/* Hangup signal handler. When wget receives SIGHUP or SIGUSR1, it
will proceed operation as usual, trying to write into a log file.
If that is impossible, the output will be turned off. */
-#ifdef HAVE_SIGNAL
static RETSIGTYPE
redirect_output_signal (int sig)
{