#include "rsync.h"
#include "popt.h"
+extern int module_id;
extern int sanitize_paths;
extern int select_timeout;
extern struct filter_list_struct filter_list;
int update_only = 0;
int cvs_exclude = 0;
int dry_run = 0;
-int local_server = 0;
int ignore_times = 0;
int delete_mode = 0;
int delete_during = 0;
int numeric_ids = 0;
int force_delete = 0;
int io_timeout = 0;
-int module_id = -1;
int am_server = 0;
-int am_sender = 0;
+int am_sender = -1;
int am_generator = 0;
char *files_from = NULL;
int filesfrom_fd = -1;
/** Network address family. **/
-#ifdef INET6
+#if INET6
int default_af_hint = 0; /* Any protocol */
#else
int default_af_hint = AF_INET; /* Must use IPv4 */
char const *ipv6 = "no ";
STRUCT_STAT *dumstat;
-#ifdef HAVE_SOCKETPAIR
+#if HAVE_SOCKETPAIR
got_socketpair = "";
#endif
rprintf(F," --bwlimit=KBPS limit I/O bandwidth; KBytes per second\n");
rprintf(F," --write-batch=FILE write a batched update to FILE\n");
rprintf(F," --read-batch=FILE read a batched update from FILE\n");
-#ifdef INET6
+#if INET6
rprintf(F," -4, --ipv4 prefer IPv4\n");
rprintf(F," -6, --ipv6 prefer IPv6\n");
#endif
{"no-implied-dirs", 0, POPT_ARG_VAL, &implied_dirs, 0, 0, 0 },
{"protocol", 0, POPT_ARG_INT, &protocol_version, 0, 0, 0 },
{"checksum-seed", 0, POPT_ARG_INT, &checksum_seed, 0, 0, 0 },
-#ifdef INET6
+#if INET6
{"ipv4", '4', POPT_ARG_VAL, &default_af_hint, AF_INET, 0, 0 },
{"ipv6", '6', POPT_ARG_VAL, &default_af_hint, AF_INET6, 0, 0 },
#endif
rprintf(F," --no-detach do not detach from the parent\n");
rprintf(F," --port=PORT listen on alternate port number\n");
rprintf(F," -v, --verbose increase verbosity\n");
-#ifdef INET6
+#if INET6
rprintf(F," -4, --ipv4 prefer IPv4\n");
rprintf(F," -6, --ipv6 prefer IPv6\n");
#endif
{"bwlimit", 0, POPT_ARG_INT, &daemon_bwlimit, 0, 0, 0 },
{"config", 0, POPT_ARG_STRING, &config_file, 0, 0, 0 },
{"daemon", 0, POPT_ARG_NONE, &daemon_opt, 0, 0, 0 },
-#ifdef INET6
+#if INET6
{"ipv4", '4', POPT_ARG_VAL, &default_af_hint, AF_INET, 0, 0 },
{"ipv6", '6', POPT_ARG_VAL, &default_af_hint, AF_INET6, 0, 0 },
#endif
break;
case OPT_FILTER:
- add_filter(&filter_list, poptGetOptArg(pc), 0);
+ parse_rule(&filter_list, poptGetOptArg(pc), 0, 0);
break;
case OPT_EXCLUDE:
- add_filter(&filter_list, poptGetOptArg(pc),
- XFLG_DEF_EXCLUDE);
+ parse_rule(&filter_list, poptGetOptArg(pc),
+ 0, XFLG_OLD_PREFIXES);
break;
case OPT_INCLUDE:
- add_filter(&filter_list, poptGetOptArg(pc),
- XFLG_DEF_INCLUDE);
+ parse_rule(&filter_list, poptGetOptArg(pc),
+ MATCHFLG_INCLUDE, XFLG_OLD_PREFIXES);
break;
case OPT_EXCLUDE_FROM:
if (check_filter(&server_filter_list, cp, 0) < 0)
goto options_rejected;
}
- add_filter_file(&filter_list, arg, XFLG_FATAL_ERRORS
- | (opt == OPT_INCLUDE_FROM ? XFLG_DEF_INCLUDE
- : XFLG_DEF_EXCLUDE));
+ parse_filter_file(&filter_list, arg,
+ opt == OPT_INCLUDE_FROM ? MATCHFLG_INCLUDE : 0,
+ XFLG_FATAL_ERRORS | XFLG_OLD_PREFIXES);
break;
case 'h':
case 'F':
switch (++F_option_cnt) {
case 1:
- add_filter(&filter_list,
- ": /.rsync-filter", 0);
+ parse_rule(&filter_list,": /.rsync-filter",0,0);
break;
case 2:
- add_filter(&filter_list,
- "- .rsync-filter", 0);
+ parse_rule(&filter_list,"- .rsync-filter",0,0);
break;
}
break;
break;
case OPT_MAX_SIZE:
- for (arg = max_size_arg; isdigit(*arg); arg++) {}
+ for (arg = max_size_arg; isdigit(*(uchar*)arg); arg++) {}
if (*arg == '.')
- for (arg++; isdigit(*arg); arg++) {}
+ for (arg++; isdigit(*(uchar*)arg); arg++) {}
switch (*arg) {
case 'k': case 'K':
max_size = atof(max_size_arg) * 1024;
}
}
+ if (am_sender < 0)
+ am_sender = 0;
+
#if !SUPPORT_LINKS
if (preserve_links && !am_sender) {
snprintf(err_buf, sizeof err_buf,
"You may not combine multiple --delete-WHEN options.\n");
return 0;
}
- if (delete_before || delete_during || delete_after)
+ if (!recurse) {
+ delete_before = delete_during = delete_after = 0;
+ delete_mode = delete_excluded = 0;
+ } else if (delete_before || delete_during || delete_after)
delete_mode = 1;
else if (delete_mode || delete_excluded)
delete_mode = delete_before = 1;
if (!*partial_dir || strcmp(partial_dir, ".") == 0)
partial_dir = NULL;
else if (*partial_dir != '/') {
- add_filter(&filter_list, partial_dir,
- XFLG_DIRECTORY | XFLG_DEF_EXCLUDE);
+ parse_rule(&filter_list, partial_dir,
+ MATCHFLG_NO_PREFIXES|MATCHFLG_DIRECTORY, 0);
}
keep_partial = 1;
}
if (copy_links)
argstr[x++] = 'L';
if (xfer_dirs > 1)
- argstr[x++] = 'k';
+ argstr[x++] = 'd';
if (keep_dirlinks && am_sender)
argstr[x++] = 'K';