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
Renamed mkrounding.c to rounding.c.
[rsync/rsync.git]
/
generator.c
diff --git
a/generator.c
b/generator.c
index
530c274
..
35cbb57
100644
(file)
--- a/
generator.c
+++ b/
generator.c
@@
-84,6
+84,7
@@
extern int list_only;
extern int read_batch;
extern int safe_symlinks;
extern long block_size; /* "long" because popt can't set an int32. */
extern int read_batch;
extern int safe_symlinks;
extern long block_size; /* "long" because popt can't set an int32. */
+extern int unsort_ndx;
extern int max_delete;
extern int force_delete;
extern int one_file_system;
extern int max_delete;
extern int force_delete;
extern int one_file_system;
@@
-95,9
+96,6
@@
extern char *backup_suffix;
extern int backup_suffix_len;
extern struct file_list *cur_flist, *first_flist, *dir_flist;
extern struct filter_list_struct server_filter_list;
extern int backup_suffix_len;
extern struct file_list *cur_flist, *first_flist, *dir_flist;
extern struct filter_list_struct server_filter_list;
-#ifdef ICONV_OPTION
-extern int ic_ndx;
-#endif
int ignore_perishable = 0;
int non_perishable_cnt = 0;
int ignore_perishable = 0;
int non_perishable_cnt = 0;
@@
-198,7
+196,7
@@
static enum delret delete_item(char *fbuf, int mode, char *replace, int flags)
check_ret:
if (replace && ret != DR_SUCCESS) {
check_ret:
if (replace && ret != DR_SUCCESS) {
- rprintf(FERROR, "could not make way for new %s: %s\n",
+ rprintf(FERROR
_XFER
, "could not make way for new %s: %s\n",
replace, fbuf);
}
return ret;
replace, fbuf);
}
return ret;
@@
-517,6
+515,14
@@
static void do_delete_pass(void)
int unchanged_attrs(const char *fname, struct file_struct *file, stat_x *sxp)
{
int unchanged_attrs(const char *fname, struct file_struct *file, stat_x *sxp)
{
+#ifndef HAVE_LUTIMES
+ if (S_ISLNK(file->mode)) {
+ ;
+ } else
+#endif
+ if (preserve_times && cmp_time(sxp->st.st_mtime, file->modtime) != 0)
+ return 0;
+
if (preserve_perms && !BITS_EQUAL(sxp->st.st_mode, file->mode, CHMOD_BITS))
return 0;
if (preserve_perms && !BITS_EQUAL(sxp->st.st_mode, file->mode, CHMOD_BITS))
return 0;
@@
-835,7
+841,7
@@
static int copy_altdest_file(const char *src, const char *dest, struct file_stru
{
char buf[MAXPATHLEN];
const char *copy_to, *partialptr;
{
char buf[MAXPATHLEN];
const char *copy_to, *partialptr;
- int fd_w;
+ int
ok,
fd_w;
if (inplace) {
/* Let copy_file open the destination in place. */
if (inplace) {
/* Let copy_file open the destination in place. */
@@
-859,11
+865,9
@@
static int copy_altdest_file(const char *src, const char *dest, struct file_stru
return -1;
}
partialptr = partial_dir ? partial_dir_fname(dest) : NULL;
return -1;
}
partialptr = partial_dir ? partial_dir_fname(dest) : NULL;
- if (partialptr && *partialptr == '/')
- partialptr = NULL;
- finish_transfer(dest, copy_to, src, partialptr, file, 1, 0);
+ ok = finish_transfer(dest, copy_to, src, partialptr, file, 1, 0);
cleanup_disable();
cleanup_disable();
- return
0
;
+ return
ok ? 0 : -1
;
}
/* This is only called for regular files. We return -2 if we've finished
}
/* This is only called for regular files. We return -2 if we've finished
@@
-895,9
+899,6
@@
static int try_dests_reg(struct file_struct *file, char *fname, int ndx,
case 2:
if (!unchanged_attrs(cmpbuf, file, sxp))
continue;
case 2:
if (!unchanged_attrs(cmpbuf, file, sxp))
continue;
- if (always_checksum > 0 && preserve_times
- && cmp_time(sxp->st.st_mtime, file->modtime))
- continue;
best_match = j;
match_level = 3;
break;
best_match = j;
match_level = 3;
break;
@@
-1079,7
+1080,7
@@
static int try_dests_non(struct file_struct *file, char *fname, int ndx,
#endif
&& !S_ISDIR(file->mode)) {
if (do_link(cmpbuf, fname) < 0) {
#endif
&& !S_ISDIR(file->mode)) {
if (do_link(cmpbuf, fname) < 0) {
- rsyserr(FERROR, errno,
+ rsyserr(FERROR
_XFER
, errno,
"failed to hard-link %s with %s",
cmpbuf, fname);
return j;
"failed to hard-link %s with %s",
cmpbuf, fname);
return j;
@@
-1236,7
+1237,7
@@
static void recv_generator(char *fname, struct file_struct *file, int ndx,
if (relative_paths && !implied_dirs
&& do_stat(dn, &sx.st) < 0
&& create_directory_path(fname) < 0) {
if (relative_paths && !implied_dirs
&& do_stat(dn, &sx.st) < 0
&& create_directory_path(fname) < 0) {
- rsyserr(FERROR, errno,
+ rsyserr(FERROR
_XFER
, errno,
"recv_generator: mkdir %s failed",
full_fname(dn));
}
"recv_generator: mkdir %s failed",
full_fname(dn));
}
@@
-1339,7
+1340,7
@@
static void recv_generator(char *fname, struct file_struct *file, int ndx,
if (!relative_paths || errno != ENOENT
|| create_directory_path(fname) < 0
|| (do_mkdir(fname, file->mode) < 0 && errno != EEXIST)) {
if (!relative_paths || errno != ENOENT
|| create_directory_path(fname) < 0
|| (do_mkdir(fname, file->mode) < 0 && errno != EEXIST)) {
- rsyserr(FERROR, errno,
+ rsyserr(FERROR
_XFER
, errno,
"recv_generator: mkdir %s failed",
full_fname(fname));
skipping_dir_contents:
"recv_generator: mkdir %s failed",
full_fname(fname));
skipping_dir_contents:
@@
-1362,7
+1363,7
@@
static void recv_generator(char *fname, struct file_struct *file, int ndx,
if (!am_root && !(file->mode & S_IWUSR) && dir_tweaking) {
mode_t mode = file->mode | S_IWUSR;
if (do_chmod(fname, mode) < 0) {
if (!am_root && !(file->mode & S_IWUSR) && dir_tweaking) {
mode_t mode = file->mode | S_IWUSR;
if (do_chmod(fname, mode) < 0) {
- rsyserr(FERROR, errno,
+ rsyserr(FERROR
_XFER
, errno,
"failed to modify permissions on %s",
full_fname(fname));
}
"failed to modify permissions on %s",
full_fname(fname));
}
@@
-1424,7
+1425,7
@@
static void recv_generator(char *fname, struct file_struct *file, int ndx,
set_file_attrs(fname, file, &sx, NULL, maybe_ATTRS_REPORT);
if (itemizing)
itemize(fname, file, ndx, 0, &sx, 0, 0, NULL);
set_file_attrs(fname, file, &sx, NULL, maybe_ATTRS_REPORT);
if (itemizing)
itemize(fname, file, ndx, 0, &sx, 0, 0, NULL);
-#if
def SUPPORT_HARD_LINKS
+#if
defined SUPPORT_HARD_LINKS && defined CAN_HARDLINK_SYMLINK
if (preserve_hard_links && F_IS_HLINKED(file))
finish_hard_link(file, fname, ndx, &sx.st, itemizing, code, -1);
#endif
if (preserve_hard_links && F_IS_HLINKED(file))
finish_hard_link(file, fname, ndx, &sx.st, itemizing, code, -1);
#endif
@@
-1459,7
+1460,7
@@
static void recv_generator(char *fname, struct file_struct *file, int ndx,
}
#endif
if (do_symlink(sl, fname) != 0) {
}
#endif
if (do_symlink(sl, fname) != 0) {
- rsyserr(FERROR, errno, "symlink %s -> \"%s\" failed",
+ rsyserr(FERROR
_XFER
, errno, "symlink %s -> \"%s\" failed",
full_fname(fname), sl);
} else {
set_file_attrs(fname, file, NULL, NULL, 0);
full_fname(fname), sl);
} else {
set_file_attrs(fname, file, NULL, NULL, 0);
@@
-1543,7
+1544,7
@@
static void recv_generator(char *fname, struct file_struct *file, int ndx,
(long)major(rdev), (long)minor(rdev));
}
if (do_mknod(fname, file->mode, rdev) < 0) {
(long)major(rdev), (long)minor(rdev));
}
if (do_mknod(fname, file->mode, rdev) < 0) {
- rsyserr(FERROR, errno, "mknod %s failed",
+ rsyserr(FERROR
_XFER
, errno, "mknod %s failed",
full_fname(fname));
} else {
set_file_attrs(fname, file, NULL, NULL, 0);
full_fname(fname));
} else {
set_file_attrs(fname, file, NULL, NULL, 0);
@@
-1661,7
+1662,7
@@
static void recv_generator(char *fname, struct file_struct *file, int ndx,
#endif
if (stat_errno == ENOENT)
goto notify_others;
#endif
if (stat_errno == ENOENT)
goto notify_others;
- rsyserr(FERROR, stat_errno, "recv_generator: failed to stat %s",
+ rsyserr(FERROR
_XFER
, stat_errno, "recv_generator: failed to stat %s",
full_fname(fname));
goto cleanup;
}
full_fname(fname));
goto cleanup;
}
@@
-1751,7
+1752,7
@@
static void recv_generator(char *fname, struct file_struct *file, int ndx,
goto pretend_missing;
}
if (robust_unlink(backupptr) && errno != ENOENT) {
goto pretend_missing;
}
if (robust_unlink(backupptr) && errno != ENOENT) {
- rsyserr(FERROR, errno, "unlink %s",
+ rsyserr(FERROR
_XFER
, errno, "unlink %s",
full_fname(backupptr));
unmake_file(back_file);
back_file = NULL;
full_fname(backupptr));
unmake_file(back_file);
back_file = NULL;
@@
-1761,7
+1762,7
@@
static void recv_generator(char *fname, struct file_struct *file, int ndx,
if ((f_copy = do_open(backupptr, O_WRONLY | O_CREAT | O_TRUNC | O_EXCL, 0600)) < 0
&& (errno != ENOENT || make_bak_dir(backupptr) < 0
|| (f_copy = do_open(backupptr, O_WRONLY | O_CREAT | O_TRUNC | O_EXCL, 0600)) < 0)) {
if ((f_copy = do_open(backupptr, O_WRONLY | O_CREAT | O_TRUNC | O_EXCL, 0600)) < 0
&& (errno != ENOENT || make_bak_dir(backupptr) < 0
|| (f_copy = do_open(backupptr, O_WRONLY | O_CREAT | O_TRUNC | O_EXCL, 0600)) < 0)) {
- rsyserr(FERROR, errno, "open %s",
+ rsyserr(FERROR
_XFER
, errno, "open %s",
full_fname(backupptr));
unmake_file(back_file);
back_file = NULL;
full_fname(backupptr));
unmake_file(back_file);
back_file = NULL;
@@
-1957,7
+1958,7
@@
void check_for_finished_files(int itemizing, enum logcode code, int check_redo)
if (delete_during == 2 || !dir_tweaking) {
/* Skip directory touch-up. */
if (delete_during == 2 || !dir_tweaking) {
/* Skip directory touch-up. */
- } else if (first_flist->
ndx_start !
= 0)
+ } else if (first_flist->
parent_ndx >
= 0)
touch_up_dirs(dir_flist, first_flist->parent_ndx);
flist_free(first_flist); /* updates first_flist */
touch_up_dirs(dir_flist, first_flist->parent_ndx);
flist_free(first_flist); /* updates first_flist */
@@
-2032,12
+2033,12
@@
void generate_files(int f_out, const char *local_name)
}
#endif
}
#endif
- if (inc_recurse && cur_flist->
ndx_start
) {
+ if (inc_recurse && cur_flist->
parent_ndx >= 0
) {
struct file_struct *fp = dir_flist->files[cur_flist->parent_ndx];
f_name(fp, fbuf);
ndx = cur_flist->ndx_start - 1;
recv_generator(fbuf, fp, ndx, itemizing, code, f_out);
struct file_struct *fp = dir_flist->files[cur_flist->parent_ndx];
f_name(fp, fbuf);
ndx = cur_flist->ndx_start - 1;
recv_generator(fbuf, fp, ndx, itemizing, code, f_out);
- if (delete_during && dry_run < 2) {
+ if (delete_during && dry_run < 2
&& !list_only
) {
if (BITS_SETnUNSET(fp->flags, FLAG_CONTENT_DIR, FLAG_MISSING_DIR)) {
dev_t dirdev;
if (one_file_system) {
if (BITS_SETnUNSET(fp->flags, FLAG_CONTENT_DIR, FLAG_MISSING_DIR)) {
dev_t dirdev;
if (one_file_system) {
@@
-2055,11
+2056,9
@@
void generate_files(int f_out, const char *local_name)
if (!F_IS_ACTIVE(file))
continue;
if (!F_IS_ACTIVE(file))
continue;
-#ifdef ICONV_OPTION
- if (ic_ndx)
+ if (unsort_ndx)
ndx = F_NDX(file);
else
ndx = F_NDX(file);
else
-#endif
ndx = i + cur_flist->ndx_start;
if (solo_file)
ndx = i + cur_flist->ndx_start;
if (solo_file)