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
Calls to make_bak_dir() should only happen when we fail to create a
[rsync/rsync.git]
/
receiver.c
diff --git
a/receiver.c
b/receiver.c
index
da89819
..
1975e58
100644
(file)
--- a/
receiver.c
+++ b/
receiver.c
@@
-23,12
+23,15
@@
extern int verbose;
extern int recurse;
extern int delete_mode;
extern int verbose;
extern int recurse;
extern int delete_mode;
+extern int delete_after;
+extern int max_delete;
extern int csum_length;
extern struct stats stats;
extern int dry_run;
extern int am_server;
extern int relative_paths;
extern int preserve_hard_links;
extern int csum_length;
extern struct stats stats;
extern int dry_run;
extern int am_server;
extern int relative_paths;
extern int preserve_hard_links;
+extern int preserve_perms;
extern int cvs_exclude;
extern int io_error;
extern char *tmpdir;
extern int cvs_exclude;
extern int io_error;
extern char *tmpdir;
@@
-39,6
+42,9
@@
extern char *backup_dir;
extern char *backup_suffix;
extern int backup_suffix_len;
extern int cleanup_got_literal;
extern char *backup_suffix;
extern int backup_suffix_len;
extern int cleanup_got_literal;
+extern int module_id;
+extern int ignore_errors;
+extern int orig_umask;
static void delete_one(char *fn, int is_dir)
{
static void delete_one(char *fn, int is_dir)
{
@@
-69,17
+75,13
@@
static int is_backup_file(char *fn)
}
}
-/* this deletes any files on the receiving side that are not present
- * on the sending side. For version 1.6.4 I have changed the behaviour
- * to match more closely what most people seem to expect of this option */
+/* This deletes any files on the receiving side that are not present
+ * on the sending side. */
void delete_files(struct file_list *flist)
{
struct file_list *local_file_list;
int i, j;
char *argv[1], fbuf[MAXPATHLEN];
void delete_files(struct file_list *flist)
{
struct file_list *local_file_list;
int i, j;
char *argv[1], fbuf[MAXPATHLEN];
- extern int module_id;
- extern int ignore_errors;
- extern int max_delete;
static int deletion_count;
if (cvs_exclude)
static int deletion_count;
if (cvs_exclude)
@@
-90,7
+92,7
@@
void delete_files(struct file_list *flist)
return;
}
return;
}
- for (j = 0;j < flist->count; j++) {
+ for (j = 0;
j < flist->count; j++) {
if (!(flist->files[j]->flags & FLAG_TOP_DIR)
|| !S_ISDIR(flist->files[j]->mode))
continue;
if (!(flist->files[j]->flags & FLAG_TOP_DIR)
|| !S_ISDIR(flist->files[j]->mode))
continue;
@@
-101,12
+103,14
@@
void delete_files(struct file_list *flist)
continue;
if (verbose > 1)
continue;
if (verbose > 1)
- rprintf(FINFO,"deleting in %s\n", fbuf);
+ rprintf(FINFO,
"deleting in %s\n", fbuf);
for (i = local_file_list->count-1; i >= 0; i--) {
for (i = local_file_list->count-1; i >= 0; i--) {
- if (max_delete && deletion_count > max_delete) break;
- if (!local_file_list->files[i]->basename) continue;
- if (-1 == flist_find(flist,local_file_list->files[i])) {
+ if (max_delete && deletion_count > max_delete)
+ break;
+ if (!local_file_list->files[i]->basename)
+ continue;
+ if (flist_find(flist,local_file_list->files[i]) < 0) {
char *f = f_name(local_file_list->files[i]);
if (make_backups && (backup_dir || !is_backup_file(f))) {
(void) make_backup(f);
char *f = f_name(local_file_list->files[i]);
if (make_backups && (backup_dir || !is_backup_file(f))) {
(void) make_backup(f);
@@
-295,16
+299,17
@@
int recv_files(int f_in,struct file_list *flist,char *local_name)
struct file_struct *file;
int phase=0;
int recv_ok;
struct file_struct *file;
int phase=0;
int recv_ok;
- extern struct stats stats;
- extern int preserve_perms;
- extern int delete_after;
- extern int orig_umask;
struct stats initial_stats;
if (verbose > 2) {
rprintf(FINFO,"recv_files(%d) starting\n",flist->count);
}
struct stats initial_stats;
if (verbose > 2) {
rprintf(FINFO,"recv_files(%d) starting\n",flist->count);
}
+ if (flist->hlink_pool) {
+ pool_destroy(flist->hlink_pool);
+ flist->hlink_pool = NULL;
+ }
+
while (1) {
cleanup_disable();
while (1) {
cleanup_disable();
@@
-356,7
+361,7
@@
int recv_files(int f_in,struct file_list *flist,char *local_name)
/* open the file */
fd1 = do_open(fnamecmp, O_RDONLY, 0);
/* open the file */
fd1 = do_open(fnamecmp, O_RDONLY, 0);
- if (
(fd1 == -1) && (compare_dest != NULL)
) {
+ if (
fd1 == -1 && compare_dest != NULL
) {
/* try the file at compare_dest instead */
pathjoin(fnamecmpbuf, sizeof fnamecmpbuf,
compare_dest, fname);
/* try the file at compare_dest instead */
pathjoin(fnamecmpbuf, sizeof fnamecmpbuf,
compare_dest, fname);
@@
-453,7
+458,11
@@
int recv_files(int f_in,struct file_list *flist,char *local_name)
if (fd1 != -1) {
close(fd1);
}
if (fd1 != -1) {
close(fd1);
}
- close(fd2);
+ if (close(fd2) < 0) {
+ rprintf(FERROR, "close failed on %s: %s\n",
+ full_fname(fnametmp), strerror(errno));
+ exit_cleanup(RERR_FILEIO);
+ }
if (verbose > 2)
rprintf(FINFO,"renaming %s to %s\n",fnametmp,fname);
if (verbose > 2)
rprintf(FINFO,"renaming %s to %s\n",fnametmp,fname);