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
If the user specifies a small io_timeout value, lower select_timeout.
[rsync/rsync.git]
/
receiver.c
diff --git
a/receiver.c
b/receiver.c
index
1975e58
..
5d19148
100644
(file)
--- a/
receiver.c
+++ b/
receiver.c
@@
-45,21
+45,24
@@
extern int cleanup_got_literal;
extern int module_id;
extern int ignore_errors;
extern int orig_umask;
extern int module_id;
extern int ignore_errors;
extern int orig_umask;
+extern int keep_partial;
+extern int checksum_seed;
static void delete_one(char *fn, int is_dir)
{
if (!is_dir) {
if (robust_unlink(fn) != 0) {
static void delete_one(char *fn, int is_dir)
{
if (!is_dir) {
if (robust_unlink(fn) != 0) {
- r
printf(FERROR, "delete_one: unlink %s failed: %s\n
",
- full_fname(fn)
, strerror(errno)
);
+ r
syserr(FERROR, errno, "delete_one: unlink %s failed
",
+ full_fname(fn));
} else if (verbose) {
rprintf(FINFO, "deleting %s\n", fn);
}
} else {
if (do_rmdir(fn) != 0) {
if (errno != ENOTEMPTY && errno != EEXIST) {
} else if (verbose) {
rprintf(FINFO, "deleting %s\n", fn);
}
} else {
if (do_rmdir(fn) != 0) {
if (errno != ENOTEMPTY && errno != EEXIST) {
- rprintf(FERROR, "delete_one: rmdir %s failed: %s\n",
- full_fname(fn), strerror(errno));
+ rsyserr(FERROR, errno,
+ "delete_one: rmdir %s failed",
+ full_fname(fn));
}
} else if (verbose) {
rprintf(FINFO, "deleting directory %s\n", fn);
}
} else if (verbose) {
rprintf(FINFO, "deleting directory %s\n", fn);
@@
-204,7
+207,7
@@
static int receive_data(int f_in,struct map_struct *mapbuf,int fd,char *fname,
read_sum_head(f_in, &sum);
read_sum_head(f_in, &sum);
- sum_init();
+ sum_init(
checksum_seed
);
while ((i = recv_token(f_in, &data)) != 0) {
if (do_progress)
while ((i = recv_token(f_in, &data)) != 0) {
if (do_progress)
@@
-222,8
+225,8
@@
static int receive_data(int f_in,struct map_struct *mapbuf,int fd,char *fname,
sum_update(data,i);
if (fd != -1 && write_file(fd,data,i) != i) {
sum_update(data,i);
if (fd != -1 && write_file(fd,data,i) != i) {
- r
printf(FERROR, "write failed on %s: %s\n
",
- full_fname(fname)
, strerror(errno)
);
+ r
syserr(FERROR, errno, "write failed on %s
",
+ full_fname(fname));
exit_cleanup(RERR_FILEIO);
}
offset += i;
exit_cleanup(RERR_FILEIO);
}
offset += i;
@@
-250,8
+253,8
@@
static int receive_data(int f_in,struct map_struct *mapbuf,int fd,char *fname,
}
if (fd != -1 && write_file(fd,map,len) != (int) len) {
}
if (fd != -1 && write_file(fd,map,len) != (int) len) {
- r
printf(FERROR, "write failed on %s: %s\n
",
- full_fname(fname)
, strerror(errno)
);
+ r
syserr(FERROR, errno, "write failed on %s
",
+ full_fname(fname));
exit_cleanup(RERR_FILEIO);
}
offset += len;
exit_cleanup(RERR_FILEIO);
}
offset += len;
@@
-263,8
+266,8
@@
static int receive_data(int f_in,struct map_struct *mapbuf,int fd,char *fname,
end_progress(total_size);
if (fd != -1 && offset > 0 && sparse_end(fd) != 0) {
end_progress(total_size);
if (fd != -1 && offset > 0 && sparse_end(fd) != 0) {
- r
printf(FERROR, "write failed on %s: %s\n
",
- full_fname(fname)
, strerror(errno)
);
+ r
syserr(FERROR, errno, "write failed on %s
",
+ full_fname(fname));
exit_cleanup(RERR_FILEIO);
}
exit_cleanup(RERR_FILEIO);
}
@@
-370,8
+373,8
@@
int recv_files(int f_in,struct file_list *flist,char *local_name)
}
if (fd1 != -1 && do_fstat(fd1,&st) != 0) {
}
if (fd1 != -1 && do_fstat(fd1,&st) != 0) {
- r
printf(FERROR, "fstat %s failed: %s\n
",
- full_fname(fnamecmp)
, strerror(errno)
);
+ r
syserr(FERROR, errno, "fstat %s failed
",
+ full_fname(fnamecmp));
receive_data(f_in,NULL,-1,NULL,file->length);
close(fd1);
continue;
receive_data(f_in,NULL,-1,NULL,file->length);
close(fd1);
continue;
@@
-435,8
+438,8
@@
int recv_files(int f_in,struct file_list *flist,char *local_name)
fd2 = do_mkstemp(fnametmp, file->mode & INITACCESSPERMS);
}
if (fd2 == -1) {
fd2 = do_mkstemp(fnametmp, file->mode & INITACCESSPERMS);
}
if (fd2 == -1) {
- r
printf(FERROR, "mkstemp %s failed: %s\n
",
- full_fname(fnametmp)
, strerror(errno)
);
+ r
syserr(FERROR, errno, "mkstemp %s failed
",
+ full_fname(fnametmp));
receive_data(f_in,mapbuf,-1,NULL,file->length);
if (mapbuf) unmap_file(mapbuf);
if (fd1 != -1) close(fd1);
receive_data(f_in,mapbuf,-1,NULL,file->length);
if (mapbuf) unmap_file(mapbuf);
if (fd1 != -1) close(fd1);
@@
-459,15
+462,18
@@
int recv_files(int f_in,struct file_list *flist,char *local_name)
close(fd1);
}
if (close(fd2) < 0) {
close(fd1);
}
if (close(fd2) < 0) {
- r
printf(FERROR, "close failed on %s: %s\n
",
- full_fname(fnametmp)
, strerror(errno)
);
+ r
syserr(FERROR, errno, "close failed on %s
",
+ full_fname(fnametmp));
exit_cleanup(RERR_FILEIO);
}
if (verbose > 2)
rprintf(FINFO,"renaming %s to %s\n",fnametmp,fname);
exit_cleanup(RERR_FILEIO);
}
if (verbose > 2)
rprintf(FINFO,"renaming %s to %s\n",fnametmp,fname);
- finish_transfer(fname, fnametmp, file);
+ if (recv_ok || keep_partial)
+ finish_transfer(fname, fnametmp, file, recv_ok);
+ else
+ do_unlink(fnametmp);
cleanup_disable();
cleanup_disable();