int whole_file = -1;
int archive_mode = 0;
+int keep_dirlinks = 0;
int copy_links = 0;
int preserve_links = 0;
int preserve_hard_links = 0;
int copy_unsafe_links = 0;
int size_only = 0;
int bwlimit = 0;
+size_t bwlimit_writemax = 0;
int delete_after = 0;
int only_existing = 0;
int opt_ignore_existing = 0;
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," -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");
rprintf(F," --copy-unsafe-links copy the referent of \"unsafe\" symlinks\n");
{"sparse", 'S', POPT_ARG_NONE, &sparse_files, 0, 0, 0 },
{"cvs-exclude", 'C', POPT_ARG_NONE, &cvs_exclude, 0, 0, 0 },
{"update", 'u', POPT_ARG_NONE, &update_only, 0, 0, 0 },
+ {"keep-dirlinks", 'K', POPT_ARG_NONE, &keep_dirlinks, 0, 0, 0 },
{"links", 'l', POPT_ARG_NONE, &preserve_links, 0, 0, 0 },
{"copy-links", 'L', POPT_ARG_NONE, ©_links, 0, 0, 0 },
{"whole-file", 'W', POPT_ARG_VAL, &whole_file, 1, 0, 0 },
break;
case OPT_EXCLUDE:
+ if (am_server || sanitize_paths)
+ return 0; /* Impossible... */
add_exclude(&exclude_list, poptGetOptArg(pc), 0);
break;
case OPT_INCLUDE:
+ if (am_server || sanitize_paths)
+ return 0; /* Impossible... */
add_exclude(&exclude_list, poptGetOptArg(pc),
XFLG_DEF_INCLUDE);
break;
case OPT_EXCLUDE_FROM:
+ if (am_server || sanitize_paths)
+ return 0; /* Impossible... */
arg = poptGetOptArg(pc);
- if (sanitize_paths)
- arg = alloc_sanitize_path(arg, curr_dir);
add_exclude_file(&exclude_list, arg,
XFLG_FATAL_ERRORS);
break;
case OPT_INCLUDE_FROM:
+ if (am_server || sanitize_paths)
+ return 0; /* Impossible... */
arg = poptGetOptArg(pc);
- if (sanitize_paths)
- arg = alloc_sanitize_path(arg, curr_dir);
add_exclude_file(&exclude_list, arg,
XFLG_FATAL_ERRORS | XFLG_DEF_INCLUDE);
break;
if (do_progress && !verbose)
verbose = 1;
+ if (bwlimit) {
+ bwlimit_writemax = (size_t)bwlimit * 128;
+ if (bwlimit_writemax < 512)
+ bwlimit_writemax = 512;
+ }
+
if (files_from) {
char *colon;
if (*argc != 2 && !(am_server && am_sender && *argc == 1)) {
argstr[x++] = 'l';
if (copy_links)
argstr[x++] = 'L';
+ if (keep_dirlinks && am_sender)
+ argstr[x++] = 'K';
if (whole_file > 0)
argstr[x++] = 'W';