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
Made the FLAG_MOUNT_DIR bit only honored on a directory.
[rsync/rsync.git]
/
generator.c
diff --git
a/generator.c
b/generator.c
index
4ec0ac4
..
10500a9
100644
(file)
--- a/
generator.c
+++ b/
generator.c
@@
-279,7
+279,7
@@
static enum delret delete_dir_contents(char *fname, uint16 flags)
for (j = dirlist->used; j--; ) {
struct file_struct *fp = dirlist->files[j];
for (j = dirlist->used; j--; ) {
struct file_struct *fp = dirlist->files[j];
- if (fp->flags & FLAG_MOUNT_DIR) {
+ if (fp->flags & FLAG_MOUNT_DIR
&& S_ISDIR(fp->mode)
) {
if (verbose > 1) {
rprintf(FINFO,
"mount point, %s, pins parent directory\n",
if (verbose > 1) {
rprintf(FINFO,
"mount point, %s, pins parent directory\n",
@@
-511,7
+511,7
@@
static void delete_in_dir(char *fbuf, struct file_struct *file, dev_t *fs_dev)
struct file_struct *fp = dirlist->files[i];
if (!F_IS_ACTIVE(fp))
continue;
struct file_struct *fp = dirlist->files[i];
if (!F_IS_ACTIVE(fp))
continue;
- if (fp->flags & FLAG_MOUNT_DIR) {
+ if (fp->flags & FLAG_MOUNT_DIR
&& S_ISDIR(fp->mode)
) {
if (verbose > 1)
rprintf(FINFO, "cannot delete mount point: %s\n",
f_name(fp, NULL));
if (verbose > 1)
rprintf(FINFO, "cannot delete mount point: %s\n",
f_name(fp, NULL));
@@
-1358,6
+1358,13
@@
static void recv_generator(char *fname, struct file_struct *file, int ndx,
&& !am_root && sx.st.st_uid == our_uid)
del_opts |= DEL_NO_UID_WRITE;
&& !am_root && sx.st.st_uid == our_uid)
del_opts |= DEL_NO_UID_WRITE;
+ if (ignore_existing > 0 && statret == 0
+ && (!is_dir || !S_ISDIR(sx.st.st_mode))) {
+ if (verbose > 1 && is_dir >= 0)
+ rprintf(FINFO, "%s exists\n", fname);
+ goto cleanup;
+ }
+
if (is_dir) {
if (!implied_dirs && file->flags & FLAG_IMPLIED_DIR)
goto cleanup;
if (is_dir) {
if (!implied_dirs && file->flags & FLAG_IMPLIED_DIR)
goto cleanup;
@@
-1663,12
+1670,6
@@
static void recv_generator(char *fname, struct file_struct *file, int ndx,
goto cleanup;
}
goto cleanup;
}
- if (ignore_existing > 0 && statret == 0) {
- if (verbose > 1)
- rprintf(FINFO, "%s exists\n", fname);
- goto cleanup;
- }
-
if (update_only > 0 && statret == 0
&& cmp_time(sx.st.st_mtime, file->modtime) > 0) {
if (verbose > 1)
if (update_only > 0 && statret == 0
&& cmp_time(sx.st.st_mtime, file->modtime) > 0) {
if (verbose > 1)
@@
-1742,9
+1743,6
@@
static void recv_generator(char *fname, struct file_struct *file, int ndx,
goto cleanup;
}
goto cleanup;
}
- if (append_mode > 0 && sx.st.st_size >= F_LENGTH(file))
- goto cleanup;
-
if (fnamecmp_type <= FNAMECMP_BASIS_DIR_HIGH)
;
else if (fnamecmp_type == FNAMECMP_FUZZY)
if (fnamecmp_type <= FNAMECMP_BASIS_DIR_HIGH)
;
else if (fnamecmp_type == FNAMECMP_FUZZY)
@@
-1769,6
+1767,10
@@
static void recv_generator(char *fname, struct file_struct *file, int ndx,
goto cleanup;
}
goto cleanup;
}
+ if (append_mode > 0 && sx.st.st_size >= F_LENGTH(file)) {
+ goto cleanup;
+ }
+
prepare_to_open:
if (partialptr) {
sx.st = partial_st;
prepare_to_open:
if (partialptr) {
sx.st = partial_st;