diff options
| author | David Dykstra <dwd@samba.org> | 2003-01-21 00:58:50 +0000 |
|---|---|---|
| committer | David Dykstra <dwd@samba.org> | 2003-01-21 00:58:50 +0000 |
| commit | f0b4fdaf5e542135b6f1d5694550208cbd6fe9ec (patch) | |
| tree | c8b397d80dc0934f65a2bcfa76965d65858b6825 /syscall.c | |
| parent | ac6ce983752fcf749ee9aa4da88271a47ebbab3a (diff) | |
| download | android_external_rsync-f0b4fdaf5e542135b6f1d5694550208cbd6fe9ec.tar.gz android_external_rsync-f0b4fdaf5e542135b6f1d5694550208cbd6fe9ec.tar.bz2 android_external_rsync-f0b4fdaf5e542135b6f1d5694550208cbd6fe9ec.zip | |
Ignore errors from chmod when --preserve-perms/-p/-a are not set.
Gnu cp behaves the same way.
Diffstat (limited to 'syscall.c')
| -rw-r--r-- | syscall.c | 9 |
1 files changed, 7 insertions, 2 deletions
@@ -29,6 +29,7 @@ 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;} @@ -97,9 +98,13 @@ int do_open(char *pathname, int flags, mode_t mode) #if HAVE_CHMOD int do_chmod(const char *path, mode_t mode) { + int code; 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 @@ -150,7 +155,7 @@ int do_mkstemp(char *template, mode_t perms) { 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; |
