Call delete_in_dir(NULL, NULL, NULL) in do_delete_pass().
[rsync/rsync.git] / util.c
diff --git a/util.c b/util.c
index e99ede8..5864b5d 100644 (file)
--- a/util.c
+++ b/util.c
@@ -31,6 +31,7 @@ extern int verbose;
 extern int dry_run;
 extern int module_id;
 extern int modify_window;
+extern int relative_paths;
 extern char *partial_dir;
 extern struct filter_list_struct server_filter_list;
 
@@ -528,7 +529,6 @@ static void glob_expand_one(char *s, char ***argv_ptr, int *argc_ptr,
        filter_server_path(s);
 #else
        glob_t globbuf;
-       int i;
 
        if (maxargs <= argc)
                return;
@@ -553,9 +553,9 @@ static void glob_expand_one(char *s, char ***argv_ptr, int *argc_ptr,
        if (globbuf.gl_pathc == 0)
                argv[argc++] = s;
        else {
-               int j = globbuf.gl_pathc;
+               int i;
                free(s);
-               for (i = 0; i < j; i++) {
+               for (i = 0; i < (int)globbuf.gl_pathc; i++) {
                        if (!(argv[argc++] = strdup(globbuf.gl_pathv[i])))
                                out_of_memory("glob_expand_one");
                }
@@ -756,7 +756,7 @@ unsigned int clean_fname(char *name, BOOL collapse_dot_dot)
 char *sanitize_path(char *dest, const char *p, const char *rootdir, int depth)
 {
        char *start, *sanp;
-       int rlen = 0;
+       int rlen = 0, leave_one_dotdir = relative_paths;
 
        if (dest != p) {
                int plen = strlen(p);
@@ -791,9 +791,13 @@ char *sanitize_path(char *dest, const char *p, const char *rootdir, int depth)
                 * always be left pointing after a slash
                 */
                if (*p == '.' && (p[1] == '/' || p[1] == '\0')) {
-                       /* skip "." component */
-                       p++;
-                       continue;
+                       if (leave_one_dotdir && p[1])
+                               leave_one_dotdir = 0;
+                       else {
+                               /* skip "." component */
+                               p++;
+                               continue;
+                       }
                }
                if (*p == '.' && p[1] == '.' && (p[2] == '/' || p[2] == '\0')) {
                        /* ".." component followed by slash or end */