X-Git-Url: http://sjero.net/git/?p=wget;a=blobdiff_plain;f=src%2Fmain.c;h=3d99a1efe16939828632ae8191897ac6a6496067;hp=8ce0eb3ff252f47c26d824e3074ec29b113ea065;hb=8c2fd06ba80b5312b4540859d452664450ec054f;hpb=44ba49b31f4ea515f8a6ef2642a34c0fd2024b90 diff --git a/src/main.c b/src/main.c index 8ce0eb3f..3d99a1ef 100644 --- a/src/main.c +++ b/src/main.c @@ -128,12 +128,6 @@ static void print_version (void); # define IF_SSL(x) NULL #endif -#ifdef ENABLE_DEBUG -# define WHEN_DEBUG(x) x -#else -# define WHEN_DEBUG(x) NULL -#endif - struct cmdline_option { const char *long_name; char short_name; @@ -184,7 +178,7 @@ static struct cmdline_option option_data[] = { "content-on-error", 0, OPT_BOOLEAN, "contentonerror", -1 }, { "cookies", 0, OPT_BOOLEAN, "cookies", -1 }, { "cut-dirs", 0, OPT_VALUE, "cutdirs", -1 }, - { WHEN_DEBUG ("debug"), 'd', OPT_BOOLEAN, "debug", -1 }, + { "debug", 'd', OPT_BOOLEAN, "debug", -1 }, { "default-page", 0, OPT_VALUE, "defaultpage", -1 }, { "delete-after", 0, OPT_BOOLEAN, "deleteafter", -1 }, { "directories", 0, OPT_BOOLEAN, "dirstruct", -1 }, @@ -217,6 +211,7 @@ static struct cmdline_option option_data[] = { "http-passwd", 0, OPT_VALUE, "httppassword", -1 }, /* deprecated */ { "http-password", 0, OPT_VALUE, "httppassword", -1 }, { "http-user", 0, OPT_VALUE, "httpuser", -1 }, + { IF_SSL ("https-only"), 0, OPT_BOOLEAN, "httpsonly", -1 }, { "ignore-case", 0, OPT_BOOLEAN, "ignorecase", -1 }, { "ignore-length", 0, OPT_BOOLEAN, "ignorelength", -1 }, { "ignore-tags", 0, OPT_VALUE, "ignoretags", -1 }, @@ -237,6 +232,7 @@ static struct cmdline_option option_data[] = { "mirror", 'm', OPT_BOOLEAN, "mirror", -1 }, { "no", 'n', OPT__NO, NULL, required_argument }, { "no-clobber", 0, OPT_BOOLEAN, "noclobber", -1 }, + { "no-config", 0, OPT_BOOLEAN, "noconfig", -1}, { "no-parent", 0, OPT_BOOLEAN, "noparent", -1 }, { "output-document", 'O', OPT_VALUE, "outputdocument", -1 }, { "output-file", 'o', OPT_VALUE, "logfile", -1 }, @@ -251,6 +247,7 @@ static struct cmdline_option option_data[] = { 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 }, + { "show-progress", 0, OPT_BOOLEAN, "showprogress", -1 }, { "protocol-directories", 0, OPT_BOOLEAN, "protocoldirectories", -1 }, { "proxy", 0, OPT_BOOLEAN, "useproxy", -1 }, { "proxy__compat", 'Y', OPT_VALUE, "useproxy", -1 }, /* back-compatible */ @@ -280,6 +277,7 @@ static struct cmdline_option option_data[] = { "server-response", 'S', OPT_BOOLEAN, "serverresponse", -1 }, { "span-hosts", 'H', OPT_BOOLEAN, "spanhosts", -1 }, { "spider", 0, OPT_BOOLEAN, "spider", -1 }, + { "start-pos", 0, OPT_VALUE, "startpos", -1 }, { "strict-comments", 0, OPT_BOOLEAN, "strictcomments", -1 }, { "timeout", 'T', OPT_VALUE, "timeout", -1 }, { "timestamping", 'N', OPT_BOOLEAN, "timestamping", -1 }, @@ -310,7 +308,6 @@ static struct cmdline_option option_data[] = #endif }; -#undef WHEN_DEBUG #undef IF_SSL /* Return a string that contains S with "no-" prepended. The string @@ -320,7 +317,7 @@ static struct cmdline_option option_data[] = static char * no_prefix (const char *s) { - static char buffer[1024]; + static char buffer[2048]; static char *p = buffer; char *cp = p; @@ -472,7 +469,9 @@ Logging and input file:\n"), -B, --base=URL resolves HTML input-file links (-i -F)\n\ relative to URL.\n"), N_("\ - --config=FILE Specify config file to use.\n"), + --config=FILE Specify config file to use.\n"), + N_("\ + --no-config Do not read any config file.\n"), "\n", N_("\ @@ -488,8 +487,12 @@ Download:\n"), existing files (overwriting them).\n"), N_("\ -c, --continue resume getting a partially-downloaded file.\n"), + N_("\ + --start-pos=OFFSET start downloading from zero-based position OFFSET.\n"), N_("\ --progress=TYPE select progress gauge type.\n"), + N_("\ + --show-progress display the progress bar in any verbosity mode.\n"), N_("\ -N, --timestamping don't re-retrieve files unless newer than\n\ local.\n"), @@ -634,7 +637,9 @@ HTTP options:\n"), HTTPS (SSL/TLS) options:\n"), N_("\ --secure-protocol=PR choose secure protocol, one of auto, SSLv2,\n\ - SSLv3, and TLSv1.\n"), + SSLv3, TLSv1 and PFS.\n"), + N_("\ + --https-only only follow secure HTTPS links\n"), N_("\ --no-check-certificate don't validate the server's certificate.\n"), N_("\ @@ -840,15 +845,16 @@ format_and_print_line (const char *prefix, const char *line, assert (prefix != NULL); assert (line != NULL); + assert (line_length > TABULATION); line_dup = xstrdup (line); - if (line_length <= 0) - line_length = MAX_CHARS_PER_LINE - TABULATION; - if (printf ("%s", prefix) < 0) return -1; - remaining_chars = line_length; + + /* Wrap to new line after prefix. */ + remaining_chars = 0; + /* We break on spaces. */ token = strtok (line_dup, " "); while (token != NULL) @@ -856,7 +862,7 @@ format_and_print_line (const char *prefix, const char *line, /* 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 <= (int) strlen (token)) { if (printf ("\n%*c", TABULATION, ' ') < 0) return -1; @@ -930,7 +936,7 @@ print_version (void) #ifdef ENABLE_NLS if (format_and_print_line (locale_title, - LOCALEDIR, + LOCALEDIR, MAX_CHARS_PER_LINE) < 0) exit (3); #endif /* def ENABLE_NLS */ @@ -952,8 +958,8 @@ print_version (void) /* TRANSLATORS: When available, an actual copyright character (circle-c) should be used in preference to "(C)". */ - if (fputs (_("\ -Copyright (C) 2011 Free Software Foundation, Inc.\n"), stdout) < 0) + if (printf (_("\ +Copyright (C) %s Free Software Foundation, Inc.\n"), "2014") < 0) exit (3); if (fputs (_("\ License GPLv3+: GNU GPL version 3 or later\n\ @@ -1041,6 +1047,7 @@ main (int argc, char **argv) longindex = -1; int retconf; bool use_userconfig = false; + bool noconfig = false; while ((retconf = getopt_long (argc, argv, short_options, long_options, &longindex)) != -1) @@ -1053,7 +1060,12 @@ main (int argc, char **argv) { confval = long_options[longindex].val; config_opt = &option_data[confval & ~BOOLEAN_NEG_MARKER]; - if (strcmp (config_opt->long_name, "config") == 0) + if (strcmp (config_opt->long_name, "no-config") == 0) + { + noconfig = true; + break; + } + else if (strcmp (config_opt->long_name, "config") == 0) { bool userrc_ret = true; userrc_ret &= run_wgetrc (optarg); @@ -1070,7 +1082,7 @@ main (int argc, char **argv) } /* If the user did not specify a config, read the system wgetrc and ~/.wgetrc. */ - if (use_userconfig == false) + if (noconfig == false && use_userconfig == false) initialize (); opterr = 0; @@ -1193,6 +1205,20 @@ main (int argc, char **argv) nurl = argc - optind; + /* If we do not have Debug support compiled in AND Wget is invoked with the + * --debug switch, instead of failing, we silently turn it into a no-op. For + * this no-op, we explicitly set opt.debug to false and hence none of the + * Debug output messages will be printed. + */ +#ifndef ENABLE_DEBUG + if (opt.debug) + { + fprintf (stderr, _("Debugging support not compiled in. " + "Ignoring --debug flag.\n")); + opt.debug = false; + } +#endif + /* All user options have now been processed, so it's now safe to do interoption dependency checks. */ @@ -1223,6 +1249,8 @@ main (int argc, char **argv) if (opt.verbose == -1) opt.verbose = !opt.quiet; + if (opt.verbose == 1) + opt.show_progress = true; /* Sanity checks. */ if (opt.verbose && opt.quiet) @@ -1304,12 +1332,13 @@ for details.\n\n")); _("WARC output does not work with --spider.\n")); exit (1); } - if (opt.always_rest) + if (opt.always_rest || opt.start_pos >= 0) { fprintf (stderr, - _("WARC output does not work with --continue, " - "--continue will be disabled.\n")); + _("WARC output does not work with --continue or" + " --start-pos, they will be disabled.\n")); opt.always_rest = false; + opt.start_pos = -1; } if (opt.warc_cdx_dedup_filename != 0 && !opt.warc_digests_enabled) { @@ -1331,6 +1360,14 @@ for details.\n\n")); exit (1); } + if (opt.start_pos >= 0 && opt.always_rest) + { + fprintf (stderr, + _("Specifying both --start-pos and --continue is not " + "recommended; --continue will be disabled.\n")); + opt.always_rest = false; + } + if (!nurl && !opt.input_filename) { /* No URL specified. */ @@ -1471,7 +1508,7 @@ for details.\n\n")); /* Initialize progress. Have to do this after the options are processed so we know where the log file is. */ - if (opt.verbose) + if (opt.show_progress) set_progress_implementation (opt.progress_type); /* Fill in the arguments. */