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); |
} |
} |