X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/98ae8c3e383d4939e1293d3da7ad8298a80502eb..0a25de67e99a5eee1b35b0e5ddb359f9a3500ce4:/rsync.c diff --git a/rsync.c b/rsync.c index 7776ed0e..c1ce0b5c 100644 --- a/rsync.c +++ b/rsync.c @@ -384,10 +384,10 @@ void recv_generator(char *fname,struct file_list *flist,int i,int f_out) } statret = -1; } - if (statret != 0 && mkdir(fname,file->mode) != 0 && errno != EEXIST) { + if (statret != 0 && do_mkdir(fname,file->mode) != 0 && errno != EEXIST) { if (!(relative_paths && errno==ENOENT && create_directory_path(fname)==0 && - mkdir(fname,file->mode)==0)) { + do_mkdir(fname,file->mode)==0)) { fprintf(FERROR,"mkdir %s : %s (2)\n", fname,strerror(errno)); } @@ -561,7 +561,7 @@ static int receive_data(int f_in,struct map_struct *buf,int fd,char *fname) sum_update(data,i); - if (fd != -1 && write_sparse(fd,data,i) != i) { + if (fd != -1 && write_file(fd,data,i) != i) { fprintf(FERROR,"write failed on %s : %s\n",fname,strerror(errno)); exit_cleanup(1); } @@ -582,7 +582,7 @@ static int receive_data(int f_in,struct map_struct *buf,int fd,char *fname) see_token(map, len); sum_update(map,len); - if (fd != -1 && write_sparse(fd,map,len) != len) { + if (fd != -1 && write_file(fd,map,len) != len) { fprintf(FERROR,"write failed on %s : %s\n",fname,strerror(errno)); exit_cleanup(1); } @@ -649,6 +649,8 @@ static int delete_already_done(struct file_list *flist,int j) exit_cleanup(1); } + name[strlen(name)-2] = 0; + p = strrchr(name,'/'); if (!p) { free(name); @@ -656,6 +658,8 @@ static int delete_already_done(struct file_list *flist,int j) } *p = 0; + strcat(name,"/."); + while (low != high) { int mid = (low+high)/2; int ret = strcmp(f_name(flist->files[flist_up(flist, mid)]),name); @@ -703,6 +707,8 @@ static void delete_files(struct file_list *flist) if (!S_ISDIR(flist->files[j]->mode)) continue; + if (strlen(name)<2 || strcmp(name+strlen(name)-2,"/.")!=0) continue; + if (delete_already_done(flist, j)) continue; if (!(local_file_list = send_file_list(-1,1,&name))) @@ -834,7 +840,7 @@ int recv_files(int f_in,struct file_list *flist,char *local_name,int f_gen) } else { sprintf(fnametmp,"%s.XXXXXX",fname); } - if (NULL == mktemp(fnametmp)) { + if (NULL == do_mktemp(fnametmp)) { fprintf(FERROR,"mktemp %s failed\n",fnametmp); receive_data(f_in,buf,-1,NULL); if (buf) unmap_file(buf); @@ -878,14 +884,14 @@ int recv_files(int f_in,struct file_list *flist,char *local_name,int f_gen) continue; } sprintf(fnamebak,"%s%s",fname,backup_suffix); - if (rename(fname,fnamebak) != 0 && errno != ENOENT) { + if (do_rename(fname,fnamebak) != 0 && errno != ENOENT) { fprintf(FERROR,"rename %s %s : %s\n",fname,fnamebak,strerror(errno)); continue; } } /* move tmp file over real file */ - if (rename(fnametmp,fname) != 0) { + if (do_rename(fnametmp,fname) != 0) { if (errno == EXDEV) { /* rename failed on cross-filesystem link. Copy the file instead. */