X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/112d728f4858fef5c75e0b25bf6f02af8aa5b83c..c09af06d0c8f29e294c097740f71c9eaed0b04ae:/io.c diff --git a/io.c b/io.c index 05a755fb..d5d117fa 100644 --- a/io.c +++ b/io.c @@ -85,23 +85,11 @@ static int select_timeout = SELECT_TIMEOUT; static int active_filecnt = 0; static OFF_T active_bytecnt = 0; -static char int_byte_cnt[256] = { - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* 00 - 0F */ - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* 10 - 1F */ - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* 20 - 2F */ - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* 30 - 3F */ - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* 40 - 4F */ - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* 50 - 5F */ - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* 60 - 6F */ - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* 70 - 7F */ - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, /* 80 - 8F */ - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, /* 90 - 9F */ - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, /* A0 - AF */ - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, /* B0 - BF */ - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* C0 - CF */ - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, /* D0 - DF */ - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, /* E0 - EF */ - 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 9, 9, 9, 9, /* F0 - FF */ +static char int_byte_cnt[64] = { + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* (00 - 3F)/4 */ + 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, /* (40 - 7F)/4 */ + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, /* (80 - BF)/4 */ + 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 8, 9, /* (C0 - FF)/4 */ }; static void read_loop(int fd, char *buf, size_t len); @@ -302,11 +290,13 @@ static void read_msg_fd(void) flist_ndx_push(&hlink_list, IVAL(buf,0)); break; case MSG_SOCKERR: + case MSG_CLIENT: if (!am_generator) { rprintf(FERROR, "invalid message %d:%d\n", tag, len); exit_cleanup(RERR_STREAMIO); } - close_multiplexing_out(); + if (tag == MSG_SOCKERR) + close_multiplexing_out(); /* FALL THROUGH */ case MSG_INFO: case MSG_ERROR: @@ -336,8 +326,10 @@ void increment_active_files(int ndx, int itemizing, enum logcode code) { /* TODO: tune these limits? */ while (active_filecnt >= (active_bytecnt >= 128*1024 ? 10 : 50)) { +#ifdef SUPPORT_HARD_LINKS if (hlink_list.head) check_for_finished_hlinks(itemizing, code); +#endif read_msg_fd(); } @@ -415,8 +407,10 @@ void send_msg_int(enum msgcode code, int num) int get_redo_num(int itemizing, enum logcode code) { while (1) { +#ifdef SUPPORT_HARD_LINKS if (hlink_list.head) check_for_finished_hlinks(itemizing, code); +#endif if (redo_list.head) break; read_msg_fd(); @@ -923,7 +917,7 @@ int64 read_longint(int f) } else { int cnt; readfd(f, b, 3); - cnt = int_byte_cnt[CVAL(b, 0)]; + cnt = int_byte_cnt[CVAL(b, 0) / 4]; #if SIZEOF_INT64 < 8 if (cnt > 5 || (cnt == 5 && (CVAL(b,0)&0x3F || CVAL(b,1)&0x80))) { rprintf(FERROR, "Integer overflow: attempted 64-bit offset\n"); @@ -1542,8 +1536,6 @@ void close_multiplexing_out(void) void start_write_batch(int fd) { - write_stream_flags(batch_fd); - /* Some communication has already taken place, but we don't * enable batch writing until here so that we can write a * canonical record of the communication even though the