added some more debug info to the "EOF in map_ptr" error message to
[rsync/rsync.git] / util.c
diff --git a/util.c b/util.c
index 644553e..3ecd812 100644 (file)
--- a/util.c
+++ b/util.c
@@ -55,6 +55,8 @@ struct map_struct *map_file(int fd,off_t len)
 
 char *map_ptr(struct map_struct *map,off_t offset,int len)
 {
+  int nread = -2;
+
   if (map->map)
     return map->map+offset;
 
@@ -79,8 +81,9 @@ char *map_ptr(struct map_struct *map,off_t offset,int len)
   }
 
   if (lseek(map->fd,offset,SEEK_SET) != offset ||
-      read(map->fd,map->p,len) != len) {
-    fprintf(FERROR,"EOF in map_ptr!\n");
+      (nread=read(map->fd,map->p,len)) != len) {
+    fprintf(FERROR,"EOF in map_ptr! (offset=%d len=%d nread=%d errno=%d)\n",
+           (int)offset, len, nread, errno);
     exit_cleanup(1);
   }
 
@@ -131,6 +134,8 @@ int piped_child(char **command,int *f_in,int *f_out)
        fprintf(FERROR,"Failed to dup/close : %s\n",strerror(errno));
        exit_cleanup(1);
       }
+      if (to_child_pipe[0] != STDIN_FILENO) close(to_child_pipe[0]);
+      if (from_child_pipe[1] != STDOUT_FILENO) close(from_child_pipe[1]);
       execvp(command[0], command);
       fprintf(FERROR,"Failed to exec %s : %s\n",
              command[0],strerror(errno));