]> andersk Git - openssh.git/blobdiff - compress.c
- djm@cvs.openbsd.org 2001/12/21 10:06:43
[openssh.git] / compress.c
index e8539baf0064406d05b122d90a838f7a890167c4..73aebe89a62ba3c6c14ce77dece9746b1c158c29 100644 (file)
@@ -12,7 +12,7 @@
  */
 
 #include "includes.h"
-RCSID("$OpenBSD: compress.c,v 1.13 2001/02/08 19:30:51 itojun Exp $");
+RCSID("$OpenBSD: compress.c,v 1.16 2001/12/19 07:18:56 deraadt Exp $");
 
 #include "log.h"
 #include "buffer.h"
@@ -21,6 +21,8 @@ RCSID("$OpenBSD: compress.c,v 1.13 2001/02/08 19:30:51 itojun Exp $");
 
 static z_stream incoming_stream;
 static z_stream outgoing_stream;
+static int compress_init_send_called = 0;
+static int compress_init_recv_called = 0;
 
 /*
  * Initializes compression; level is compression level from 1 to 9
@@ -28,14 +30,24 @@ static z_stream outgoing_stream;
  */
 
 void
-buffer_compress_init(int level)
+buffer_compress_init_send(int level)
 {
+       if (compress_init_send_called == 1)
+               deflateEnd(&outgoing_stream);
+       compress_init_send_called = 1;
        debug("Enabling compression at level %d.", level);
        if (level < 1 || level > 9)
                fatal("Bad compression level %d.", level);
-       inflateInit(&incoming_stream);
        deflateInit(&outgoing_stream, level);
 }
+void
+buffer_compress_init_recv(void)
+{
+       if (compress_init_recv_called == 1)
+               inflateEnd(&incoming_stream);
+       compress_init_recv_called = 1;
+       inflateInit(&incoming_stream);
+}
 
 /* Frees any data structures allocated for compression. */
 
@@ -43,15 +55,17 @@ void
 buffer_compress_uninit(void)
 {
        debug("compress outgoing: raw data %lu, compressed %lu, factor %.2f",
-             outgoing_stream.total_in, outgoing_stream.total_out,
-             outgoing_stream.total_in == 0 ? 0.0 :
-             (double) outgoing_stream.total_out / outgoing_stream.total_in);
+           outgoing_stream.total_in, outgoing_stream.total_out,
+           outgoing_stream.total_in == 0 ? 0.0 :
+           (double) outgoing_stream.total_out / outgoing_stream.total_in);
        debug("compress incoming: raw data %lu, compressed %lu, factor %.2f",
-             incoming_stream.total_out, incoming_stream.total_in,
-             incoming_stream.total_out == 0 ? 0.0 :
-             (double) incoming_stream.total_in / incoming_stream.total_out);
-       inflateEnd(&incoming_stream);
-       deflateEnd(&outgoing_stream);
+           incoming_stream.total_out, incoming_stream.total_in,
+           incoming_stream.total_out == 0 ? 0.0 :
+           (double) incoming_stream.total_in / incoming_stream.total_out);
+       if (compress_init_recv_called == 1)
+               inflateEnd(&incoming_stream);
+       if (compress_init_send_called == 1)
+               deflateEnd(&outgoing_stream);
 }
 
 /*
This page took 0.161619 seconds and 4 git commands to generate.