extern int block_size;
extern int csum_length;
extern int ignore_times;
+extern int size_only;
extern int io_timeout;
extern int remote_version;
extern int always_checksum;
if (always_checksum && S_ISREG(st->st_mode)) {
char sum[MD4_SUM_LENGTH];
file_checksum(fname,sum,st->st_size);
- return (memcmp(sum,file->sum,csum_length) == 0);
+ if (remote_version < 21) {
+ return (memcmp(sum,file->sum,2) == 0);
+ } else {
+ return (memcmp(sum,file->sum,MD4_SUM_LENGTH) == 0);
+ }
+ }
+
+ if (size_only) {
+ return 1;
}
if (ignore_times) {
static void send_sums(struct sum_struct *s,int f_out)
{
int i;
-
- /* tell the other guy how many we are going to be doing and how many
- bytes there are in the last chunk */
+
+ /* tell the other guy how many we are going to be doing and how many
+ bytes there are in the last chunk */
write_int(f_out,s?s->count:0);
write_int(f_out,s?s->n:block_size);
write_int(f_out,s?s->remainder:0);
- if (s)
- for (i=0;i<s->count;i++) {
- write_int(f_out,s->sums[i].sum1);
- write_buf(f_out,s->sums[i].sum2,csum_length);
- }
+
+ if (!s) return;
+
+ for (i=0;i<s->count;i++) {
+ write_int(f_out,s->sums[i].sum1);
+ write_buf(f_out,s->sums[i].sum2,csum_length);
+ }
}
if (S_ISDIR(file->mode)) {
if (dry_run) return;
if (statret == 0 && !S_ISDIR(st.st_mode)) {
- if (do_unlink(fname) != 0) {
+ if (robust_unlink(fname) != 0) {
rprintf(FERROR,"unlink %s : %s\n",fname,strerror(errno));
return;
}
if ((statret == -1) && (compare_dest != NULL)) {
/* try the file at compare_dest instead */
int saveerrno = errno;
- slprintf(fnamecmpbuf,MAXPATHLEN-1,"%s/%s",compare_dest,fname);
+ slprintf(fnamecmpbuf,MAXPATHLEN,"%s/%s",compare_dest,fname);
statret = link_stat(fnamecmpbuf,&st);
if (!S_ISREG(st.st_mode))
statret = -1;
}
if (skip_file(fname, file, &st)) {
- set_perms(fname,file,&st,1);
+ if (fnamecmp == fname)
+ set_perms(fname,file,&st,1);
return;
}