Needed to call safe_fname() when listing the remote names.
[rsync/rsync.git] / rsync.c
diff --git a/rsync.c b/rsync.c
index 576ce63..537df0a 100644 (file)
--- a/rsync.c
+++ b/rsync.c
@@ -27,6 +27,7 @@ extern int dry_run;
 extern int preserve_times;
 extern int omit_dir_times;
 extern int am_root;
+extern int am_server;
 extern int am_sender;
 extern int am_generator;
 extern int preserve_uid;
@@ -76,7 +77,8 @@ int delete_file(char *fname, int flags)
                return -1;
        }
 
-       zap_dir = flags & DEL_RECURSE || (force_delete && recurse);
+       zap_dir = (flags & DEL_FORCE_RECURSE || (force_delete && recurse))
+               && !(flags & DEL_NO_RECURSE);
        if (dry_run && zap_dir)
                errno = ENOTEMPTY;
        else if (do_rmdir(fname) == 0) {
@@ -220,7 +222,7 @@ int set_perms(char *fname,struct file_struct *file,STRUCT_STAT *st,
                updated = 1;
        }
 
-#ifdef HAVE_CHMOD
+#if HAVE_CHMOD
        if (!S_ISLNK(st->st_mode)) {
                if ((st->st_mode & CHMOD_BITS) != (file->mode & CHMOD_BITS)) {
                        updated = 1;
@@ -298,5 +300,7 @@ void finish_transfer(char *fname, char *fnametmp, struct file_struct *file,
 
 const char *who_am_i(void)
 {
+       if (am_sender < 0)
+               return am_server ? "server" : "client";
        return am_sender ? "sender" : am_generator ? "generator" : "receiver";
 }