From 9c657c9f32a0016e17e5b0b90aa90eded1611e90 Mon Sep 17 00:00:00 2001 From: Wayne Davison Date: Fri, 20 Jan 2006 20:15:03 +0000 Subject: [PATCH 1/1] Made this actually work again. --- ignore-case.diff | 86 +++++++++++++++++++----------------------------- 1 file changed, 33 insertions(+), 53 deletions(-) diff --git a/ignore-case.diff b/ignore-case.diff index f4287fb..b6cc2c7 100644 --- a/ignore-case.diff +++ b/ignore-case.diff @@ -1,7 +1,33 @@ This adds the --ignore-case option, which makes rsync compare filenames in a case-insensitive manner. ---- orig/lib/wildmatch.c 2006-01-03 17:26:02 +--- orig/flist.c 2006-01-19 21:17:11 ++++ flist.c 2006-01-20 20:10:25 +@@ -37,6 +37,7 @@ extern int am_sender; + extern int do_progress; + extern int always_checksum; + extern int module_id; ++extern int ignore_case; + extern int ignore_errors; + extern int numeric_ids; + extern int recurse; +@@ -1707,7 +1708,14 @@ int f_name_cmp(struct file_struct *f1, s + return type1 == t_PATH ? 1 : -1; + + while (1) { +- if ((dif = (int)*c1++ - (int)*c2++) != 0) ++ if (ignore_case) { ++ uchar ch1, ch2; ++ ch1 = islower(*c1) ? toupper(*c1) : *c1; ++ ch2 = islower(*c2) ? toupper(*c2) : *c2; ++ c1++, c2++; ++ if ((dif = (int)ch1 - (int)ch2) != 0) ++ break; ++ } else if ((dif = (int)*c1++ - (int)*c2++) != 0) + break; + if (!*c1) { + switch (state1) { +--- orig/lib/wildmatch.c 2006-01-14 08:14:31 +++ lib/wildmatch.c 2006-01-03 17:29:11 @@ -53,6 +53,8 @@ #define ISUPPER(c) (ISASCII(c) && isupper(c)) @@ -37,7 +63,7 @@ in a case-insensitive manner. } /* Match the "pattern" against the forced-to-lower-case "text" string. */ ---- orig/options.c 2005-12-24 07:49:26 +--- orig/options.c 2006-01-20 18:44:02 +++ options.c 2005-10-14 19:19:18 @@ -105,6 +105,7 @@ OFF_T max_size = 0; OFF_T min_size = 0; @@ -47,7 +73,7 @@ in a case-insensitive manner. int blocking_io = -1; int checksum_seed = 0; int inplace = 0; -@@ -342,6 +343,7 @@ void usage(enum logcode F) +@@ -339,6 +340,7 @@ void usage(enum logcode F) rprintf(F," --include-from=FILE read include patterns from FILE\n"); rprintf(F," --files-from=FILE read list of source-file names from FILE\n"); rprintf(F," -0, --from0 all *-from/filter files are delimited by 0s\n"); @@ -55,7 +81,7 @@ in a case-insensitive manner. rprintf(F," --address=ADDRESS bind address for outgoing socket to daemon\n"); rprintf(F," --port=PORT specify double-colon alternate port number\n"); rprintf(F," --blocking-io use blocking I/O for the remote shell\n"); -@@ -485,6 +487,7 @@ static struct poptOption long_options[] +@@ -482,6 +484,7 @@ static struct poptOption long_options[] {"only-write-batch", 0, POPT_ARG_STRING, &batch_name, OPT_ONLY_WRITE_BATCH, 0, 0 }, {"files-from", 0, POPT_ARG_STRING, &files_from, 0, 0, 0 }, {"from0", '0', POPT_ARG_NONE, &eol_nulls, 0, 0, 0}, @@ -63,7 +89,7 @@ in a case-insensitive manner. {"numeric-ids", 0, POPT_ARG_NONE, &numeric_ids, 0, 0, 0 }, {"timeout", 0, POPT_ARG_INT, &io_timeout, 0, 0, 0 }, {"rsh", 'e', POPT_ARG_STRING, &shell_cmd, 0, 0, 0 }, -@@ -1575,6 +1578,9 @@ void server_options(char **args,int *arg +@@ -1578,6 +1581,9 @@ void server_options(char **args,int *arg args[ac++] = arg; } @@ -73,54 +99,8 @@ in a case-insensitive manner. if (partial_dir && am_sender) { if (partial_dir != partialdir_for_delayupdate) { args[ac++] = "--partial-dir"; ---- orig/t_stub.c 2005-11-12 20:13:05 -+++ t_stub.c 2005-11-12 20:14:28 -@@ -27,6 +27,7 @@ - **/ - - int modify_window = 0; -+int ignore_case = 0; - int module_id = -1; - int relative_paths = 0; - int human_readable = 0; ---- orig/util.c 2005-11-12 20:13:05 -+++ util.c 2005-11-12 20:14:39 -@@ -30,6 +30,7 @@ - extern int verbose; - extern int dry_run; - extern int module_id; -+extern int ignore_case; - extern int modify_window; - extern int relative_paths; - extern int human_readable; -@@ -1045,11 +1046,23 @@ int u_strcmp(const char *cs1, const char - { - const uchar *s1 = (const uchar *)cs1; - const uchar *s2 = (const uchar *)cs2; -+ -+ if (ignore_case) { -+ uchar c1, c2; -+ while (1) { -+ c1 = islower(*s1) ? toupper(*s1) : *s1; -+ c2 = islower(*s2) ? toupper(*s2) : *s2; -+ if (!c1 || c1 != c2) -+ break; -+ s1++, s2++; -+ } - -- while (*s1 && *s2 && (*s1 == *s2)) { -- s1++; s2++; -+ return (int)c1 - (int)c2; - } - -+ while (*s1 && *s1 == *s2) -+ s1++, s2++; -+ - return (int)*s1 - (int)*s2; - } - ---- orig/wildtest.c 2006-01-03 17:26:02 -+++ wildtest.c 2004-08-13 17:19:34 +--- orig/wildtest.c 2006-01-14 08:14:31 ++++ wildtest.c 2006-01-20 20:13:46 @@ -16,6 +16,7 @@ int fnmatch_errors = 0; #endif -- 2.34.1