/* local prototypes */
static int strwicmp(char *psz1, char *psz2);
--- orig/rsync.c 2005-07-27 23:31:12
-+++ rsync.c 2005-07-27 23:49:21
++++ rsync.c 2005-07-28 00:54:53
@@ -32,6 +32,8 @@ extern int am_server;
extern int am_sender;
extern int am_generator;
extern int preserve_uid;
extern int preserve_gid;
extern int inplace;
-@@ -56,6 +58,17 @@ int set_perms(char *fname,struct file_st
+@@ -56,6 +58,7 @@ int set_perms(char *fname,struct file_st
int updated = 0;
STRUCT_STAT st2;
int change_uid, change_gid;
+ mode_t mode = file->mode; /* file->mode shouldn't be modified */
-+
+
+ if (!st) {
+ if (dry_run)
+@@ -125,9 +128,19 @@ int set_perms(char *fname,struct file_st
+ updated = 1;
+ }
+
+ if (am_daemon) {
+ if (S_ISDIR(st->st_mode)) {
+ mode = (mode & lp_directory_mask(module_id))
+ | lp_force_create_mode(module_id);
+ }
+ }
-
- if (!st) {
- if (dry_run)
-@@ -126,8 +139,8 @@ int set_perms(char *fname,struct file_st
- }
-
++
#ifdef HAVE_CHMOD
- if ((st->st_mode & CHMOD_BITS) != (file->mode & CHMOD_BITS)) {
- int ret = do_chmod(fname, file->mode);