Use the new diff-dependency feature to make the patch depend on
authorWayne Davison <wayned@samba.org>
Sat, 3 Jul 2004 21:22:30 +0000 (21:22 +0000)
committerWayne Davison <wayned@samba.org>
Sat, 3 Jul 2004 21:22:30 +0000 (21:22 +0000)
g2r-basis-filename.diff.  Updated the format using the new
verify-patches script.

compare-dest.diff
fuzzy.diff

index 88ae3dc..c01c3ca 100644 (file)
@@ -1,3 +1,5 @@
+Depends-On-Patch: g2r-basis-filename.diff
+
 This patch allows multiple --compare-dest or --link-dest options to be
 used, making the transfer of some files more optimal.  Note that the
 algorithm does NOT search for the best match -- it stops at the first
 This patch allows multiple --compare-dest or --link-dest options to be
 used, making the transfer of some files more optimal.  Note that the
 algorithm does NOT search for the best match -- it stops at the first
@@ -7,8 +9,8 @@ they are suppled).
 
 Before compiling, be sure to run "make proto".
 
 
 Before compiling, be sure to run "make proto".
 
---- generator.c        30 Jun 2004 07:27:30 -0000      1.93
-+++ generator.c        30 Jun 2004 07:40:25 -0000
+--- orig/generator.c   2004-07-03 20:08:07
++++ generator.c        2004-07-03 20:14:37
 @@ -42,7 +42,7 @@ extern int size_only;
  extern int io_timeout;
  extern int protocol_version;
 @@ -42,7 +42,7 @@ extern int size_only;
  extern int io_timeout;
  extern int protocol_version;
@@ -37,16 +39,7 @@ Before compiling, be sure to run "make proto".
                }
                file_checksum(fname,sum,st->st_size);
                return memcmp(sum, file->u.sum, protocol_version < 21 ? 2
                }
                file_checksum(fname,sum,st->st_size);
                return memcmp(sum, file->u.sum, protocol_version < 21 ? 2
-@@ -267,7 +266,7 @@ static void generate_and_send_sums(struc
-  * out.  It might be wrong.
-  */
- static void recv_generator(char *fname, struct file_struct *file, int i,
--                         int f_out)
-+                         int f_out, int f_nameout)
- {
-       int fd;
-       STRUCT_STAT st;
-@@ -424,15 +423,22 @@ static void recv_generator(char *fname, 
+@@ -424,13 +423,18 @@ static void recv_generator(char *fname, 
  
        fnamecmp = fname;
  
  
        fnamecmp = fname;
  
@@ -58,7 +51,6 @@ Before compiling, be sure to run "make proto".
 -              statret = link_stat(fnamecmpbuf, &st, 0);
 -              if (!S_ISREG(st.st_mode))
 -                      statret = -1;
 -              statret = link_stat(fnamecmpbuf, &st, 0);
 -              if (!S_ISREG(st.st_mode))
 -                      statret = -1;
--              if (statret == -1)
 +              int i;
 +              for (i = 0; compare_dest[i] != NULL; i++) {
 +                      pathjoin(fnamecmpbuf, sizeof fnamecmpbuf, compare_dest[i], fname);
 +              int i;
 +              for (i = 0; compare_dest[i] != NULL; i++) {
 +                      pathjoin(fnamecmpbuf, sizeof fnamecmpbuf, compare_dest[i], fname);
@@ -68,203 +60,11 @@ Before compiling, be sure to run "make proto".
 +                              statret = -1;
 +                      }
 +              }
 +                              statret = -1;
 +                      }
 +              }
-+              if (statret < 0) {
+               if (statret < 0) {
                        errno = saveerrno;
                        errno = saveerrno;
-+                      *fnamecmpbuf = '\0';
-+              }
- #if HAVE_LINK
-               else if (link_dest && !dry_run) {
-                       if (do_link(fnamecmpbuf, fname) != 0) {
-@@ -440,18 +446,22 @@ static void recv_generator(char *fname, 
-                                       rsyserr(FINFO, errno, "link %s => %s",
-                                               fnamecmpbuf, fname);
-                               }
--                      }
--                      fnamecmp = fnamecmpbuf;
-+                              fnamecmp = fnamecmpbuf;
-+                      } else
-+                              *fnamecmpbuf = '\0';
-               }
- #endif
-               else
-                       fnamecmp = fnamecmpbuf;
--      }
-+      } else
-+              *fnamecmpbuf = '\0';
-       if (statret == -1) {
-               if (preserve_hard_links && hard_link_check(file, HL_SKIP))
-                       return;
-               if (errno == ENOENT) {
-+                      if (f_nameout >= 0)
-+                              write(f_nameout, "", 1);
-                       write_int(f_out,i);
-                       if (!dry_run)
-                               write_sum_head(f_out, NULL);
-@@ -471,19 +481,21 @@ static void recv_generator(char *fname, 
-               /* now pretend the file didn't exist */
-               if (preserve_hard_links && hard_link_check(file, HL_SKIP))
-                       return;
-+              if (f_nameout >= 0)
-+                      write(f_nameout, "", 1);
-               write_int(f_out,i);
-               if (!dry_run)
-                       write_sum_head(f_out, NULL);
-               return;
-       }
--      if (opt_ignore_existing && fnamecmp == fname) {
-+      if (opt_ignore_existing && !*fnamecmpbuf) {
-               if (verbose > 1)
-                       rprintf(FINFO,"%s exists\n",fname);
-               return;
-       }
--      if (update_only && fnamecmp == fname
-+      if (update_only && !*fnamecmpbuf
-           && cmp_modtime(st.st_mtime, file->modtime) > 0) {
-               if (verbose > 1)
-                       rprintf(FINFO,"%s is newer\n",fname);
-@@ -491,17 +503,21 @@ static void recv_generator(char *fname, 
-       }
-       if (skip_file(fname, file, &st)) {
--              if (fnamecmp == fname)
-+              if (!*fnamecmpbuf)
-                       set_perms(fname, file, &st, PERMS_REPORT);
-               return;
-       }
-       if (dry_run) {
-+              if (f_nameout >= 0)
-+                      write(f_nameout, "", 1);
-               write_int(f_out,i);
-               return;
-       }
-       if (disable_deltas_p()) {
-+              if (f_nameout >= 0)
-+                      write(f_nameout, "", 1);
-               write_int(f_out,i);
-               write_sum_head(f_out, NULL);
-               return;
-@@ -516,6 +532,8 @@ static void recv_generator(char *fname, 
-               /* pretend the file didn't exist */
-               if (preserve_hard_links && hard_link_check(file, HL_SKIP))
-                       return;
-+              if (f_nameout >= 0)
-+                      write(f_nameout, "", 1);
-               write_int(f_out,i);
-               write_sum_head(f_out, NULL);
-               return;
-@@ -534,6 +552,8 @@ static void recv_generator(char *fname, 
-       if (verbose > 2)
-               rprintf(FINFO, "generating and sending sums for %d\n", i);
-+      if (f_nameout >= 0)
-+              write(f_nameout, fnamecmpbuf, strlen(fnamecmpbuf) + 1);
-       write_int(f_out,i);
-       generate_and_send_sums(mapbuf, st.st_size, f_out);
-@@ -543,7 +563,8 @@ static void recv_generator(char *fname, 
- }
--void generate_files(int f, struct file_list *flist, char *local_name)
-+void generate_files(int f, struct file_list *flist, char *local_name,
-+                  int f_nameout)
- {
-       int i;
-       int phase = 0;
-@@ -584,7 +605,7 @@ void generate_files(int f, struct file_l
-               }
-               recv_generator(local_name ? local_name : f_name_to(file, fbuf),
--                             file, i, f);
-+                             file, i, f, f_nameout);
-       }
-       phase++;
-@@ -601,7 +622,7 @@ void generate_files(int f, struct file_l
-       while ((i = get_redo_num()) != -1) {
-               struct file_struct *file = flist->files[i];
-               recv_generator(local_name ? local_name : f_name_to(file, fbuf),
--                             file, i, f);
-+                             file, i, f, f_nameout);
-       }
-       phase++;
-@@ -620,7 +641,7 @@ void generate_files(int f, struct file_l
-               if (!file->basename || !S_ISDIR(file->mode))
-                       continue;
-               recv_generator(local_name ? local_name : f_name(file),
--                             file, i, -1);
-+                             file, i, -1, -1);
-       }
-       if (verbose > 2)
---- main.c     30 Jun 2004 07:27:30 -0000      1.202
-+++ main.c     30 Jun 2004 07:40:25 -0000
-@@ -429,7 +429,7 @@ static int do_recv(int f_in,int f_out,st
- {
-       int pid;
-       int status = 0;
--      int error_pipe[2];
-+      int error_pipe[2], name_pipe[2];
-       if (preserve_hard_links)
-               init_hard_links(flist);
-@@ -441,8 +441,8 @@ static int do_recv(int f_in,int f_out,st
-               }
-       }
--      if (fd_pair(error_pipe) < 0) {
--              rprintf(FERROR,"error pipe failed in do_recv\n");
-+      if (fd_pair(error_pipe) < 0 || fd_pair(name_pipe) < 0) {
-+              rprintf(FERROR, "fd_pair() failed in do_recv\n");
-               exit_cleanup(RERR_SOCKETIO);
-       }
-@@ -450,8 +450,10 @@ static int do_recv(int f_in,int f_out,st
-       if ((pid = do_fork()) == 0) {
-               close(error_pipe[0]);
-+              close(name_pipe[1]);
-               if (f_in != f_out)
-                       close(f_out);
-+              set_blocking(name_pipe[0]);
-               /* we can't let two processes write to the socket at one time */
-               io_multiplexing_close();
-@@ -459,7 +461,7 @@ static int do_recv(int f_in,int f_out,st
-               /* set place to send errors */
-               set_msg_fd_out(error_pipe[1]);
--              recv_files(f_in,flist,local_name);
-+              recv_files(f_in, flist, local_name, name_pipe[0]);
-               io_flush(FULL_FLUSH);
-               report(f_in);
-@@ -475,14 +477,16 @@ static int do_recv(int f_in,int f_out,st
-       am_generator = 1;
-       close(error_pipe[1]);
-+      close(name_pipe[0]);
-       if (f_in != f_out)
-               close(f_in);
-+      set_blocking(name_pipe[1]);
-       io_start_buffering_out(f_out);
-       set_msg_fd_in(error_pipe[0]);
--      generate_files(f_out, flist, local_name);
-+      generate_files(f_out, flist, local_name, name_pipe[1]);
-       get_redo_num(); /* Read final MSG_DONE and any prior messages. */
-       report(-1);
---- options.c  20 Jun 2004 19:47:05 -0000      1.157
-+++ options.c  30 Jun 2004 07:40:26 -0000
+                       *fnamecmpbuf = '\0';
+--- orig/options.c     2004-06-20 19:30:00
++++ options.c  2004-07-03 17:33:30
 @@ -117,7 +117,8 @@ unsigned int backup_dir_remainder;
  
  char *backup_suffix = NULL;
 @@ -117,7 +117,8 @@ unsigned int backup_dir_remainder;
  
  char *backup_suffix = NULL;
@@ -391,8 +191,8 @@ Before compiling, be sure to run "make proto".
        }
  
        if (files_from && (!am_sender || remote_filesfrom_file)) {
        }
  
        if (files_from && (!am_sender || remote_filesfrom_file)) {
---- receiver.c 30 Jun 2004 07:27:30 -0000      1.84
-+++ receiver.c 30 Jun 2004 07:40:26 -0000
+--- orig/receiver.c    2004-07-03 20:08:07
++++ receiver.c 2004-07-03 20:14:37
 @@ -36,7 +36,6 @@ extern int preserve_perms;
  extern int cvs_exclude;
  extern int io_error;
 @@ -36,7 +36,6 @@ extern int preserve_perms;
  extern int cvs_exclude;
  extern int io_error;
@@ -401,64 +201,8 @@ Before compiling, be sure to run "make proto".
  extern int make_backups;
  extern int do_progress;
  extern char *backup_dir;
  extern int make_backups;
  extern int do_progress;
  extern char *backup_dir;
-@@ -293,14 +292,15 @@ static int receive_data(int f_in,struct 
-  * main routine for receiver process.
-  *
-  * Receiver process runs on the same host as the generator process. */
--int recv_files(int f_in,struct file_list *flist,char *local_name)
-+int recv_files(int f_in, struct file_list *flist, char *local_name,
-+             int f_name)
- {
-       int fd1,fd2;
-       STRUCT_STAT st;
-       char *fname, fbuf[MAXPATHLEN];
-       char template[MAXPATHLEN];
-       char fnametmp[MAXPATHLEN];
--      char *fnamecmp;
-+      char *fnamecmp, *cp;
-       char fnamecmpbuf[MAXPATHLEN];
-       struct map_struct *mapbuf;
-       struct file_struct *file;
-@@ -364,19 +364,19 @@ int recv_files(int f_in,struct file_list
-               if (verbose > 2)
-                       rprintf(FINFO,"recv_files(%s)\n",fname);
--              fnamecmp = fname;
-+              for (cp = fnamecmpbuf; ; cp++) {
-+                      if (read(f_name, cp, 1) <= 0) {
-+                              rsyserr(FERROR, errno, "fname-pipe read failed");
-+                              exit_cleanup(RERR_PROTOCOL);
-+                      }
-+                      if (!*cp)
-+                              break;
-+              }
-+              fnamecmp = *fnamecmpbuf ? fnamecmpbuf : fname;
-               /* open the file */
-               fd1 = do_open(fnamecmp, O_RDONLY, 0);
--              if (fd1 == -1 && compare_dest != NULL) {
--                      /* try the file at compare_dest instead */
--                      pathjoin(fnamecmpbuf, sizeof fnamecmpbuf,
--                               compare_dest, fname);
--                      fnamecmp = fnamecmpbuf;
--                      fd1 = do_open(fnamecmp, O_RDONLY, 0);
--              }
--
-               if (fd1 != -1 && do_fstat(fd1,&st) != 0) {
-                       rsyserr(FERROR, errno, "fstat %s failed",
-                               full_fname(fnamecmp));
-@@ -385,7 +385,7 @@ int recv_files(int f_in,struct file_list
-                       continue;
-               }
--              if (fd1 != -1 && S_ISDIR(st.st_mode) && fnamecmp == fname) {
-+              if (fd1 != -1 && S_ISDIR(st.st_mode) && !*fnamecmpbuf) {
-                       /* this special handling for directories
-                        * wouldn't be necessary if robust_rename()
-                        * and the underlying robust_unlink could cope
---- rsync.h    16 May 2004 07:28:24 -0000      1.204
-+++ rsync.h    30 Jun 2004 07:40:26 -0000
+--- orig/rsync.h       2004-05-16 07:58:12
++++ rsync.h    2004-07-03 17:33:30
 @@ -98,6 +98,8 @@
  
  #define MAX_ARGS 1000
 @@ -98,6 +98,8 @@
  
  #define MAX_ARGS 1000
index 0a31901..ebdbae4 100644 (file)
@@ -1,11 +1,13 @@
-Wayne Davison wrote:
+Depends-On-Patch: g2r-basis-filename.diff
 
 
-I greatly simplified the changes to generator.c, making the patch
+The changes to generator.c were greatly simplified, making the patch
 easier to maintain and fixing the failing test in the testsuite.
 Very lightly tested.
 
 easier to maintain and fixing the failing test in the testsuite.
 Very lightly tested.
 
---- generator.c        30 Jun 2004 07:27:30 -0000      1.93
-+++ generator.c        30 Jun 2004 07:43:46 -0000
+Be sure to run "make proto" before "make".
+
+--- orig/generator.c   2004-07-03 20:08:07
++++ generator.c        2004-07-03 20:09:05
 @@ -41,6 +41,7 @@ extern int ignore_times;
  extern int size_only;
  extern int io_timeout;
 @@ -41,6 +41,7 @@ extern int ignore_times;
  extern int size_only;
  extern int io_timeout;
@@ -109,13 +111,7 @@ Very lightly tested.
  
  /*
   * Acts on file number @p i from @p flist, whose name is @p fname.
  
  /*
   * Acts on file number @p i from @p flist, whose name is @p fname.
-@@ -267,12 +356,12 @@ static void generate_and_send_sums(struc
-  * out.  It might be wrong.
-  */
- static void recv_generator(char *fname, struct file_struct *file, int i,
--                         int f_out)
-+                         int f_out, int f_nameout)
- {
+@@ -272,7 +361,7 @@ static void recv_generator(char *fname, 
        int fd;
        STRUCT_STAT st;
        struct map_struct *mapbuf;
        int fd;
        STRUCT_STAT st;
        struct map_struct *mapbuf;
@@ -124,216 +120,32 @@ Very lightly tested.
        char *fnamecmp;
        char fnamecmpbuf[MAXPATHLEN];
  
        char *fnamecmp;
        char fnamecmpbuf[MAXPATHLEN];
  
-@@ -431,8 +520,10 @@ static void recv_generator(char *fname, 
-               statret = link_stat(fnamecmpbuf, &st, 0);
-               if (!S_ISREG(st.st_mode))
-                       statret = -1;
--              if (statret == -1)
-+              if (statret < 0) {
-                       errno = saveerrno;
-+                      *fnamecmpbuf = '\0';
-+              }
- #if HAVE_LINK
-               else if (link_dest && !dry_run) {
-                       if (do_link(fnamecmpbuf, fname) != 0) {
-@@ -440,18 +531,30 @@ static void recv_generator(char *fname, 
-                                       rsyserr(FINFO, errno, "link %s => %s",
-                                               fnamecmpbuf, fname);
-                               }
--                      }
--                      fnamecmp = fnamecmpbuf;
-+                              fnamecmp = fnamecmpbuf;
-+                      } else
-+                              *fnamecmpbuf = '\0';
-               }
- #endif
-               else
-                       fnamecmp = fnamecmpbuf;
-+      } else
-+              *fnamecmpbuf = '\0';
-+
+@@ -452,6 +541,14 @@ static void recv_generator(char *fname, 
+       } else
+               *fnamecmpbuf = '\0';
 +      if (statret == -1 && fuzzy) {
 +              statret = find_fuzzy(&fnamecmp, fnamecmpbuf, &st);
 +              if (!S_ISREG(st.st_mode))
 +                      statret = -1;
 +              else
 +                      fuzzy_file = 1;
 +      if (statret == -1 && fuzzy) {
 +              statret = find_fuzzy(&fnamecmp, fnamecmpbuf, &st);
 +              if (!S_ISREG(st.st_mode))
 +                      statret = -1;
 +              else
 +                      fuzzy_file = 1;
-       }
++      }
++
        if (statret == -1) {
                if (preserve_hard_links && hard_link_check(file, HL_SKIP))
                        return;
        if (statret == -1) {
                if (preserve_hard_links && hard_link_check(file, HL_SKIP))
                        return;
-               if (errno == ENOENT) {
-+                      if (f_nameout >= 0)
-+                              write(f_nameout, "", 1);
-                       write_int(f_out,i);
-                       if (!dry_run)
-                               write_sum_head(f_out, NULL);
-@@ -471,37 +574,43 @@ static void recv_generator(char *fname, 
-               /* now pretend the file didn't exist */
-               if (preserve_hard_links && hard_link_check(file, HL_SKIP))
-                       return;
-+              if (f_nameout >= 0)
-+                      write(f_nameout, "", 1);
-               write_int(f_out,i);
-               if (!dry_run)
-                       write_sum_head(f_out, NULL);
-               return;
-       }
--      if (opt_ignore_existing && fnamecmp == fname) {
-+      if (opt_ignore_existing && !*fnamecmpbuf) {
-               if (verbose > 1)
-                       rprintf(FINFO,"%s exists\n",fname);
-               return;
-       }
--      if (update_only && fnamecmp == fname
-+      if (update_only && !*fnamecmpbuf
-           && cmp_modtime(st.st_mtime, file->modtime) > 0) {
-               if (verbose > 1)
-                       rprintf(FINFO,"%s is newer\n",fname);
+@@ -498,7 +595,7 @@ static void recv_generator(char *fname, 
                return;
        }
  
 -      if (skip_file(fname, file, &st)) {
                return;
        }
  
 -      if (skip_file(fname, file, &st)) {
--              if (fnamecmp == fname)
 +      if (!fuzzy_file && skip_file(fname, file, &st)) {
 +      if (!fuzzy_file && skip_file(fname, file, &st)) {
-+              if (!*fnamecmpbuf)
+               if (!*fnamecmpbuf)
                        set_perms(fname, file, &st, PERMS_REPORT);
                return;
                        set_perms(fname, file, &st, PERMS_REPORT);
                return;
-       }
-       if (dry_run) {
-+              if (f_nameout >= 0)
-+                      write(f_nameout, "", 1);
-               write_int(f_out,i);
-               return;
-       }
-       if (disable_deltas_p()) {
-+              if (f_nameout >= 0)
-+                      write(f_nameout, "", 1);
-               write_int(f_out,i);
-               write_sum_head(f_out, NULL);
-               return;
-@@ -516,6 +625,8 @@ static void recv_generator(char *fname, 
-               /* pretend the file didn't exist */
-               if (preserve_hard_links && hard_link_check(file, HL_SKIP))
-                       return;
-+              if (f_nameout >= 0)
-+                      write(f_nameout, "", 1);
-               write_int(f_out,i);
-               write_sum_head(f_out, NULL);
-               return;
-@@ -534,6 +645,8 @@ static void recv_generator(char *fname, 
-       if (verbose > 2)
-               rprintf(FINFO, "generating and sending sums for %d\n", i);
-+      if (f_nameout >= 0)
-+              write(f_nameout, fnamecmpbuf, strlen(fnamecmpbuf) + 1);
-       write_int(f_out,i);
-       generate_and_send_sums(mapbuf, st.st_size, f_out);
-@@ -543,7 +656,8 @@ static void recv_generator(char *fname, 
- }
--void generate_files(int f, struct file_list *flist, char *local_name)
-+void generate_files(int f, struct file_list *flist, char *local_name,
-+                  int f_nameout)
- {
-       int i;
-       int phase = 0;
-@@ -584,7 +698,7 @@ void generate_files(int f, struct file_l
-               }
-               recv_generator(local_name ? local_name : f_name_to(file, fbuf),
--                             file, i, f);
-+                             file, i, f, f_nameout);
-       }
-       phase++;
-@@ -601,7 +715,7 @@ void generate_files(int f, struct file_l
-       while ((i = get_redo_num()) != -1) {
-               struct file_struct *file = flist->files[i];
-               recv_generator(local_name ? local_name : f_name_to(file, fbuf),
--                             file, i, f);
-+                             file, i, f, f_nameout);
-       }
-       phase++;
-@@ -620,7 +734,7 @@ void generate_files(int f, struct file_l
-               if (!file->basename || !S_ISDIR(file->mode))
-                       continue;
-               recv_generator(local_name ? local_name : f_name(file),
--                             file, i, -1);
-+                             file, i, -1, -1);
-       }
-       if (verbose > 2)
---- main.c     30 Jun 2004 07:27:30 -0000      1.202
-+++ main.c     30 Jun 2004 07:43:47 -0000
-@@ -429,7 +429,7 @@ static int do_recv(int f_in,int f_out,st
- {
-       int pid;
-       int status = 0;
--      int error_pipe[2];
-+      int error_pipe[2], name_pipe[2];
-       if (preserve_hard_links)
-               init_hard_links(flist);
-@@ -441,8 +441,8 @@ static int do_recv(int f_in,int f_out,st
-               }
-       }
--      if (fd_pair(error_pipe) < 0) {
--              rprintf(FERROR,"error pipe failed in do_recv\n");
-+      if (fd_pair(error_pipe) < 0 || fd_pair(name_pipe) < 0) {
-+              rprintf(FERROR, "fd_pair() failed in do_recv\n");
-               exit_cleanup(RERR_SOCKETIO);
-       }
-@@ -450,8 +450,10 @@ static int do_recv(int f_in,int f_out,st
-       if ((pid = do_fork()) == 0) {
-               close(error_pipe[0]);
-+              close(name_pipe[1]);
-               if (f_in != f_out)
-                       close(f_out);
-+              set_blocking(name_pipe[0]);
-               /* we can't let two processes write to the socket at one time */
-               io_multiplexing_close();
-@@ -459,7 +461,7 @@ static int do_recv(int f_in,int f_out,st
-               /* set place to send errors */
-               set_msg_fd_out(error_pipe[1]);
--              recv_files(f_in,flist,local_name);
-+              recv_files(f_in, flist, local_name, name_pipe[0]);
-               io_flush(FULL_FLUSH);
-               report(f_in);
-@@ -475,14 +477,16 @@ static int do_recv(int f_in,int f_out,st
-       am_generator = 1;
-       close(error_pipe[1]);
-+      close(name_pipe[0]);
-       if (f_in != f_out)
-               close(f_in);
-+      set_blocking(name_pipe[1]);
-       io_start_buffering_out(f_out);
-       set_msg_fd_in(error_pipe[0]);
--      generate_files(f_out, flist, local_name);
-+      generate_files(f_out, flist, local_name, name_pipe[1]);
-       get_redo_num(); /* Read final MSG_DONE and any prior messages. */
-       report(-1);
---- options.c  20 Jun 2004 19:47:05 -0000      1.157
-+++ options.c  30 Jun 2004 07:43:47 -0000
+--- orig/options.c     2004-06-20 19:30:00
++++ options.c  2004-07-03 19:27:25
 @@ -94,6 +94,7 @@ int ignore_errors = 0;
  int modify_window = 0;
  int blocking_io = -1;
 @@ -94,6 +94,7 @@ int ignore_errors = 0;
  int modify_window = 0;
  int blocking_io = -1;
@@ -368,8 +180,8 @@ Very lightly tested.
        *argc = ac;
        return;
  
        *argc = ac;
        return;
  
---- receiver.c 30 Jun 2004 07:27:30 -0000      1.84
-+++ receiver.c 30 Jun 2004 07:43:47 -0000
+--- orig/receiver.c    2004-07-03 20:08:07
++++ receiver.c 2004-07-03 20:09:05
 @@ -36,7 +36,6 @@ extern int preserve_perms;
  extern int cvs_exclude;
  extern int io_error;
 @@ -36,7 +36,6 @@ extern int preserve_perms;
  extern int cvs_exclude;
  extern int io_error;
@@ -378,64 +190,8 @@ Very lightly tested.
  extern int make_backups;
  extern int do_progress;
  extern char *backup_dir;
  extern int make_backups;
  extern int do_progress;
  extern char *backup_dir;
-@@ -293,14 +292,15 @@ static int receive_data(int f_in,struct 
-  * main routine for receiver process.
-  *
-  * Receiver process runs on the same host as the generator process. */
--int recv_files(int f_in,struct file_list *flist,char *local_name)
-+int recv_files(int f_in, struct file_list *flist, char *local_name,
-+             int f_name)
- {
-       int fd1,fd2;
-       STRUCT_STAT st;
-       char *fname, fbuf[MAXPATHLEN];
-       char template[MAXPATHLEN];
-       char fnametmp[MAXPATHLEN];
--      char *fnamecmp;
-+      char *fnamecmp, *cp;
-       char fnamecmpbuf[MAXPATHLEN];
-       struct map_struct *mapbuf;
-       struct file_struct *file;
-@@ -364,19 +364,19 @@ int recv_files(int f_in,struct file_list
-               if (verbose > 2)
-                       rprintf(FINFO,"recv_files(%s)\n",fname);
--              fnamecmp = fname;
-+              for (cp = fnamecmpbuf; ; cp++) {
-+                      if (read(f_name, cp, 1) <= 0) {
-+                              rsyserr(FERROR, errno, "fname-pipe read failed");
-+                              exit_cleanup(RERR_PROTOCOL);
-+                      }
-+                      if (!*cp)
-+                              break;
-+              }
-+              fnamecmp = *fnamecmpbuf ? fnamecmpbuf : fname;
-               /* open the file */
-               fd1 = do_open(fnamecmp, O_RDONLY, 0);
--              if (fd1 == -1 && compare_dest != NULL) {
--                      /* try the file at compare_dest instead */
--                      pathjoin(fnamecmpbuf, sizeof fnamecmpbuf,
--                               compare_dest, fname);
--                      fnamecmp = fnamecmpbuf;
--                      fd1 = do_open(fnamecmp, O_RDONLY, 0);
--              }
--
-               if (fd1 != -1 && do_fstat(fd1,&st) != 0) {
-                       rsyserr(FERROR, errno, "fstat %s failed",
-                               full_fname(fnamecmp));
-@@ -385,7 +385,7 @@ int recv_files(int f_in,struct file_list
-                       continue;
-               }
--              if (fd1 != -1 && S_ISDIR(st.st_mode) && fnamecmp == fname) {
-+              if (fd1 != -1 && S_ISDIR(st.st_mode) && !*fnamecmpbuf) {
-                       /* this special handling for directories
-                        * wouldn't be necessary if robust_rename()
-                        * and the underlying robust_unlink could cope
---- rsync.yo   5 Jun 2004 16:16:30 -0000       1.171
-+++ rsync.yo   30 Jun 2004 07:43:48 -0000
+--- orig/rsync.yo      2004-06-17 06:32:00
++++ rsync.yo   2004-07-03 19:27:25
 @@ -325,6 +325,7 @@ verb(
   -T  --temp-dir=DIR          create temporary files in directory DIR
       --compare-dest=DIR      also compare received files relative to DIR
 @@ -325,6 +325,7 @@ verb(
   -T  --temp-dir=DIR          create temporary files in directory DIR
       --compare-dest=DIR      also compare received files relative to DIR