X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/c3ea09906de8ab7b25b12032e1ed71d61f0bac16..9cd339eb39d4090a8b85f8dccd2a823ff563b93a:/options.c diff --git a/options.c b/options.c index b017c116..c8d1a5cd 100644 --- a/options.c +++ b/options.c @@ -259,7 +259,7 @@ void usage(enum logcode F) rprintf(F," -W, --whole-file copy whole files, no incremental checks\n"); rprintf(F," --no-whole-file turn off --whole-file\n"); rprintf(F," -x, --one-file-system don't cross filesystem boundaries\n"); - rprintf(F," -B, --block-size=SIZE checksum blocking size (default %d)\n",BLOCK_SIZE); + rprintf(F," -B, --block-size=SIZE force a fixed checksum block-size\n"); rprintf(F," -e, --rsh=COMMAND specify the remote shell\n"); rprintf(F," --rsync-path=PATH specify path to rsync on the remote machine\n"); rprintf(F," --existing only update files that already exist\n"); @@ -439,21 +439,33 @@ void option_error(void) static void set_refuse_options(char *bp) { struct poptOption *op; - char *cp; + char *cp, shortname[2]; + int is_wild; + + shortname[1] = '\0'; while (1) { + while (*bp == ' ') bp++; + if (!*bp) + break; if ((cp = strchr(bp, ' ')) != NULL) *cp= '\0'; + /* If they specify "delete", reject all delete options. */ + if (strcmp(bp, "delete") == 0) + bp = "delete*"; + is_wild = strpbrk(bp, "*?[") != NULL; for (op = long_options; ; op++) { if (!op->longName) { rprintf(FLOG, - "Unknown option %s in \"refuse options\" setting\n", + "No match for refuse-options string \"%s\"\n", bp); break; } - if (strcmp(bp, op->longName) == 0) { - op->val = (op - long_options)+OPT_REFUSED_BASE; - break; + *shortname = op->shortName; + if (wildmatch(bp, op->longName) || wildmatch(bp, shortname)) { + op->val = (op - long_options) + OPT_REFUSED_BASE; + if (!is_wild) + break; } } if (!cp) @@ -648,10 +660,10 @@ int parse_arguments(int *argc, const char ***argv, int frommain) } #endif - if (block_size > MAX_MAP_SIZE) { + if (block_size > MAX_BLOCK_SIZE) { rprintf(FINFO, "limiting block-size to %d bytes\n", - MAX_MAP_SIZE); - block_size = MAX_MAP_SIZE; + MAX_BLOCK_SIZE); + block_size = MAX_BLOCK_SIZE; } if (write_batch && read_batch) { @@ -1000,10 +1012,19 @@ void server_options(char **args,int *argc) args[ac++] = arg; } - if (delete_excluded) - args[ac++] = "--delete-excluded"; - else if (delete_mode) - args[ac++] = "--delete"; + if (am_sender) { + if (delete_excluded) + args[ac++] = "--delete-excluded"; + else if (delete_mode + && (!delete_after || protocol_version < 27)) + args[ac++] = "--delete"; + + if (delete_after) + args[ac++] = "--delete-after"; + + if (force_delete) + args[ac++] = "--force"; + } if (size_only) args[ac++] = "--size-only"; @@ -1026,12 +1047,6 @@ void server_options(char **args,int *argc) } else if (keep_partial) args[ac++] = "--partial"; - if (force_delete) - args[ac++] = "--force"; - - if (delete_after) - args[ac++] = "--delete-after"; - if (ignore_errors) args[ac++] = "--ignore-errors";