X-Git-Url: https://mattmccutchen.net/rsync/rsync-patches.git/blobdiff_plain/9a7eef964a2e3389ffd3537302f80ca42cfe9239..a94141d9fb91e0f615d8c888217e451904c7898e:/link-by-hash.diff diff --git a/link-by-hash.diff b/link-by-hash.diff index abd0bc5..9690fab 100644 --- a/link-by-hash.diff +++ b/link-by-hash.diff @@ -25,7 +25,7 @@ the file's name. popt/popthelp.o popt/poptparse.o --- old/hashlink.c +++ new/hashlink.c -@@ -0,0 +1,340 @@ +@@ -0,0 +1,339 @@ +/* + Copyright (C) Cronosys, LLC 2004 + @@ -255,9 +255,8 @@ the file's name. + char *linkname; + long last_fnbr; + -+ if (file->length == 0) { -+ return robust_rename(fnametmp,fname,0644); -+ } ++ if (file->length == 0) ++ return robust_rename(fnametmp, fname, NULL, 0644); + + if (do_stat(hashname, &st) == -1) { + char *dirname; @@ -269,14 +268,14 @@ the file's name. + rsyserr(FERROR, errno, "mkdir failed: %s", dirname); + free(hashname); + free(dirname); -+ return robust_rename(fnametmp,fname,0644); ++ return robust_rename(fnametmp, fname, NULL, 0644); + } + free(dirname); + + if (do_mkdir(hashname, 0755) == -1 && errno != EEXIST) { + rsyserr(FERROR, errno, "mkdir failed: %s", hashname); + free(hashname); -+ return robust_rename(fnametmp,fname,0644); ++ return robust_rename(fnametmp, fname, NULL, 0644); + } + + first = 1; @@ -337,7 +336,7 @@ the file's name. + } else { + rsyserr(FERROR, errno, "link \"%s\" -> \"%s\"", + linkname, full_fname(fname)); -+ rc = robust_rename(fnametmp,fname,0644); ++ rc = robust_rename(fnametmp, fname, NULL, 0644); + } + } else { + do_unlink(fnametmp); @@ -348,7 +347,7 @@ the file's name. + rprintf(FINFO, "link-by-hash (new): %s -> \"%s\"\n", + full_fname(fname),linkname); + -+ rc = robust_rename(fnametmp,fname,0644); ++ rc = robust_rename(fnametmp, fname, NULL, 0644); + if (rc != 0) { + rsyserr(FERROR, errno, "rename \"%s\" -> \"%s\"", + full_fname(fnametmp), full_fname(fname)); @@ -393,7 +392,7 @@ the file's name. OPT_SERVER, OPT_REFUSED_BASE = 9000}; static struct poptOption long_options[] = { -@@ -478,6 +480,7 @@ static struct poptOption long_options[] +@@ -477,6 +479,7 @@ static struct poptOption long_options[] {"compare-dest", 0, POPT_ARG_STRING, 0, OPT_COMPARE_DEST, 0, 0 }, {"copy-dest", 0, POPT_ARG_STRING, 0, OPT_COPY_DEST, 0, 0 }, {"link-dest", 0, POPT_ARG_STRING, 0, OPT_LINK_DEST, 0, 0 }, @@ -401,7 +400,7 @@ the file's name. {"fuzzy", 'y', POPT_ARG_NONE, &fuzzy_basis, 0, 0, 0 }, {"compress", 'z', POPT_ARG_NONE, 0, 'z', 0, 0 }, {"compress-level", 0, POPT_ARG_INT, &def_compress_level, 'z', 0, 0 }, -@@ -1057,6 +1060,21 @@ int parse_arguments(int *argc, const cha +@@ -1062,6 +1065,21 @@ int parse_arguments(int *argc, const cha usage(FINFO); exit_cleanup(0); @@ -423,7 +422,7 @@ the file's name. default: /* A large opt value means that set_refuse_options() * turned this option off. */ -@@ -1706,6 +1724,11 @@ void server_options(char **args,int *arg +@@ -1710,6 +1728,11 @@ void server_options(char **args,int *arg } } @@ -437,7 +436,7 @@ the file's name. args[ac++] = "--files-from"; --- old/receiver.c +++ new/receiver.c -@@ -54,6 +54,7 @@ extern int delay_updates; +@@ -53,6 +53,7 @@ extern int delay_updates; extern struct stats stats; extern char *log_format; extern char *tmpdir; @@ -445,7 +444,7 @@ the file's name. extern char *partial_dir; extern char *basis_dir[]; extern struct file_list *the_file_list; -@@ -186,12 +187,13 @@ static int get_tmpname(char *fnametmp, c +@@ -124,12 +125,13 @@ static int get_tmpname(char *fnametmp, c static int receive_data(int f_in, char *fname_r, int fd_r, OFF_T size_r, @@ -460,7 +459,7 @@ the file's name. int32 len; OFF_T offset = 0; OFF_T offset2; -@@ -211,6 +213,9 @@ static int receive_data(int f_in, char * +@@ -149,6 +151,9 @@ static int receive_data(int f_in, char * } else mapbuf = NULL; @@ -470,25 +469,25 @@ the file's name. sum_init(checksum_seed); if (append_mode) { -@@ -253,6 +258,8 @@ static int receive_data(int f_in, char * +@@ -191,6 +196,8 @@ static int receive_data(int f_in, char * cleanup_got_literal = 1; sum_update(data, i); + if (md4) -+ mdfour_update(&mdfour_data,data,i); ++ mdfour_update(&mdfour_data, (uchar*)data, i); if (fd != -1 && write_file(fd,data,i) != i) goto report_write_error; -@@ -279,6 +286,8 @@ static int receive_data(int f_in, char * +@@ -217,6 +224,8 @@ static int receive_data(int f_in, char * see_token(map, len); sum_update(map, len); + if (md4) -+ mdfour_update(&mdfour_data,map,len); ++ mdfour_update(&mdfour_data, (uchar*)map, len); } if (inplace) { -@@ -319,6 +328,8 @@ static int receive_data(int f_in, char * +@@ -257,6 +266,8 @@ static int receive_data(int f_in, char * } sum_end(file_sum1); @@ -497,7 +496,7 @@ the file's name. if (mapbuf) unmap_file(mapbuf); -@@ -334,7 +345,7 @@ static int receive_data(int f_in, char * +@@ -272,7 +283,7 @@ static int receive_data(int f_in, char * static void discard_receive_data(int f_in, OFF_T length) { @@ -506,7 +505,7 @@ the file's name. } static void handle_delayed_updates(struct file_list *flist, char *local_name) -@@ -666,8 +677,12 @@ int recv_files(int f_in, struct file_lis +@@ -604,8 +615,12 @@ int recv_files(int f_in, struct file_lis rprintf(FINFO, "%s\n", fname); /* recv file data */ @@ -525,12 +524,12 @@ the file's name. @@ -49,6 +49,7 @@ extern int inplace; extern int keep_dirlinks; extern int make_backups; - extern struct stats stats; + extern mode_t orig_umask; +extern char *link_by_hash_dir; + extern struct stats stats; + extern struct chmod_mode_struct *daemon_chmod_modes; - #if defined HAVE_ICONV_OPEN && defined HAVE_ICONV_H - iconv_t ic_chck = (iconv_t)-1; -@@ -257,8 +258,15 @@ void finish_transfer(char *fname, char * +@@ -269,8 +270,15 @@ void finish_transfer(char *fname, char * /* move tmp file over real file */ if (verbose > 2) rprintf(FINFO, "renaming %s to %s\n", fnametmp, fname); @@ -567,7 +566,7 @@ the file's name. #include "byteorder.h" --- old/rsync.yo +++ new/rsync.yo -@@ -361,6 +361,7 @@ to the detailed description below for a +@@ -363,6 +363,7 @@ to the detailed description below for a --compare-dest=DIR also compare received files relative to DIR --copy-dest=DIR ... and include copies of unchanged files --link-dest=DIR hardlink to files in DIR when unchanged