X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/0c56b1add7d171499ae60c03b2eee3615f50e8ff..9f125ea7c1a55f8c86b2efe296ba750d7ccb9106:/options.c diff --git a/options.c b/options.c index 4fb9aa8b..c34047d6 100644 --- a/options.c +++ b/options.c @@ -76,6 +76,7 @@ int filesfrom_fd = -1; char *remote_filesfrom_file = NULL; int eol_nulls = 0; int recurse = 0; +int keep_dirs = 0; int am_daemon = 0; int daemon_over_rsh = 0; int do_stats = 0; @@ -97,7 +98,7 @@ int modify_window = 0; int blocking_io = -1; int checksum_seed = 0; int inplace = 0; -unsigned int block_size = 0; +long block_size = 0; /* "long" because popt can't set an int32. */ /** Network address family. **/ @@ -130,8 +131,10 @@ char *rsync_path = RSYNC_PATH; char *backup_dir = NULL; char backup_dir_buf[MAXPATHLEN]; int rsync_port = 0; +int compare_dest = 0; int copy_dest = 0; int link_dest = 0; +int basis_dir_cnt = 0; int verbose = 0; int quiet = 0; @@ -143,9 +146,7 @@ char *batch_name = NULL; static int daemon_opt; /* sets am_daemon after option error-reporting */ static int modify_window_set; -static int compare_dest = 0; -static int basis_dir_cnt = 0; -static char *dest_option; +static char *dest_option = NULL; static char *max_size_arg; /** Local address to bind. As a character string because it's @@ -199,7 +200,7 @@ static void print_rsync_version(enum logcode f) rprintf(f, " %sinplace, %sIPv6, %d-bit system inums, %d-bit internal inums\n", have_inplace, ipv6, (int) (sizeof dumstat->st_ino * 8), - (int) (sizeof (uint64) * 8)); + (int) (sizeof (int64) * 8)); #ifdef MAINTAINER_MODE rprintf(f, " panic action: \"%s\"\n", get_panic_action()); @@ -248,7 +249,7 @@ void usage(enum logcode F) rprintf(F," --backup-dir make backups into this directory\n"); rprintf(F," --suffix=SUFFIX backup suffix (default %s w/o --backup-dir)\n",BACKUP_SUFFIX); rprintf(F," -u, --update update only (don't overwrite newer files)\n"); - rprintf(F," --inplace update destination files inplace (SEE MAN PAGE)\n"); + rprintf(F," --inplace update destination files in-place (SEE MAN PAGE)\n"); rprintf(F," -K, --keep-dirlinks treat symlinked dir on receiver as dir\n"); rprintf(F," -l, --links copy symlinks as symlinks\n"); rprintf(F," -L, --copy-links copy the referent of all symlinks\n"); @@ -298,6 +299,7 @@ void usage(enum logcode F) rprintf(F," --files-from=FILE read FILE for list of source-file names\n"); rprintf(F," -0, --from0 all *-from file lists are delimited by nulls\n"); rprintf(F," --version print version number\n"); + rprintf(F," --port=PORT specify double-colon alternate port number\n"); rprintf(F," --blocking-io use blocking I/O for the remote shell\n"); rprintf(F," --no-blocking-io turn off --blocking-io\n"); rprintf(F," --stats give some file transfer stats\n"); @@ -375,7 +377,7 @@ static struct poptOption long_options[] = { {"relative", 'R', POPT_ARG_VAL, &relative_paths, 1, 0, 0 }, {"no-relative", 0, POPT_ARG_VAL, &relative_paths, 0, 0, 0 }, {"rsh", 'e', POPT_ARG_STRING, &shell_cmd, 0, 0, 0 }, - {"block-size", 'B', POPT_ARG_INT, &block_size, 0, 0, 0 }, + {"block-size", 'B', POPT_ARG_LONG, &block_size, 0, 0, 0 }, {"max-delete", 0, POPT_ARG_INT, &max_delete, 0, 0, 0 }, {"max-size", 0, POPT_ARG_STRING, &max_size_arg, OPT_MAX_SIZE, 0, 0 }, {"timeout", 0, POPT_ARG_INT, &io_timeout, OPT_TIMEOUT, 0, 0 }, @@ -393,6 +395,7 @@ static struct poptOption long_options[] = { {"blocking-io", 0, POPT_ARG_VAL, &blocking_io, 1, 0, 0 }, {"no-blocking-io", 0, POPT_ARG_VAL, &blocking_io, 0, 0, 0 }, {0, 'P', POPT_ARG_NONE, 0, 'P', 0, 0 }, + {"port", 0, POPT_ARG_INT, &rsync_port, 0, 0, 0 }, {"log-format", 0, POPT_ARG_STRING, &log_format, 0, 0, 0 }, {"bwlimit", 0, POPT_ARG_INT, &bwlimit, 0, 0, 0 }, {"backup-dir", 0, POPT_ARG_STRING, &backup_dir, 0, 0, 0 }, @@ -413,7 +416,6 @@ static struct poptOption long_options[] = { {"config", 0, POPT_ARG_STRING, 0, OPT_DAEMON, 0, 0 }, {"daemon", 0, POPT_ARG_NONE, 0, OPT_DAEMON, 0, 0 }, {"no-detach", 0, POPT_ARG_NONE, 0, OPT_DAEMON, 0, 0 }, - {"port", 0, POPT_ARG_INT, 0, OPT_DAEMON, 0, 0 }, {0,0,0,0, 0, 0, 0} }; @@ -737,7 +739,7 @@ int parse_arguments(int *argc, const char ***argv, int frommain) compare_dest = 1; dest_option = "--compare-dest"; set_dest_dir: - if (basis_dir_cnt >= MAX_BASIS_DIRS-1) { + if (basis_dir_cnt >= MAX_BASIS_DIRS) { snprintf(err_buf, sizeof err_buf, "ERROR: at most %d %s args may be specified\n", MAX_BASIS_DIRS, dest_option); @@ -849,6 +851,9 @@ int parse_arguments(int *argc, const char ***argv, int frommain) preserve_uid = 1; preserve_devices = 1; } + if (recurse) { + keep_dirs = 1; + } if (relative_paths < 0) relative_paths = files_from? 1 : 0; @@ -957,12 +962,6 @@ int parse_arguments(int *argc, const char ***argv, int frommain) am_server ? "server" : "client"); return 0; #endif - if (compare_dest || copy_dest || link_dest) { - snprintf(err_buf, sizeof err_buf, - "--inplace does not yet work with %s\n", - dest_option); - return 0; - } } else { if (keep_partial && !partial_dir) partial_dir = getenv("RSYNC_PARTIAL_DIR"); @@ -1008,6 +1007,7 @@ int parse_arguments(int *argc, const char ***argv, int frommain) return 0; } } + keep_dirs = 1; } return 1; @@ -1112,7 +1112,7 @@ void server_options(char **args,int *argc) args[ac++] = argstr; if (block_size) { - if (asprintf(&arg, "-B%u", block_size) < 0) + if (asprintf(&arg, "-B%lu", block_size) < 0) goto oom; args[ac++] = arg; } @@ -1235,7 +1235,11 @@ void server_options(char **args,int *argc) args[ac++] = "--files-from=-"; args[ac++] = "--from0"; } + if (!relative_paths) + args[ac++] = "--no-relative"; } + if (!implied_dirs && !am_sender) + args[ac++] = "--no-implied-dirs"; *argc = ac; return;