[svn] Added sanity checks for -k, -p, -r and -N when -O is given. Added fixes for 64-bit platforms. Updated copyright and maintainer information.

This commit is contained in:
mtortonesi 2006-07-14 06:25:50 -07:00
parent 01798261db
commit 1c7493b83e
51 changed files with 297 additions and 249 deletions

View File

@ -1,3 +1,7 @@
2006-07-14 Mauro Tortonesi <mauro@ferrara.linux.it>
* configure.in: Check for intptr_t.
2006-06-27 Hrvoje Niksic <hniksic@xemacs.org> 2006-06-27 Hrvoje Niksic <hniksic@xemacs.org>
* configure.in: We're no longer using strtoimax. * configure.in: We're no longer using strtoimax.

View File

@ -189,7 +189,7 @@ dnl Checks for non-universal or system-specific types.
dnl dnl
AC_TYPE_SIZE_T AC_TYPE_SIZE_T
AC_TYPE_PID_T AC_TYPE_PID_T
AC_CHECK_TYPES([uint32_t, uintptr_t, int64_t]) AC_CHECK_TYPES([uint32_t, uintptr_t, intptr_t, int64_t])
AC_CHECK_TYPES(sig_atomic_t, [], [], [ AC_CHECK_TYPES(sig_atomic_t, [], [], [
#include <stdio.h> #include <stdio.h>
#include <sys/types.h> #include <sys/types.h>

View File

@ -1,4 +1,19 @@
2006-06-28 KJKHyperion <hackbunny@reactos.com> 2006-07-14 Mauro Tortonesi <mauro@ferrara.linux.it>
* sysdep.h: If intptr_t isn't defined, simply typedef it to long.
* http.c: Added explicit cast to int in logprintf call to remove
compiler warnings on 64-bit platforms.
* connect.c: Added a few casts to intptr_t to remove compiler warnings
on 64-bit platforms.
* main.c: Disable -r, -p and -N when -O is used. Disable -k when -O is
used and multiple URLs are given. Update maintainer information.
* all: Update copyright information.
2006-07-10 KJKHyperion <hackbunny@reactos.com>
* url.c (filechr_table): Mark DEL (0x7f) as a control character * url.c (filechr_table): Mark DEL (0x7f) as a control character
and | as a character Windows can't handle. and | as a character Windows can't handle.

View File

@ -1,5 +1,5 @@
/* Replacements for routines missing on some systems. /* Replacements for routines missing on some systems.
Copyright (C) 1996-2005 Free Software Foundation, Inc. Copyright (C) 1996-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* Establishing and handling network connections. /* Establishing and handling network connections.
Copyright (C) 1996-2005 Free Software Foundation, Inc. Copyright (C) 1996-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.
@ -764,7 +764,7 @@ fd_register_transport (int fd, struct transport_implementation *imp, void *ctx)
info->ctx = ctx; info->ctx = ctx;
if (!transport_map) if (!transport_map)
transport_map = hash_table_new (0, NULL, NULL); transport_map = hash_table_new (0, NULL, NULL);
hash_table_put (transport_map, (void *) fd, info); hash_table_put (transport_map, (void *)(intptr_t) fd, info);
++transport_map_modified_tick; ++transport_map_modified_tick;
} }
@ -775,7 +775,7 @@ fd_register_transport (int fd, struct transport_implementation *imp, void *ctx)
void * void *
fd_transport_context (int fd) fd_transport_context (int fd)
{ {
struct transport_info *info = hash_table_get (transport_map, (void *) fd); struct transport_info *info = hash_table_get (transport_map, (void *)(intptr_t) fd);
return info->ctx; return info->ctx;
} }
@ -798,7 +798,7 @@ fd_transport_context (int fd)
info = last_info; \ info = last_info; \
else \ else \
{ \ { \
info = hash_table_get (transport_map, (void *) fd); \ info = hash_table_get (transport_map, (void *)(intptr_t) fd); \
last_fd = fd; \ last_fd = fd; \
last_info = info; \ last_info = info; \
last_tick = transport_map_modified_tick; \ last_tick = transport_map_modified_tick; \
@ -916,7 +916,7 @@ fd_errstr (int fd)
in case of error, never in a tight loop. */ in case of error, never in a tight loop. */
struct transport_info *info = NULL; struct transport_info *info = NULL;
if (transport_map) if (transport_map)
info = hash_table_get (transport_map, (void *) fd); info = hash_table_get (transport_map, (void *)(intptr_t) fd);
if (info && info->imp->errstr) if (info && info->imp->errstr)
{ {
@ -941,7 +941,7 @@ fd_close (int fd)
per socket, so that particular optimization wouldn't work. */ per socket, so that particular optimization wouldn't work. */
info = NULL; info = NULL;
if (transport_map) if (transport_map)
info = hash_table_get (transport_map, (void *) fd); info = hash_table_get (transport_map, (void *)(intptr_t) fd);
if (info && info->imp->closer) if (info && info->imp->closer)
info->imp->closer (fd, info->ctx); info->imp->closer (fd, info->ctx);
@ -950,7 +950,7 @@ fd_close (int fd)
if (info) if (info)
{ {
hash_table_remove (transport_map, (void *) fd); hash_table_remove (transport_map, (void *)(intptr_t) fd);
xfree (info); xfree (info);
++transport_map_modified_tick; ++transport_map_modified_tick;
} }

View File

@ -1,5 +1,5 @@
/* Declarations for connect. /* Declarations for connect.
Copyright (C) 1996-2005 Free Software Foundation, Inc. Copyright (C) 1996-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* Conversion of links to local files. /* Conversion of links to local files.
Copyright (C) 2003-2005 Free Software Foundation, Inc. Copyright (C) 2003-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* Declarations for convert.c /* Declarations for convert.c
Copyright (C) 2003-2005 Free Software Foundation, Inc. Copyright (C) 2003-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* Support for cookies. /* Support for cookies.
Copyright (C) 2001-2005 Free Software Foundation, Inc. Copyright (C) 2001-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* Support for cookies. /* Support for cookies.
Copyright (C) 2001-2005 Free Software Foundation, Inc. Copyright (C) 2001-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* Basic FTP routines. /* Basic FTP routines.
Copyright (C) 1996-2005 Free Software Foundation, Inc. Copyright (C) 1996-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* File Transfer Protocol support. /* File Transfer Protocol support.
Copyright (C) 1996-2005 Free Software Foundation, Inc. Copyright (C) 1996-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* Declarations for FTP support. /* Declarations for FTP support.
Copyright (C) 1996-2005 Free Software Foundation, Inc. Copyright (C) 1996-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* SSL support via GnuTLS library. /* SSL support via GnuTLS library.
Copyright (C) 2005 Free Software Foundation, Inc. Copyright (C) 2005-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* Hash tables. /* Hash tables.
Copyright (C) 2000-2005 Free Software Foundation, Inc. Copyright (C) 2000-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* Host name resolution and matching. /* Host name resolution and matching.
Copyright (C) 1996-2005 Free Software Foundation, Inc. Copyright (C) 1996-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* Declarations for host.c /* Declarations for host.c
Copyright (C) 1996-2005 Free Software Foundation, Inc. Copyright (C) 1996-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* HTML parser for Wget. /* HTML parser for Wget.
Copyright (C) 1998-2005 Free Software Foundation, Inc. Copyright (C) 1998-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* Declarations for html-parse.c. /* Declarations for html-parse.c.
Copyright (C) 1998-2005 Free Software Foundation, Inc. Copyright (C) 1998-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* Collect URLs from HTML source. /* Collect URLs from HTML source.
Copyright (C) 1998-2005 Free Software Foundation, Inc. Copyright (C) 1998-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* NTLM code. /* NTLM code.
Copyright (C) 2005 Free Software Foundation, Inc. Copyright (C) 2005-2006 Free Software Foundation, Inc.
Contributed by Daniel Stenberg. Contributed by Daniel Stenberg.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* HTTP support. /* HTTP support.
Copyright (C) 1996-2005 Free Software Foundation, Inc. Copyright (C) 1996-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.
@ -757,7 +757,7 @@ print_server_response (const struct response *resp, const char *prefix)
--e; --e;
/* This is safe even on printfs with broken handling of "%.<n>s" /* This is safe even on printfs with broken handling of "%.<n>s"
because resp->headers ends with \0. */ because resp->headers ends with \0. */
logprintf (LOG_VERBOSE, "%s%.*s\n", prefix, e - b, b); logprintf (LOG_VERBOSE, "%s%.*s\n", prefix, (int) (e - b), b);
} }
} }

View File

@ -1,5 +1,5 @@
/* Declarations for HTTP. /* Declarations for HTTP.
Copyright (C) 2005 Free Software Foundation, Inc. Copyright (C) 2005-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* Reading/parsing the initialization file. /* Reading/parsing the initialization file.
Copyright (C) 1996-2005 Free Software Foundation, Inc. Copyright (C) 1996-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* Declarations for init.c. /* Declarations for init.c.
Copyright (C) 1996-2005 Free Software Foundation, Inc. Copyright (C) 1996-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* Messages logging. /* Messages logging.
Copyright (C) 1998-2005 Free Software Foundation, Inc. Copyright (C) 1998-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* Declarations for log.c. /* Declarations for log.c.
Copyright (C) 1998-2005 Free Software Foundation, Inc. Copyright (C) 1998-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* Command line parsing. /* Command line parsing.
Copyright (C) 1996-2005 Free Software Foundation, Inc. Copyright (C) 1996-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.
@ -49,9 +49,9 @@ so, delete this exception statement from your version. */
#include "recur.h" #include "recur.h"
#include "host.h" #include "host.h"
#include "url.h" #include "url.h"
#include "progress.h" /* for progress_handle_sigwinch */ #include "progress.h" /* for progress_handle_sigwinch */
#include "convert.h" #include "convert.h"
#include "http.h" /* for save_cookies */ #include "http.h" /* for save_cookies */
/* On GNU system this will include system-wide getopt.h. */ /* On GNU system this will include system-wide getopt.h. */
#include "getopt.h" #include "getopt.h"
@ -120,8 +120,8 @@ struct cmdline_option {
OPT__NO, OPT__NO,
OPT__PARENT OPT__PARENT
} type; } type;
const void *data; /* for standard options */ const void *data; /* for standard options */
int argtype; /* for non-standard options */ int argtype; /* for non-standard options */
}; };
static struct cmdline_option option_data[] = static struct cmdline_option option_data[] =
@ -291,51 +291,51 @@ init_switches (void)
struct option *longopt; struct option *longopt;
if (!opt->long_name) if (!opt->long_name)
/* The option is disabled. */ /* The option is disabled. */
continue; continue;
longopt = &long_options[o++]; longopt = &long_options[o++];
longopt->name = opt->long_name; longopt->name = opt->long_name;
longopt->val = i; longopt->val = i;
if (opt->short_name) if (opt->short_name)
{ {
*p++ = opt->short_name; *p++ = opt->short_name;
optmap[opt->short_name - 32] = longopt - long_options; optmap[opt->short_name - 32] = longopt - long_options;
} }
switch (opt->type) switch (opt->type)
{ {
case OPT_VALUE: case OPT_VALUE:
longopt->has_arg = required_argument; longopt->has_arg = required_argument;
if (opt->short_name) if (opt->short_name)
*p++ = ':'; *p++ = ':';
break; break;
case OPT_BOOLEAN: case OPT_BOOLEAN:
/* Specify an optional argument for long options, so that /* Specify an optional argument for long options, so that
--option=off works the same as --no-option, for --option=off works the same as --no-option, for
compatibility with pre-1.10 Wget. However, don't specify compatibility with pre-1.10 Wget. However, don't specify
optional arguments short-option booleans because they optional arguments short-option booleans because they
prevent combining of short options. */ prevent combining of short options. */
longopt->has_arg = optional_argument; longopt->has_arg = optional_argument;
/* For Boolean options, add the "--no-FOO" variant, which is /* For Boolean options, add the "--no-FOO" variant, which is
identical to "--foo", except it has opposite meaning and identical to "--foo", except it has opposite meaning and
it doesn't allow an argument. */ it doesn't allow an argument. */
longopt = &long_options[o++]; longopt = &long_options[o++];
longopt->name = no_prefix (opt->long_name); longopt->name = no_prefix (opt->long_name);
longopt->has_arg = no_argument; longopt->has_arg = no_argument;
/* Mask the value so we'll be able to recognize that we're /* Mask the value so we'll be able to recognize that we're
dealing with the false value. */ dealing with the false value. */
longopt->val = i | BOOLEAN_NEG_MARKER; longopt->val = i | BOOLEAN_NEG_MARKER;
break; break;
default: default:
assert (opt->argtype != -1); assert (opt->argtype != -1);
longopt->has_arg = opt->argtype; longopt->has_arg = opt->argtype;
if (opt->short_name) if (opt->short_name)
{ {
if (longopt->has_arg == required_argument) if (longopt->has_arg == required_argument)
*p++ = ':'; *p++ = ':';
/* Don't handle optional_argument */ /* Don't handle optional_argument */
} }
} }
} }
/* Terminate short_options. */ /* Terminate short_options. */
*p = '\0'; *p = '\0';
@ -622,7 +622,7 @@ Recursive accept/reject:\n"),
int i; int i;
printf (_("GNU Wget %s, a non-interactive network retriever.\n"), printf (_("GNU Wget %s, a non-interactive network retriever.\n"),
version_string); version_string);
print_usage (); print_usage ();
for (i = 0; i < countof (help); i++) for (i = 0; i < countof (help); i++)
@ -662,14 +662,16 @@ print_version (void)
{ {
printf ("GNU Wget %s\n\n", version_string); printf ("GNU Wget %s\n\n", version_string);
fputs (_("\ fputs (_("\
Copyright (C) 2005 Free Software Foundation, Inc.\n"), stdout); Copyright (C) 2006 Free Software Foundation, Inc.\n"), stdout);
fputs (_("\ fputs (_("\
This program is distributed in the hope that it will be useful,\n\ This program is distributed in the hope that it will be useful,\n\
but WITHOUT ANY WARRANTY; without even the implied warranty of\n\ but WITHOUT ANY WARRANTY; without even the implied warranty of\n\
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n\
GNU General Public License for more details.\n"), stdout); GNU General Public License for more details.\n"), stdout);
fputs (_("\nOriginally written by Hrvoje Niksic <hniksic@xemacs.org>.\n"), fputs (_("\nOriginally written by Hrvoje Niksic <hniksic@xemacs.org>.\n"),
stdout); stdout);
fputs (_("\nCurrently maintained by Mauro Tortonesi <mauro@ferrara.linux.it>.\n"),
stdout);
exit (0); exit (0);
} }
@ -702,116 +704,118 @@ main (int argc, char *const *argv)
init_switches (); init_switches ();
longindex = -1; longindex = -1;
while ((ret = getopt_long (argc, argv, while ((ret = getopt_long (argc, argv,
short_options, long_options, &longindex)) != -1) short_options, long_options, &longindex)) != -1)
{ {
int val; int val;
struct cmdline_option *opt; struct cmdline_option *opt;
/* If LONGINDEX is unchanged, it means RET is referring a short /* If LONGINDEX is unchanged, it means RET is referring a short
option. */ option. */
if (longindex == -1) if (longindex == -1)
{ {
if (ret == '?') if (ret == '?')
{ {
print_usage (); print_usage ();
printf ("\n"); printf ("\n");
printf (_("Try `%s --help' for more options.\n"), exec_name); printf (_("Try `%s --help' for more options.\n"), exec_name);
exit (2); exit (2);
} }
/* Find the short option character in the mapping. */ /* Find the short option character in the mapping. */
longindex = optmap[ret - 32]; longindex = optmap[ret - 32];
} }
val = long_options[longindex].val; val = long_options[longindex].val;
/* Use the retrieved value to locate the option in the /* Use the retrieved value to locate the option in the
option_data array, and to see if we're dealing with the option_data array, and to see if we're dealing with the
negated "--no-FOO" variant of the boolean option "--foo". */ negated "--no-FOO" variant of the boolean option "--foo". */
opt = &option_data[val & ~BOOLEAN_NEG_MARKER]; opt = &option_data[val & ~BOOLEAN_NEG_MARKER];
switch (opt->type) switch (opt->type)
{ {
case OPT_VALUE: case OPT_VALUE:
setoptval (opt->data, optarg, opt->long_name); setoptval (opt->data, optarg, opt->long_name);
break; break;
case OPT_BOOLEAN: case OPT_BOOLEAN:
if (optarg) if (optarg)
/* The user has specified a value -- use it. */ /* The user has specified a value -- use it. */
setoptval (opt->data, optarg, opt->long_name); setoptval (opt->data, optarg, opt->long_name);
else else
{ {
/* NEG is true for `--no-FOO' style boolean options. */ /* NEG is true for `--no-FOO' style boolean options. */
bool neg = !!(val & BOOLEAN_NEG_MARKER); bool neg = !!(val & BOOLEAN_NEG_MARKER);
setoptval (opt->data, neg ? "0" : "1", opt->long_name); setoptval (opt->data, neg ? "0" : "1", opt->long_name);
} }
break; break;
case OPT_FUNCALL: case OPT_FUNCALL:
{ {
void (*func) (void) = (void (*) (void)) opt->data; void (*func) (void) = (void (*) (void)) opt->data;
func (); func ();
} }
break; break;
case OPT__APPEND_OUTPUT: case OPT__APPEND_OUTPUT:
setoptval ("logfile", optarg, opt->long_name); setoptval ("logfile", optarg, opt->long_name);
append_to_log = true; append_to_log = true;
break; break;
case OPT__EXECUTE: case OPT__EXECUTE:
run_command (optarg); run_command (optarg);
break; break;
case OPT__NO: case OPT__NO:
{ {
/* We support real --no-FOO flags now, but keep these /* We support real --no-FOO flags now, but keep these
short options for convenience and backward short options for convenience and backward
compatibility. */ compatibility. */
char *p; char *p;
for (p = optarg; *p; p++) for (p = optarg; *p; p++)
switch (*p) switch (*p)
{ {
case 'v': case 'v':
setoptval ("verbose", "0", opt->long_name); setoptval ("verbose", "0", opt->long_name);
break; break;
case 'H': case 'H':
setoptval ("addhostdir", "0", opt->long_name); setoptval ("addhostdir", "0", opt->long_name);
break; break;
case 'd': case 'd':
setoptval ("dirstruct", "0", opt->long_name); setoptval ("dirstruct", "0", opt->long_name);
break; break;
case 'c': case 'c':
setoptval ("noclobber", "1", opt->long_name); setoptval ("noclobber", "1", opt->long_name);
break; break;
case 'p': case 'p':
setoptval ("noparent", "1", opt->long_name); setoptval ("noparent", "1", opt->long_name);
break; break;
default: default:
printf (_("%s: illegal option -- `-n%c'\n"), exec_name, *p); printf (_("%s: illegal option -- `-n%c'\n"), exec_name, *p);
print_usage (); print_usage ();
printf ("\n"); printf ("\n");
printf (_("Try `%s --help' for more options.\n"), exec_name); printf (_("Try `%s --help' for more options.\n"), exec_name);
exit (1); exit (1);
} }
break; break;
} }
case OPT__PARENT: case OPT__PARENT:
case OPT__CLOBBER: case OPT__CLOBBER:
{ {
/* The wgetrc commands are named noparent and noclobber, /* The wgetrc commands are named noparent and noclobber,
so we must revert the meaning of the cmdline options so we must revert the meaning of the cmdline options
before passing the value to setoptval. */ before passing the value to setoptval. */
bool flag = true; bool flag = true;
if (optarg) if (optarg)
flag = (*optarg == '1' || TOLOWER (*optarg) == 'y' flag = (*optarg == '1' || TOLOWER (*optarg) == 'y'
|| (TOLOWER (optarg[0]) == 'o' || (TOLOWER (optarg[0]) == 'o'
&& TOLOWER (optarg[1]) == 'n')); && TOLOWER (optarg[1]) == 'n'));
setoptval (opt->type == OPT__PARENT ? "noparent" : "noclobber", setoptval (opt->type == OPT__PARENT ? "noparent" : "noclobber",
flag ? "0" : "1", opt->long_name); flag ? "0" : "1", opt->long_name);
break; break;
} }
case OPT__DONT_REMOVE_LISTING: case OPT__DONT_REMOVE_LISTING:
setoptval ("removelisting", "0", opt->long_name); setoptval ("removelisting", "0", opt->long_name);
break; break;
} }
longindex = -1; longindex = -1;
} }
nurl = argc - optind;
/* All user options have now been processed, so it's now safe to do /* All user options have now been processed, so it's now safe to do
interoption dependency checks. */ interoption dependency checks. */
@ -821,11 +825,11 @@ main (int argc, char *const *argv)
if (opt.page_requisites && !opt.recursive) if (opt.page_requisites && !opt.recursive)
{ {
/* Don't set opt.recursive here because it would confuse the FTP /* Don't set opt.recursive here because it would confuse the FTP
code. Instead, call retrieve_tree below when either code. Instead, call retrieve_tree below when either
page_requisites or recursive is requested. */ page_requisites or recursive is requested. */
opt.reclevel = 0; opt.reclevel = 0;
if (!opt.no_dirstruct) if (!opt.no_dirstruct)
opt.dirstruct = 1; /* normally handled by cmd_spec_recursive() */ opt.dirstruct = 1; /* normally handled by cmd_spec_recursive() */
} }
if (opt.verbose == -1) if (opt.verbose == -1)
@ -853,8 +857,24 @@ Can't timestamp and not clobber old files at the same time.\n"));
exit (1); exit (1);
} }
#endif #endif
if (opt.output_document
&& (opt.page_requisites
|| opt.recursive
|| opt.timestamping))
{
printf (_("Cannot specify -r, -p or -N if -O is given.\n"));
print_usage ();
exit (1);
}
if (opt.output_document
&& opt.convert_links
&& nurl > 1)
{
printf (_("Cannot specify both -k and -O if multiple URLs are given.\n"));
print_usage ();
exit (1);
}
nurl = argc - optind;
if (!nurl && !opt.input_filename) if (!nurl && !opt.input_filename)
{ {
/* No URL specified. */ /* No URL specified. */
@ -862,7 +882,7 @@ Can't timestamp and not clobber old files at the same time.\n"));
print_usage (); print_usage ();
printf ("\n"); printf ("\n");
/* #### Something nicer should be printed here -- similar to the /* #### Something nicer should be printed here -- similar to the
pre-1.5 `--help' page. */ pre-1.5 `--help' page. */
printf (_("Try `%s --help' for more options.\n"), exec_name); printf (_("Try `%s --help' for more options.\n"), exec_name);
exit (1); exit (1);
} }
@ -881,9 +901,9 @@ Can't timestamp and not clobber old files at the same time.\n"));
{ {
char *rewritten = rewrite_shorthand_url (argv[optind]); char *rewritten = rewrite_shorthand_url (argv[optind]);
if (rewritten) if (rewritten)
url[i] = rewritten; url[i] = rewritten;
else else
url[i] = xstrdup (argv[optind]); url[i] = xstrdup (argv[optind]);
} }
url[i] = NULL; url[i] = NULL;
@ -891,26 +911,26 @@ Can't timestamp and not clobber old files at the same time.\n"));
log_init (opt.lfilename, append_to_log); log_init (opt.lfilename, append_to_log);
DEBUGP (("DEBUG output created by Wget %s on %s.\n\n", version_string, DEBUGP (("DEBUG output created by Wget %s on %s.\n\n", version_string,
OS_TYPE)); OS_TYPE));
/* Open the output filename if necessary. */ /* Open the output filename if necessary. */
if (opt.output_document) if (opt.output_document)
{ {
if (HYPHENP (opt.output_document)) if (HYPHENP (opt.output_document))
output_stream = stdout; output_stream = stdout;
else else
{ {
struct_fstat st; struct_fstat st;
output_stream = fopen (opt.output_document, output_stream = fopen (opt.output_document,
opt.always_rest ? "ab" : "wb"); opt.always_rest ? "ab" : "wb");
if (output_stream == NULL) if (output_stream == NULL)
{ {
perror (opt.output_document); perror (opt.output_document);
exit (1); exit (1);
} }
if (fstat (fileno (output_stream), &st) == 0 && S_ISREG (st.st_mode)) if (fstat (fileno (output_stream), &st) == 0 && S_ISREG (st.st_mode))
output_stream_regular = true; output_stream_regular = true;
} }
} }
#ifdef WINDOWS #ifdef WINDOWS
@ -937,7 +957,7 @@ Can't timestamp and not clobber old files at the same time.\n"));
signal (SIGWINCH, progress_handle_sigwinch); signal (SIGWINCH, progress_handle_sigwinch);
#endif #endif
status = RETROK; /* initialize it, just-in-case */ status = RETROK; /* initialize it, just-in-case */
/* Retrieve the URLs from argument list. */ /* Retrieve the URLs from argument list. */
for (t = url; *t; t++) for (t = url; *t; t++)
{ {
@ -945,28 +965,28 @@ Can't timestamp and not clobber old files at the same time.\n"));
int dt; int dt;
if ((opt.recursive || opt.page_requisites) if ((opt.recursive || opt.page_requisites)
&& (url_scheme (*t) != SCHEME_FTP || opt.use_proxy)) && (url_scheme (*t) != SCHEME_FTP || opt.use_proxy))
{ {
int old_follow_ftp = opt.follow_ftp; int old_follow_ftp = opt.follow_ftp;
/* Turn opt.follow_ftp on in case of recursive FTP retrieval */ /* Turn opt.follow_ftp on in case of recursive FTP retrieval */
if (url_scheme (*t) == SCHEME_FTP) if (url_scheme (*t) == SCHEME_FTP)
opt.follow_ftp = 1; opt.follow_ftp = 1;
status = retrieve_tree (*t); status = retrieve_tree (*t);
opt.follow_ftp = old_follow_ftp; opt.follow_ftp = old_follow_ftp;
} }
else else
status = retrieve_url (*t, &filename, &redirected_URL, NULL, &dt, opt.recursive); status = retrieve_url (*t, &filename, &redirected_URL, NULL, &dt, opt.recursive);
if (opt.delete_after && file_exists_p(filename)) if (opt.delete_after && file_exists_p(filename))
{ {
DEBUGP (("Removing file due to --delete-after in main():\n")); DEBUGP (("Removing file due to --delete-after in main():\n"));
logprintf (LOG_VERBOSE, _("Removing %s.\n"), filename); logprintf (LOG_VERBOSE, _("Removing %s.\n"), filename);
if (unlink (filename)) if (unlink (filename))
logprintf (LOG_NOTQUIET, "unlink: %s\n", strerror (errno)); logprintf (LOG_NOTQUIET, "unlink: %s\n", strerror (errno));
} }
xfree_null (redirected_URL); xfree_null (redirected_URL);
xfree_null (filename); xfree_null (filename);
@ -978,8 +998,8 @@ Can't timestamp and not clobber old files at the same time.\n"));
int count; int count;
status = retrieve_from_file (opt.input_filename, opt.force_html, &count); status = retrieve_from_file (opt.input_filename, opt.force_html, &count);
if (!count) if (!count)
logprintf (LOG_NOTQUIET, _("No URLs found in %s.\n"), logprintf (LOG_NOTQUIET, _("No URLs found in %s.\n"),
opt.input_filename); opt.input_filename);
} }
/* Print broken links. */ /* Print broken links. */
@ -996,17 +1016,17 @@ Can't timestamp and not clobber old files at the same time.\n"));
total_downloaded_bytes != 0) total_downloaded_bytes != 0)
{ {
logprintf (LOG_NOTQUIET, logprintf (LOG_NOTQUIET,
_("FINISHED --%s--\nDownloaded: %d files, %s in %s (%s)\n"), _("FINISHED --%s--\nDownloaded: %d files, %s in %s (%s)\n"),
time_str (NULL), time_str (NULL),
opt.numurls, opt.numurls,
human_readable (total_downloaded_bytes), human_readable (total_downloaded_bytes),
secs_to_human_time (total_download_time), secs_to_human_time (total_download_time),
retr_rate (total_downloaded_bytes, total_download_time)); retr_rate (total_downloaded_bytes, total_download_time));
/* Print quota warning, if exceeded. */ /* Print quota warning, if exceeded. */
if (opt.quota && total_downloaded_bytes > opt.quota) if (opt.quota && total_downloaded_bytes > opt.quota)
logprintf (LOG_NOTQUIET, logprintf (LOG_NOTQUIET,
_("Download quota of %s EXCEEDED!\n"), _("Download quota of %s EXCEEDED!\n"),
human_readable (opt.quota)); human_readable (opt.quota));
} }
if (opt.cookies_output) if (opt.cookies_output)
@ -1048,10 +1068,14 @@ static void
redirect_output_signal (int sig) redirect_output_signal (int sig)
{ {
const char *signal_name = (sig == SIGHUP ? "SIGHUP" : const char *signal_name = (sig == SIGHUP ? "SIGHUP" :
(sig == SIGUSR1 ? "SIGUSR1" : (sig == SIGUSR1 ? "SIGUSR1" :
"WTF?!")); "WTF?!"));
log_request_redirect_output (signal_name); log_request_redirect_output (signal_name);
progress_schedule_redirect (); progress_schedule_redirect ();
signal (sig, redirect_output_signal); signal (sig, redirect_output_signal);
} }
#endif #endif
/*
* vim: et ts=2 sw=2
*/

View File

@ -1,5 +1,5 @@
/* mswindows.c -- Windows-specific support /* mswindows.c -- Windows-specific support
Copyright (C) 1996-2005 Free Software Foundation, Inc. Copyright (C) 1996-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* Declarations for windows /* Declarations for windows
Copyright (C) 1996-2005 Free Software Foundation, Inc. Copyright (C) 1996-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* SSL support via OpenSSL library. /* SSL support via OpenSSL library.
Copyright (C) 2000-2005 Free Software Foundation, Inc. Copyright (C) 2000-2006 Free Software Foundation, Inc.
Originally contributed by Christian Fraenkel. Originally contributed by Christian Fraenkel.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* struct options. /* struct options.
Copyright (C) 1996-2005 Free Software Foundation, Inc. Copyright (C) 1996-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* Download progress. /* Download progress.
Copyright (C) 2001-2005 Free Software Foundation, Inc. Copyright (C) 2001-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* Download progress. /* Download progress.
Copyright (C) 2001-2005 Free Software Foundation, Inc. Copyright (C) 2001-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* Portable timers. /* Portable timers.
Copyright (C) 2005 Free Software Foundation, Inc. Copyright (C) 2005-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* Declarations for ptimer.c. /* Declarations for ptimer.c.
Copyright (C) 2005 Free Software Foundation, Inc. Copyright (C) 2005-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* Handling of recursive HTTP retrieving. /* Handling of recursive HTTP retrieving.
Copyright (C) 1996-2005 Free Software Foundation, Inc. Copyright (C) 1996-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* Declarations for recur.c. /* Declarations for recur.c.
Copyright (C) 1996-2005 Free Software Foundation, Inc. Copyright (C) 1996-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* File retrieval. /* File retrieval.
Copyright (C) 1996-2005 Free Software Foundation, Inc. Copyright (C) 1996-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* Declarations for retr.c. /* Declarations for retr.c.
Copyright (C) 1996-2005 Free Software Foundation, Inc. Copyright (C) 1996-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* SSL support. /* SSL support.
Copyright (C) 2000-2005 Free Software Foundation, Inc. Copyright (C) 2000-2006 Free Software Foundation, Inc.
Originally contributed by Christian Fraenkel. Originally contributed by Christian Fraenkel.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* Dirty system-dependent hacks. /* Dirty system-dependent hacks.
Copyright (C) 1996-2005 Free Software Foundation, Inc. Copyright (C) 1996-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.
@ -210,4 +210,9 @@ typedef unsigned short uint32_t;
typedef unsigned long uintptr_t; typedef unsigned long uintptr_t;
#endif #endif
/* If intptr_t isn't defined, simply typedef it to long. */
#ifndef HAVE_INTPTR_T
typedef long intptr_t;
#endif
#endif /* SYSDEP_H */ #endif /* SYSDEP_H */

View File

@ -1,5 +1,5 @@
/* Unit testing. /* Unit testing.
Copyright (C) 2005 Free Software Foundation, Inc. Copyright (C) 2005-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* Unit testing declarations. /* Unit testing declarations.
Copyright (C) 2005 Free Software Foundation, Inc. Copyright (C) 2005-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* URL handling. /* URL handling.
Copyright (C) 1996-2005 Free Software Foundation, Inc. Copyright (C) 1996-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* Declarations for url.c. /* Declarations for url.c.
Copyright (C) 1996-2005 Free Software Foundation, Inc. Copyright (C) 1996-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* Various utility functions. /* Various utility functions.
Copyright (C) 1996-2005 Free Software Foundation, Inc. Copyright (C) 1996-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* Declarations for utils.c. /* Declarations for utils.c.
Copyright (C) 1996-2005 Free Software Foundation, Inc. Copyright (C) 1996-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* Miscellaneous declarations. /* Miscellaneous declarations.
Copyright (C) 1996-2005 Free Software Foundation, Inc. Copyright (C) 1996-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* Wrappers around malloc and memory debugging support. /* Wrappers around malloc and memory debugging support.
Copyright (C) 2003-2005 Free Software Foundation, Inc. Copyright (C) 2003-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.

View File

@ -1,5 +1,5 @@
/* xmalloc.c declarations. /* xmalloc.c declarations.
Copyright (C) 2003-2005 Free Software Foundation, Inc. Copyright (C) 2003-2006 Free Software Foundation, Inc.
This file is part of GNU Wget. This file is part of GNU Wget.