- for (;;) {
- unsigned char lu[2], dbuf[255];
- r= fread(lu,1,2,comms); if (r!=2) die_badrecv(comms,"RLE8 elem hdr");
- if (!lu[0] && !lu[1]) break;
- if (lu[0]) {
- if (!lastfile) die_protocol("first RLE8 requests some previous");
- r= fread(dbuf,1,lu[0],lastfile);
- if (r!=lu[0]) {
- if (ferror(lastfile)) diee("could not read current (old) file"
- " `%s'", filename);
- assert(feof(lastfile));
- die_protocol("RLE8 requests more previous than is available");
- }
- receiver_write(dbuf,lu[0],newfile,tmpfilename);
- }
- if (lu[1]) {
- r= fread(dbuf,1,lu[1],comms);
- if (r!=lu[1]) die_badrecv(comms,"RLE8 literal data");
- receiver_write(dbuf,lu[1],newfile,tmpfilename);
- }
- }
- if (fflush(newfile)) diee("could not flush temporary receiving file"
- " `%s'", tmpfilename);
+ uint8_t lbuf[8];
+ r= fread(lbuf,1,8,commsi); if (r!=8) die_badrecv("FILE64 l");
+
+ uint64_t l=
+ (lbuf[0] << 28 << 28) |
+ (lbuf[1] << 24 << 24) |
+ (lbuf[2] << 16 << 24) |
+ (lbuf[3] << 8 << 24) |
+ (lbuf[4] << 24) |
+ (lbuf[5] << 16) |
+ (lbuf[6] << 8) |
+ (lbuf[7] ) ;
+
+ copyfile(commsi, copydie_commsi,"FILE64 file data",
+ newfile, copydie_tmpwrite,tmpfilename,
+ l);
+
+ if (fclose(newfile)) diee("could not flush and close temporary"
+ " receiving file `%s'", tmpfilename);