Added a check for ftruncate.
[rsync/rsync.git] / generator.c
index b896892..72b6905 100644 (file)
@@ -47,10 +47,12 @@ extern int link_dest;
 extern int whole_file;
 extern int local_server;
 extern int list_only;
+extern int read_batch;
 extern int only_existing;
 extern int orig_umask;
 extern int safe_symlinks;
 extern unsigned int block_size;
+extern unsigned int max_map_size;
 
 extern struct exclude_list_struct server_exclude_list;
 
@@ -161,7 +163,9 @@ static void sum_sizes_sqroot(struct sum_struct *sum, uint64 len)
                        c >>= 1;
                } while (c >= 8);       /* round to multiple of 8 */
                blength = MAX(blength, BLOCK_SIZE);
+               blength = MIN(blength, MAX_MAP_SIZE);
        }
+       max_map_size = MIN(MAX_MAP_SIZE, blength * 32);
 
        if (protocol_version < 27) {
                s2length = csum_length;
@@ -205,7 +209,7 @@ static void sum_sizes_sqroot(struct sum_struct *sum, uint64 len)
  *
  * Generate approximately one checksum every block_len bytes.
  */
-static void generate_and_send_sums(struct map_struct *buf, size_t len, int f_out)
+static void generate_and_send_sums(struct map_struct *buf, OFF_T len, int f_out)
 {
        size_t i;
        struct sum_struct sum;
@@ -326,6 +330,9 @@ static void recv_generator(char *fname, struct file_struct *file, int i,
                return;
        }
 
+       if (read_batch)
+               return;
+
        if (preserve_links && S_ISLNK(file->mode)) {
 #if SUPPORT_LINKS
                char lnk[MAXPATHLEN];