X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/716e73d483d33a1457be8f4b0e72bb39c11ca171..b9f592fbf50b0dc9e3d1d33b8deb2bf9abad9ef6:/options.c diff --git a/options.c b/options.c index 2f73baee..d11e6419 100644 --- a/options.c +++ b/options.c @@ -22,6 +22,7 @@ #include "popt.h" extern int sanitize_paths; +extern int select_timeout; extern char curr_dir[MAXPATHLEN]; extern struct exclude_list_struct exclude_list; @@ -132,7 +133,6 @@ int quiet = 0; int always_checksum = 0; int list_only = 0; -#define FIXED_CHECKSUM_SEED 32761 #define MAX_BATCH_PREFIX_LEN 256 /* Must be less than MAXPATHLEN-13 */ char *batch_prefix = NULL; @@ -140,7 +140,7 @@ static int daemon_opt; /* sets am_daemon after option error-reporting */ static int modify_window_set; /** Local address to bind. As a character string because it's - * interpreted by the IPv6 layer: should be a numeric IP4 or ip6 + * interpreted by the IPv6 layer: should be a numeric IP4 or IP6 * address, or a hostname. **/ char *bind_address; @@ -309,7 +309,7 @@ void usage(enum logcode F) enum {OPT_VERSION = 1000, OPT_SENDER, OPT_EXCLUDE, OPT_EXCLUDE_FROM, OPT_DELETE_AFTER, OPT_DELETE_EXCLUDED, OPT_LINK_DEST, OPT_INCLUDE, OPT_INCLUDE_FROM, OPT_MODIFY_WINDOW, - OPT_READ_BATCH, OPT_WRITE_BATCH, + OPT_READ_BATCH, OPT_WRITE_BATCH, OPT_TIMEOUT, OPT_REFUSED_BASE = 9000}; static struct poptOption long_options[] = { @@ -363,7 +363,7 @@ static struct poptOption long_options[] = { {"rsh", 'e', POPT_ARG_STRING, &shell_cmd, 0, 0, 0 }, {"block-size", 'B', POPT_ARG_INT, &block_size, 0, 0, 0 }, {"max-delete", 0, POPT_ARG_INT, &max_delete, 0, 0, 0 }, - {"timeout", 0, POPT_ARG_INT, &io_timeout, 0, 0, 0 }, + {"timeout", 0, POPT_ARG_INT, &io_timeout, OPT_TIMEOUT, 0, 0 }, {"temp-dir", 'T', POPT_ARG_STRING, &tmpdir, 0, 0, 0 }, {"compare-dest", 0, POPT_ARG_STRING, &compare_dest, 0, 0, 0 }, {"link-dest", 0, POPT_ARG_STRING, &compare_dest, OPT_LINK_DEST, 0, 0 }, @@ -410,17 +410,12 @@ static char err_buf[200]; **/ void option_error(void) { - int save_daemon = am_daemon; - if (!err_buf[0]) { strcpy(err_buf, "Error parsing options: " "option may be supported on client but not on server?\n"); } - rwrite(FLOG, err_buf, strlen(err_buf)); - am_daemon = 0; rprintf(FERROR, RSYNC_NAME ": %s", err_buf); - am_daemon = save_daemon; } @@ -575,13 +570,16 @@ int parse_arguments(int *argc, const char ***argv, int frommain) case OPT_WRITE_BATCH: /* popt stores the filename in batch_prefix for us */ write_batch = 1; - checksum_seed = FIXED_CHECKSUM_SEED; break; case OPT_READ_BATCH: /* popt stores the filename in batch_prefix for us */ read_batch = 1; - checksum_seed = FIXED_CHECKSUM_SEED; + break; + + case OPT_TIMEOUT: + if (io_timeout && io_timeout < select_timeout) + select_timeout = io_timeout; break; case OPT_LINK_DEST: @@ -642,6 +640,14 @@ int parse_arguments(int *argc, const char ***argv, int frommain) "write-batch and read-batch can not be used together\n"); exit_cleanup(RERR_SYNTAX); } + if ((write_batch || read_batch) && am_server) { + rprintf(FERROR, + "batch-mode is incompatible with server mode\n"); + /* We don't actually exit_cleanup(), so that we can still service + * older version clients that still send batch args to server. */ + read_batch = write_batch = 0; + batch_prefix = NULL; + } if (batch_prefix && strlen(batch_prefix) > MAX_BATCH_PREFIX_LEN) { rprintf(FERROR, "the batch-file prefix must be %d characters or less.\n", @@ -654,12 +660,6 @@ int parse_arguments(int *argc, const char ***argv, int frommain) exit_cleanup(RERR_SYNTAX); } - if (do_compression && (write_batch || read_batch)) { - rprintf(FERROR, - "compress can not be used with write-batch or read-batch\n"); - exit_cleanup(RERR_SYNTAX); - } - if (archive_mode) { if (!files_from) recurse = 1; @@ -883,13 +883,6 @@ void server_options(char **args,int *argc) args[ac++] = arg; } - if (batch_prefix) { - char *r_or_w = write_batch ? "write" : "read"; - if (asprintf(&arg, "--%s-batch=%s", r_or_w, batch_prefix) < 0) - goto oom; - args[ac++] = arg; - } - if (io_timeout) { if (asprintf(&arg, "--timeout=%d", io_timeout) < 0) goto oom;