Matt McCutchen's Web Site
/
rsync
/
rsync.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Added current_file_index.
[rsync/rsync.git]
/
syscall.c
diff --git
a/syscall.c
b/syscall.c
index
b198dbf
..
dbde033
100644
(file)
--- a/
syscall.c
+++ b/
syscall.c
@@
-29,6
+29,7
@@
extern int dry_run;
extern int read_only;
extern int list_only;
extern int dry_run;
extern int read_only;
extern int list_only;
+extern int preserve_perms;
#define CHECK_RO if (read_only || list_only) {errno = EROFS; return -1;}
#define CHECK_RO if (read_only || list_only) {errno = EROFS; return -1;}
@@
-84,22
+85,22
@@
int do_open(char *pathname, int flags, mode_t mode)
if (dry_run) return -1;
CHECK_RO
}
if (dry_run) return -1;
CHECK_RO
}
-#ifdef O_BINARY
- /* for Windows */
- flags |= O_BINARY;
-#endif
/* some systems can't handle a double / */
if (pathname[0] == '/' && pathname[1] == '/') pathname++;
/* some systems can't handle a double / */
if (pathname[0] == '/' && pathname[1] == '/') pathname++;
- return open(pathname, flags, mode);
+ return open(pathname, flags
| O_BINARY
, mode);
}
#if HAVE_CHMOD
int do_chmod(const char *path, mode_t mode)
{
}
#if HAVE_CHMOD
int do_chmod(const char *path, mode_t mode)
{
+ int code;
if (dry_run) return 0;
CHECK_RO
if (dry_run) return 0;
CHECK_RO
- return chmod(path, mode);
+ code = chmod(path, mode);
+ if ((code != 0) && preserve_perms)
+ return code;
+ return 0;
}
#endif
}
#endif
@@
-150,7
+151,7
@@
int do_mkstemp(char *template, mode_t perms)
{
int fd = mkstemp(template);
if (fd == -1) return -1;
{
int fd = mkstemp(template);
if (fd == -1) return -1;
- if (
fchmod(fd, perms) != 0
) {
+ if (
(fchmod(fd, perms) != 0) && preserve_perms
) {
close(fd);
unlink(template);
return -1;
close(fd);
unlink(template);
return -1;