Fixed failed hunks.
[rsync/rsync-patches.git] / early-chmod.diff
CommitLineData
7b675ff5
WD
1--- rsync.c 21 May 2004 08:43:03 -0000 1.140
2+++ rsync.c 21 May 2004 08:58:01 -0000
3@@ -239,6 +239,9 @@ void finish_transfer(char *fname, char *
81486408
WD
4 if (make_backups && !make_backup(fname))
5 return;
6
7+ /* Change permissions before putting the file into place. */
8+ set_perms(fnametmp, file, NULL, 0);
9+
10 /* move tmp file over real file */
11 ret = robust_rename(fnametmp, fname, file->mode & INITACCESSPERMS);
1931a970 12 if (ret < 0) {
7b675ff5 13@@ -246,7 +249,8 @@ void finish_transfer(char *fname, char *
81486408 14 ret == -2 ? "copy" : "rename",
fe6407b5 15 full_fname(fnametmp), fname);
81486408
WD
16 do_unlink(fnametmp);
17- } else {
81486408
WD
18+ } else if (ret == 1) {
19+ /* The file got copied, so set the permissions again. */
7f2baf27
WD
20 set_perms(fname, file, NULL,
21 ok_to_set_time ? 0 : PERMS_SKIP_MTIME);
81486408 22 }
fe6407b5 23--- t_stub.c 15 May 2004 19:31:05 -0000 1.8
7b675ff5 24+++ t_stub.c 21 May 2004 08:58:01 -0000
81486408
WD
25@@ -26,6 +26,7 @@
26 * functions, so that module test harnesses can run standalone.
27 **/
28
29+int am_root = 0;
30 int modify_window = 0;
31 int module_id = -1;
54691942 32 struct exclude_list_struct server_exclude_list;
7b675ff5
WD
33--- util.c 21 May 2004 08:40:25 -0000 1.144
34+++ util.c 21 May 2004 08:58:01 -0000
35@@ -29,6 +29,7 @@
81486408
WD
36
37 extern int verbose;
7b675ff5 38 extern int dry_run;
81486408 39+extern int am_root;
7b675ff5
WD
40 extern int module_id;
41 extern int modify_window;
54691942 42 extern struct exclude_list_struct server_exclude_list;
7b675ff5 43@@ -263,6 +264,8 @@ int copy_file(char *source, char *dest,
81486408
WD
44 return -1;
45 }
46
fbcc0c79
WD
47+ if (!am_root && !(mode & S_IWUSR))
48+ mode |= S_IWUSR;
81486408
WD
49 ofd = do_open(dest, O_WRONLY | O_CREAT | O_TRUNC | O_EXCL, mode);
50 if (ofd == -1) {
fe6407b5 51 rsyserr(FERROR, errno, "open %s", full_fname(dest));
7b675ff5 52@@ -361,8 +364,8 @@ int robust_unlink(char *fname)
81486408
WD
53 #endif
54 }
55
56-/* Returns 0 on success, -1 on most errors, and -2 if we got an error
57- * trying to copy the file across file systems. */
58+/* Returns 0 on successful rename, 1 if we successfully copied the file
59+ * across filesystems, -2 if copy_file() failed, and -1 on other errors. */
60 int robust_rename(char *from, char *to, int mode)
61 {
62 int tries = 4;
7b675ff5 63@@ -379,10 +382,12 @@ int robust_rename(char *from, char *to,
81486408
WD
64 break;
65 #endif
66 case EXDEV:
fbcc0c79
WD
67+ if (!am_root && !(mode & S_IRUSR))
68+ do_chmod(from, (mode & CHMOD_BITS) | S_IRUSR);
81486408
WD
69 if (copy_file(from, to, mode) != 0)
70 return -2;
71 do_unlink(from);
72- return 0;
73+ return 1;
74 default:
75 return -1;
76 }