[SCM] The rsync repository. - branch master updated

Rsync CVS commit messages rsync-cvs at lists.samba.org
Sun Oct 7 12:01:08 MDT 2012


The branch, master has been updated
       via  d46f831 Fix bogus "vanished file" with "./" prefixes. Fixes bug 9212.
      from  7cefbf1 Fix indentation that used expanded tabs.

;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit d46f8314b6989d8423e0de212303e989584ac30e
Author: Wayne Davison <wayned at samba.org>
Date:   Sun Oct 7 10:46:23 2012 -0700

    Fix bogus "vanished file" with "./" prefixes.
    Fixes bug 9212.

-----------------------------------------------------------------------

Summary of changes:
 util.c |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)


Changeset truncated at 500 lines:

diff --git a/util.c b/util.c
index ea9ca7d..0938584 100644
--- a/util.c
+++ b/util.c
@@ -1032,7 +1032,7 @@ char *sanitize_path(char *dest, const char *p, const char *rootdir, int depth,
  * Also cleans the path using the clean_fname() function. */
 int change_dir(const char *dir, int set_path_only)
 {
-	static int initialised;
+	static int initialised, skipped_chdir;
 	unsigned int len;
 
 	if (!initialised) {
@@ -1048,7 +1048,7 @@ int change_dir(const char *dir, int set_path_only)
 		return 0;
 
 	len = strlen(dir);
-	if (len == 1 && *dir == '.')
+	if (len == 1 && *dir == '.' && (!skipped_chdir || set_path_only))
 		return 1;
 
 	if (*dir == '/') {
@@ -1058,6 +1058,7 @@ int change_dir(const char *dir, int set_path_only)
 		}
 		if (!set_path_only && chdir(dir))
 			return 0;
+		skipped_chdir = set_path_only;
 		memcpy(curr_dir, dir, len + 1);
 	} else {
 		if (curr_dir_len + 1 + len >= sizeof curr_dir) {
@@ -1072,9 +1073,10 @@ int change_dir(const char *dir, int set_path_only)
 			curr_dir[curr_dir_len] = '\0';
 			return 0;
 		}
+		skipped_chdir = set_path_only;
 	}
 
-	curr_dir_len = clean_fname(curr_dir, CFN_COLLAPSE_DOT_DOT_DIRS);
+	curr_dir_len = clean_fname(curr_dir, CFN_COLLAPSE_DOT_DOT_DIRS | CFN_DROP_TRAILING_DOT_DIR);
 	if (sanitize_paths) {
 		if (module_dirlen > curr_dir_len)
 			module_dirlen = curr_dir_len;


-- 
The rsync repository.


More information about the rsync-cvs mailing list