|
|
| version 1.1.1.2, 2013/10/14 07:51:14 | version 1.1.1.3, 2016/11/01 09:54:32 |
|---|---|
| Line 3 | Line 3 |
| * | * |
| * Copyright (C) 1996 Andrew Tridgell | * Copyright (C) 1996 Andrew Tridgell |
| * Copyright (C) 1996 Paul Mackerras | * Copyright (C) 1996 Paul Mackerras |
| * Copyright (C) 2003-2013 Wayne Davison | * Copyright (C) 2003-2015 Wayne Davison |
| * | * |
| * This program is free software; you can redistribute it and/or modify | * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License as published by | * it under the terms of the GNU General Public License as published by |
| Line 23 | Line 23 |
| #include "itypes.h" | #include "itypes.h" |
| #include <zlib.h> | #include <zlib.h> |
| #ifndef Z_INSERT_ONLY | |
| #define Z_INSERT_ONLY Z_SYNC_FLUSH | |
| #endif | |
| extern int do_compression; | extern int do_compression; |
| extern int protocol_version; | extern int protocol_version; |
| extern int module_id; | extern int module_id; |
| Line 406 send_deflated_token(int f, int32 token, struct map_str | Line 402 send_deflated_token(int f, int32 token, struct map_str |
| if (token == -1) { | if (token == -1) { |
| /* end of file - clean up */ | /* end of file - clean up */ |
| write_byte(f, END_FLAG); | write_byte(f, END_FLAG); |
| } else if (token != -2) { | } else if (token != -2 && do_compression == 1) { |
| /* Add the data in the current block to the compressor's | /* Add the data in the current block to the compressor's |
| * history and hash table. */ | * history and hash table. */ |
| #ifndef EXTERNAL_ZLIB | |
| do { | do { |
| /* Break up long sections in the same way that | /* Break up long sections in the same way that |
| * see_deflate_token() does. */ | * see_deflate_token() does. */ |
| Line 418 send_deflated_token(int f, int32 token, struct map_str | Line 415 send_deflated_token(int f, int32 token, struct map_str |
| tx_strm.avail_in = n1; | tx_strm.avail_in = n1; |
| if (protocol_version >= 31) /* Newer protocols avoid a data-duplicating bug */ | if (protocol_version >= 31) /* Newer protocols avoid a data-duplicating bug */ |
| offset += n1; | offset += n1; |
| do { | tx_strm.next_out = (Bytef *) obuf; |
| tx_strm.next_out = (Bytef *) obuf; | tx_strm.avail_out = AVAIL_OUT_SIZE(CHUNK_SIZE); |
| tx_strm.avail_out = AVAIL_OUT_SIZE(CHUNK_SIZE); | r = deflate(&tx_strm, Z_INSERT_ONLY); |
| r = deflate(&tx_strm, Z_INSERT_ONLY); | if (r != Z_OK || tx_strm.avail_in != 0) { |
| if (r != Z_OK) { | rprintf(FERROR, "deflate on token returned %d (%d bytes left)\n", |
| rprintf(FERROR, "deflate on token returned %d (%d bytes left)\n", | r, tx_strm.avail_in); |
| r, tx_strm.avail_in); | exit_cleanup(RERR_STREAMIO); |
| exit_cleanup(RERR_STREAMIO); | } |
| } | |
| } while (tx_strm.avail_in != 0); | |
| } while (toklen > 0); | } while (toklen > 0); |
| #else | |
| toklen++; | |
| rprintf(FERROR, "Impossible error in external-zlib code (1).\n"); | |
| exit_cleanup(RERR_STREAMIO); | |
| #endif | |
| } | } |
| } | } |
| Line 579 static int32 recv_deflated_token(int f, char **data) | Line 579 static int32 recv_deflated_token(int f, char **data) |
| */ | */ |
| static void see_deflate_token(char *buf, int32 len) | static void see_deflate_token(char *buf, int32 len) |
| { | { |
| #ifndef EXTERNAL_ZLIB | |
| int r; | int r; |
| int32 blklen; | int32 blklen; |
| unsigned char hdr[5]; | unsigned char hdr[5]; |
| Line 616 static void see_deflate_token(char *buf, int32 len) | Line 617 static void see_deflate_token(char *buf, int32 len) |
| exit_cleanup(RERR_STREAMIO); | exit_cleanup(RERR_STREAMIO); |
| } | } |
| } while (len || rx_strm.avail_out == 0); | } while (len || rx_strm.avail_out == 0); |
| #else | |
| buf++; len++; | |
| rprintf(FERROR, "Impossible error in external-zlib code (2).\n"); | |
| exit_cleanup(RERR_STREAMIO); | |
| #endif | |
| } | } |
| /** | /** |
| Line 655 int32 recv_token(int f, char **data) | Line 661 int32 recv_token(int f, char **data) |
| */ | */ |
| void see_token(char *data, int32 toklen) | void see_token(char *data, int32 toklen) |
| { | { |
| if (do_compression) | if (do_compression == 1) |
| see_deflate_token(data, toklen); | see_deflate_token(data, toklen); |
| } | } |