X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/42d8ec616d5108d1dc2bc949fe967620da653451..5250c3bc20b0855f477b6b91457a745c105b3ac2:/options.c diff --git a/options.c b/options.c index e7c6c612..d4a0f8f6 100644 --- a/options.c +++ b/options.c @@ -1854,6 +1854,12 @@ int parse_arguments(int *argc_p, const char ***argv_p) "--read-batch cannot be used with --files-from\n"); return 0; } + if (read_batch && remove_source_files) { + snprintf(err_buf, sizeof err_buf, + "--read-batch cannot be used with --remove-%s-files\n", + remove_source_files == 1 ? "source" : "sent"); + return 0; + } if (batch_name && strlen(batch_name) > MAX_BATCH_NAME_LEN) { snprintf(err_buf, sizeof err_buf, "the batch-file name must be %d characters or less.\n", @@ -1997,22 +2003,32 @@ int parse_arguments(int *argc_p, const char ***argv_p) return 0; } if (backup_dir) { + while (*backup_dir == '.' && backup_dir[1] == '/') + backup_dir += 2; + if (*backup_dir == '.' && backup_dir[1] == '\0') + backup_dir++; backup_dir_len = strlcpy(backup_dir_buf, backup_dir, sizeof backup_dir_buf); backup_dir_remainder = sizeof backup_dir_buf - backup_dir_len; - if (backup_dir_remainder < 32) { + if (backup_dir_remainder < 128) { snprintf(err_buf, sizeof err_buf, "the --backup-dir path is WAY too long.\n"); return 0; } - if (backup_dir_buf[backup_dir_len - 1] != '/') { + if (!backup_dir_len) { + backup_dir_len = -1; + backup_dir = NULL; + } else if (backup_dir_buf[backup_dir_len - 1] != '/') { backup_dir_buf[backup_dir_len++] = '/'; backup_dir_buf[backup_dir_len] = '\0'; } - if (INFO_GTE(BACKUP, 1) && !am_sender) - rprintf(FINFO, "backup_dir is %s\n", backup_dir_buf); + } + if (backup_dir) { + /* No need for a suffix or a protect rule. */ } else if (!backup_suffix_len && (!am_server || !am_sender)) { snprintf(err_buf, sizeof err_buf, - "--suffix cannot be a null string without --backup-dir\n"); + "--suffix cannot be empty %s\n", backup_dir_len < 0 + ? "when --backup-dir is the same as the dest dir" + : "without a --backup-dir"); return 0; } else if (make_backups && delete_mode && !delete_excluded && !am_server) { snprintf(backup_dir_buf, sizeof backup_dir_buf,