X-Git-Url: http://sjero.net/git/?a=blobdiff_plain;f=src%2Fmain.c;h=4eed7df9e1fcff4e4c81cfe12e6d76ce005c44d0;hb=d5be8ecca466601bda9b81c28a79077fbda6ccde;hp=250ac8873c3b9bdd8b7dba82ea20a2599716ef62;hpb=e4d49f0b401dc68814bde95860bc5b2a6ef7a80c;p=wget diff --git a/src/main.c b/src/main.c index 250ac887..4eed7df9 100644 --- a/src/main.c +++ b/src/main.c @@ -1,20 +1,21 @@ /* 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 @@ -44,11 +45,15 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #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" + +/* On GNU system this will include system-wide getopt.h. */ +#include "getopt.h" #ifndef PATH_SEPARATOR # define PATH_SEPARATOR '/' @@ -101,7 +106,6 @@ i18n_initialize (void) /* 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 @@ -109,7 +113,6 @@ void host_init PARAMS ((void)); static void private_initialize (void) { - url_init (); host_init (); } @@ -193,6 +196,10 @@ HTTP options:\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\ @@ -236,19 +243,17 @@ main (int argc, char *const *argv) { 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 */ @@ -285,6 +290,7 @@ main (int argc, char *const *argv) { "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' }, @@ -302,6 +308,7 @@ main (int argc, char *const *argv) { "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' }, @@ -310,6 +317,7 @@ main (int argc, char *const *argv) { "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' }, @@ -347,7 +355,7 @@ main (int argc, char *const *argv) that the options with required arguments must be followed by a ':'. -- Dan Harkless ] */ 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) @@ -395,11 +403,6 @@ hpVqvdkKsxmNWrHSLcFbEY:G:g:T:U:O:l:n:i:o:a:t:D:A:R:P:B:e:Q:X:I:w:", 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; @@ -469,7 +472,8 @@ hpVqvdkKsxmNWrHSLcFbEY:G:g:T:U:O:l:n:i:o:a:t:D:A:R:P:B:e:Q:X:I:w:", 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\ @@ -514,11 +518,19 @@ GNU General Public License for more details.\n")); 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 157: setval ("referer", optarg); break; @@ -680,18 +692,6 @@ GNU General Public License for more details.\n")); 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) { @@ -727,9 +727,14 @@ Can't timestamp and not clobber old files at the same time.\n")); /* 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; @@ -744,6 +749,7 @@ Can't timestamp and not clobber old files at the same time.\n")); 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) { @@ -752,7 +758,7 @@ Can't timestamp and not clobber old files at the same time.\n")); 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); @@ -831,12 +837,20 @@ Can't timestamp and not clobber old files at the same time.\n")); _("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