aboutsummaryrefslogtreecommitdiffstats
path: root/options.c
diff options
context:
space:
mode:
authorMatt McCutchen <matt@mattmccutchen.net>2009-05-23 10:59:14 -0700
committerWayne Davison <wayned@samba.org>2009-05-23 11:20:40 -0700
commitc8fa85b23bfebc68f0ab2e0464937f5ee4a8bf69 (patch)
treeae6861995306bbd3fd94584e7555f38b73b4fcb5 /options.c
parenta61ec6b1688ea64fba7c03d69d6f75a7e0b24c61 (diff)
downloadandroid_external_rsync-c8fa85b23bfebc68f0ab2e0464937f5ee4a8bf69.tar.gz
android_external_rsync-c8fa85b23bfebc68f0ab2e0464937f5ee4a8bf69.tar.bz2
android_external_rsync-c8fa85b23bfebc68f0ab2e0464937f5ee4a8bf69.zip
Refactorings to the filter code, most notably:
- Improve function name: parse_rule -> parse_filter_str (to make the similarity with parse_filter_file clearer, and better indicate that it can parse multiple rules when FILTRULE_WORD_SPLIT is specified). - In preparation for rule prefixes containing information beyond the rflags, change the code to pass around a full "template" filter_rule instead of just rflags. Callers of parse_filter_{str,file} that want to specify only rflags can use rule_template(rflags) . - Remove the MODIFIERS_* strings and instead hand-code the condition under which each modifier is valid. This should make it easier to see that the conditions are correct. - Tighten up default modifiers on merge rules: - Disallow "!" because it isn't useful. - If the merge rule specifies a side via "s" or "r", the rules in the file cannot also specify a side via "s", "r", "hide", etc. [Patch was changed by Wayne a bit prior to application.]
Diffstat (limited to 'options.c')
-rw-r--r--options.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/options.c b/options.c
index bd6a495d..53640adc 100644
--- a/options.c
+++ b/options.c
@@ -1399,17 +1399,18 @@ int parse_arguments(int *argc_p, const char ***argv_p)
break;
case OPT_FILTER:
- parse_rule(&filter_list, poptGetOptArg(pc), 0, 0);
+ parse_filter_str(&filter_list, poptGetOptArg(pc),
+ rule_template(0), 0);
break;
case OPT_EXCLUDE:
- parse_rule(&filter_list, poptGetOptArg(pc),
- 0, XFLG_OLD_PREFIXES);
+ parse_filter_str(&filter_list, poptGetOptArg(pc),
+ rule_template(0), XFLG_OLD_PREFIXES);
break;
case OPT_INCLUDE:
- parse_rule(&filter_list, poptGetOptArg(pc),
- FILTRULE_INCLUDE, XFLG_OLD_PREFIXES);
+ parse_filter_str(&filter_list, poptGetOptArg(pc),
+ rule_template(FILTRULE_INCLUDE), XFLG_OLD_PREFIXES);
break;
case OPT_EXCLUDE_FROM:
@@ -1432,7 +1433,7 @@ int parse_arguments(int *argc_p, const char ***argv_p)
goto options_rejected;
}
parse_filter_file(&filter_list, arg,
- opt == OPT_INCLUDE_FROM ? FILTRULE_INCLUDE : 0,
+ rule_template(opt == OPT_INCLUDE_FROM ? FILTRULE_INCLUDE : 0),
XFLG_FATAL_ERRORS | XFLG_OLD_PREFIXES);
break;
@@ -1489,10 +1490,10 @@ int parse_arguments(int *argc_p, const char ***argv_p)
case 'F':
switch (++F_option_cnt) {
case 1:
- parse_rule(&filter_list,": /.rsync-filter",0,0);
+ parse_filter_str(&filter_list,": /.rsync-filter",rule_template(0),0);
break;
case 2:
- parse_rule(&filter_list,"- .rsync-filter",0,0);
+ parse_filter_str(&filter_list,"- .rsync-filter",rule_template(0),0);
break;
}
break;
@@ -1895,7 +1896,7 @@ int parse_arguments(int *argc_p, const char ***argv_p)
list_only |= 1;
if (xfer_dirs >= 4) {
- parse_rule(&filter_list, "- /*/*", 0, 0);
+ parse_filter_str(&filter_list, "- /*/*", rule_template(0), 0);
recurse = xfer_dirs = 1;
} else if (recurse)
xfer_dirs = 1;
@@ -2033,7 +2034,7 @@ int parse_arguments(int *argc_p, const char ***argv_p)
} else if (make_backups && delete_mode && !delete_excluded && !am_server) {
snprintf(backup_dir_buf, sizeof backup_dir_buf,
"P *%s", backup_suffix);
- parse_rule(&filter_list, backup_dir_buf, 0, 0);
+ parse_filter_str(&filter_list, backup_dir_buf, rule_template(0), 0);
}
if (make_backups && !backup_dir) {