X-Git-Url: http://sjero.net/git/?a=blobdiff_plain;f=src%2Fmain.c;h=9edec13b67919b4cc942dc3872dc0e39ae6038b7;hb=d733dbc7031aaa417e45c38a34a9b72813176bbd;hp=d45465e72b3ac73582dd411c8e39730368354734;hpb=544afabb39f03ab2adefdf62b6af51a81503eb58;p=wget diff --git a/src/main.c b/src/main.c index d45465e7..9edec13b 100644 --- a/src/main.c +++ b/src/main.c @@ -1,6 +1,6 @@ /* Command line parsing. - Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, - 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, + 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. This file is part of GNU Wget. @@ -76,7 +76,7 @@ extern char *compilation_string; extern char *system_getrc; extern char *link_string; /* defined in build_info.c */ -extern char *compiled_features[]; +extern const char *compiled_features[]; /* Used for --version output in print_version */ #define MAX_CHARS_PER_LINE 72 #define TABULATION 4 @@ -197,7 +197,7 @@ static struct cmdline_option option_data[] = { "header", 0, OPT_VALUE, "header", -1 }, { "help", 'h', OPT_FUNCALL, (void *)print_help, no_argument }, { "host-directories", 0, OPT_BOOLEAN, "addhostdir", -1 }, - { "html-extension", 'E', OPT_BOOLEAN, "adjustextension", -1 }, + { "html-extension", 'E', OPT_BOOLEAN, "adjustextension", -1 }, /* deprecated */ { "htmlify", 0, OPT_BOOLEAN, "htmlify", -1 }, { "http-keep-alive", 0, OPT_BOOLEAN, "httpkeepalive", -1 }, { "http-passwd", 0, OPT_VALUE, "httppassword", -1 }, /* deprecated */ @@ -232,7 +232,7 @@ static struct cmdline_option option_data[] = { "post-data", 0, OPT_VALUE, "postdata", -1 }, { "post-file", 0, OPT_VALUE, "postfile", -1 }, { "prefer-family", 0, OPT_VALUE, "preferfamily", -1 }, - { "preserve-permissions", 0, OPT_BOOLEAN, "preservepermissions", -1 }, + { "preserve-permissions", 0, OPT_BOOLEAN, "preservepermissions", -1 }, /* deprecated */ { IF_SSL ("private-key"), 0, OPT_VALUE, "privatekey", -1 }, { IF_SSL ("private-key-type"), 0, OPT_VALUE, "privatekeytype", -1 }, { "progress", 0, OPT_VALUE, "progress", -1 }, @@ -266,6 +266,7 @@ static struct cmdline_option option_data[] = { "timeout", 'T', OPT_VALUE, "timeout", -1 }, { "timestamping", 'N', OPT_BOOLEAN, "timestamping", -1 }, { "tries", 't', OPT_VALUE, "tries", -1 }, + { "use-server-timestamps", 0, OPT_BOOLEAN, "useservertimestamps", -1 }, { "user", 0, OPT_VALUE, "user", -1 }, { "user-agent", 'U', OPT_VALUE, "useragent", -1 }, { "verbose", 'v', OPT_BOOLEAN, "verbose", -1 }, @@ -457,6 +458,9 @@ Download:\n"), -N, --timestamping don't re-retrieve files unless newer than\n\ local.\n"), N_("\ + --no-use-server-timestamps don't set the local file's timestamp by\n\ + the one on the server.\n"), + N_("\ -S, --server-response print server response.\n"), N_("\ --spider don't download anything.\n"), @@ -737,11 +741,11 @@ prompt_for_password (void) lines.*/ static void format_and_print_line (const char *prefix, const char *line, - int line_length) + int line_length) { int remaining_chars; char *line_dup, *token; - + assert (prefix != NULL); assert (line != NULL); @@ -754,12 +758,12 @@ format_and_print_line (const char *prefix, const char *line, remaining_chars = line_length; /* We break on spaces. */ token = strtok (line_dup, " "); - while (token != NULL) + while (token != NULL) { /* If however a token is much larger than the maximum line length, all bets are off and we simply print the token on the next line. */ - if (remaining_chars <= strlen (token)) + if (remaining_chars <= strlen (token)) { printf ("\n%*c", TABULATION, ' '); remaining_chars = line_length - TABULATION; @@ -785,19 +789,12 @@ print_version (void) char *env_wgetrc, *user_wgetrc; int i; -#ifdef __VMS - printf (_("GNU Wget %s built on VMS %s %s.\n\n"), - version_string, vms_arch(), vms_vers()); -#else /* def __VMS */ printf (_("GNU Wget %s built on %s.\n\n"), version_string, OS_TYPE); -#endif /* def __VMS */ - /* compiled_features is a char*[]. We limit the characters per - line to MAX_CHARS_PER_LINE and prefix each line with a constant - number of spaces for proper alignment. */ - for (i = 0; compiled_features[i] != NULL; ) + + for (i = 0; compiled_features[i] != NULL; ) { int line_length = MAX_CHARS_PER_LINE; - while ((line_length > 0) && (compiled_features[i] != NULL)) + while ((line_length > 0) && (compiled_features[i] != NULL)) { printf ("%s ", compiled_features[i]); line_length -= strlen (compiled_features[i]) + 2; @@ -806,17 +803,18 @@ print_version (void) printf ("\n"); } printf ("\n"); - /* Handle the case when $WGETRC is unset and $HOME/.wgetrc is + + /* Handle the case when $WGETRC is unset and $HOME/.wgetrc is absent. */ printf ("%s\n", wgetrc_title); env_wgetrc = wgetrc_env_file_name (); - if (env_wgetrc && *env_wgetrc) + if (env_wgetrc && *env_wgetrc) { printf (_(" %s (env)\n"), env_wgetrc); xfree (env_wgetrc); } user_wgetrc = wgetrc_user_file_name (); - if (user_wgetrc) + if (user_wgetrc) { printf (_(" %s (user)\n"), user_wgetrc); xfree (user_wgetrc); @@ -825,17 +823,21 @@ print_version (void) printf (_(" %s (system)\n"), SYSTEM_WGETRC); #endif +#ifdef ENABLE_NLS format_and_print_line (locale_title, - LOCALEDIR, - MAX_CHARS_PER_LINE); - - format_and_print_line (compile_title, - compilation_string, - MAX_CHARS_PER_LINE); + LOCALEDIR, + MAX_CHARS_PER_LINE); +#endif /* def ENABLE_NLS */ + + if (compilation_string != NULL) + format_and_print_line (compile_title, + compilation_string, + MAX_CHARS_PER_LINE); - format_and_print_line (link_title, - link_string, - MAX_CHARS_PER_LINE); + if (link_string != NULL) + format_and_print_line (link_title, + link_string, + MAX_CHARS_PER_LINE); printf ("\n"); /* TRANSLATORS: When available, an actual copyright character @@ -873,11 +875,16 @@ main (int argc, char **argv) i18n_initialize (); /* Construct the name of the executable, without the directory part. */ +#ifdef __VMS + /* On VMS, lose the "dev:[dir]" prefix and the ".EXE;nnn" suffix. */ + exec_name = vms_basename (argv[0]); +#else /* def __VMS */ exec_name = strrchr (argv[0], PATH_SEPARATOR); if (!exec_name) exec_name = argv[0]; else ++exec_name; +#endif /* def __VMS [else] */ #ifdef WINDOWS /* Drop extension (typically .EXE) from executable filename. */ @@ -1048,7 +1055,7 @@ Can't timestamp and not clobber old files at the same time.\n")); #endif if (opt.output_document) { - if (opt.convert_links + if (opt.convert_links && (nurl > 1 || opt.page_requisites || opt.recursive)) { fputs (_("\ @@ -1071,12 +1078,12 @@ WARNING: timestamping does nothing in combination with -O. See the manual\n\ for details.\n\n")); opt.timestamping = false; } - if (opt.noclobber && file_exists_p(opt.output_document)) - { + if (opt.noclobber && file_exists_p(opt.output_document)) + { /* Check if output file exists; if it does, exit. */ logprintf (LOG_VERBOSE, _("File `%s' already there; not retrieving.\n"), opt.output_document); exit(1); - } + } } if (opt.ask_passwd && opt.passwd) @@ -1210,6 +1217,13 @@ WARNING: Can't reopen standard output in binary mode;\n\ if (fstat (fileno (output_stream), &st) == 0 && S_ISREG (st.st_mode)) output_stream_regular = true; } + if (!output_stream_regular && opt.convert_links) + { + printf (_("-k can be used together with -O only if outputting to \ +a regular file.\n")); + print_usage (); + exit(1); + } } #ifdef __VMS @@ -1280,9 +1294,9 @@ WARNING: Can't reopen standard output in binary mode;\n\ int old_follow_ftp = opt.follow_ftp; /* 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; - + status = retrieve_tree (url_parsed, NULL); opt.follow_ftp = old_follow_ftp; @@ -1322,7 +1336,7 @@ WARNING: Can't reopen standard output in binary mode;\n\ { print_broken_links(); } - + /* Print the downloaded sum. */ if ((opt.recursive || opt.page_requisites || nurl > 1