X-Git-Url: http://sjero.net/git/?p=wget;a=blobdiff_plain;f=src%2Fmain.c;h=29c13242834389638ee906f96d0d6eb439920154;hp=3ce7583f268b1347ead5208a4817b095ffc76ffe;hb=38a7829dcb4eb5dba28dbf0f05c6a80fea9217f8;hpb=d68295bdb1571589698ecd0f887f4ba6b72e4d30 diff --git a/src/main.c b/src/main.c index 3ce7583f..29c13242 100644 --- a/src/main.c +++ b/src/main.c @@ -247,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 */ @@ -276,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 }, @@ -315,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; @@ -349,26 +351,26 @@ init_switches (void) size_t i, o = 0; for (i = 0; i < countof (option_data); i++) { - struct cmdline_option *opt = &option_data[i]; + struct cmdline_option *cmdopt = &option_data[i]; struct option *longopt; - if (!opt->long_name) + if (!cmdopt->long_name) /* The option is disabled. */ continue; longopt = &long_options[o++]; - longopt->name = opt->long_name; + longopt->name = cmdopt->long_name; longopt->val = i; - if (opt->short_name) + if (cmdopt->short_name) { - *p++ = opt->short_name; - optmap[opt->short_name - 32] = longopt - long_options; + *p++ = cmdopt->short_name; + optmap[cmdopt->short_name - 32] = longopt - long_options; } - switch (opt->type) + switch (cmdopt->type) { case OPT_VALUE: longopt->has_arg = required_argument; - if (opt->short_name) + if (cmdopt->short_name) *p++ = ':'; break; case OPT_BOOLEAN: @@ -382,16 +384,16 @@ init_switches (void) identical to "--foo", except it has opposite meaning and it doesn't allow an argument. */ longopt = &long_options[o++]; - longopt->name = no_prefix (opt->long_name); + longopt->name = no_prefix (cmdopt->long_name); longopt->has_arg = no_argument; /* Mask the value so we'll be able to recognize that we're dealing with the false value. */ longopt->val = i | BOOLEAN_NEG_MARKER; break; default: - assert (opt->argtype != -1); - longopt->has_arg = opt->argtype; - if (opt->short_name) + assert (cmdopt->argtype != -1); + longopt->has_arg = cmdopt->argtype; + if (cmdopt->short_name) { if (longopt->has_arg == required_argument) *p++ = ':'; @@ -485,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"), @@ -973,7 +979,7 @@ There is NO WARRANTY, to the extent permitted by law.\n"), stdout) < 0) exit (0); } -char *program_name; /* Needed by lib/error.c. */ +static char *program_name; /* Needed by lib/error.c. */ char *program_argstring; /* Needed by wget_warc.c. */ int @@ -1087,7 +1093,7 @@ main (int argc, char **argv) short_options, long_options, &longindex)) != -1) { int val; - struct cmdline_option *opt; + struct cmdline_option *cmdopt; /* If LONGINDEX is unchanged, it means RET is referring a short option. */ @@ -1109,31 +1115,31 @@ main (int argc, char **argv) /* Use the retrieved value to locate the option in the option_data array, and to see if we're dealing with the negated "--no-FOO" variant of the boolean option "--foo". */ - opt = &option_data[val & ~BOOLEAN_NEG_MARKER]; - switch (opt->type) + cmdopt = &option_data[val & ~BOOLEAN_NEG_MARKER]; + switch (cmdopt->type) { case OPT_VALUE: - setoptval (opt->data, optarg, opt->long_name); + setoptval (cmdopt->data, optarg, cmdopt->long_name); break; case OPT_BOOLEAN: if (optarg) /* The user has specified a value -- use it. */ - setoptval (opt->data, optarg, opt->long_name); + setoptval (cmdopt->data, optarg, cmdopt->long_name); else { /* NEG is true for `--no-FOO' style boolean options. */ bool neg = !!(val & BOOLEAN_NEG_MARKER); - setoptval (opt->data, neg ? "0" : "1", opt->long_name); + setoptval (cmdopt->data, neg ? "0" : "1", cmdopt->long_name); } break; case OPT_FUNCALL: { - void (*func) (void) = (void (*) (void)) opt->data; + void (*func) (void) = (void (*) (void)) cmdopt->data; func (); } break; case OPT__APPEND_OUTPUT: - setoptval ("logfile", optarg, opt->long_name); + setoptval ("logfile", optarg, cmdopt->long_name); append_to_log = true; break; case OPT__EXECUTE: @@ -1144,24 +1150,23 @@ main (int argc, char **argv) /* We support real --no-FOO flags now, but keep these short options for convenience and backward compatibility. */ - char *p; for (p = optarg; p && *p; p++) switch (*p) { case 'v': - setoptval ("verbose", "0", opt->long_name); + setoptval ("verbose", "0", cmdopt->long_name); break; case 'H': - setoptval ("addhostdir", "0", opt->long_name); + setoptval ("addhostdir", "0", cmdopt->long_name); break; case 'd': - setoptval ("dirstruct", "0", opt->long_name); + setoptval ("dirstruct", "0", cmdopt->long_name); break; case 'c': - setoptval ("noclobber", "1", opt->long_name); + setoptval ("noclobber", "1", cmdopt->long_name); break; case 'p': - setoptval ("noparent", "1", opt->long_name); + setoptval ("noparent", "1", cmdopt->long_name); break; default: fprintf (stderr, _("%s: illegal option -- `-n%c'\n"), @@ -1185,12 +1190,12 @@ main (int argc, char **argv) flag = (*optarg == '1' || c_tolower (*optarg) == 'y' || (c_tolower (optarg[0]) == 'o' && c_tolower (optarg[1]) == 'n')); - setoptval (opt->type == OPT__PARENT ? "noparent" : "noclobber", - flag ? "0" : "1", opt->long_name); + setoptval (cmdopt->type == OPT__PARENT ? "noparent" : "noclobber", + flag ? "0" : "1", cmdopt->long_name); break; } case OPT__DONT_REMOVE_LISTING: - setoptval ("removelisting", "0", opt->long_name); + setoptval ("removelisting", "0", cmdopt->long_name); break; } @@ -1215,6 +1220,7 @@ main (int argc, char **argv) /* All user options have now been processed, so it's now safe to do interoption dependency checks. */ + if (opt.noclobber && opt.convert_links) { fprintf (stderr, @@ -1242,6 +1248,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) @@ -1323,12 +1331,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) { @@ -1350,6 +1359,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. */ @@ -1490,7 +1507,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. */