From 588c8946fc1ec558d80bfebfe7bc61c90702dbd4 Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Wed, 3 Nov 2010 15:03:57 +0100 Subject: [PATCH] decomp: remove the free_dest argument Since the decompress function ALWAYS returns allocated memory we get a lot simpler code by removing the ability to return data unallocated. --- src/comp.c | 22 +++++----------------- src/libssh2_priv.h | 8 +++++--- src/transport.c | 37 ++++--------------------------------- 3 files changed, 14 insertions(+), 53 deletions(-) diff --git a/src/comp.c b/src/comp.c index bff2e77..5916a9c 100644 --- a/src/comp.c +++ b/src/comp.c @@ -80,7 +80,6 @@ comp_method_none_decomp(LIBSSH2_SESSION * session, unsigned char **dest, size_t *dest_len, size_t payload_limit, - int *free_dest, const unsigned char *src, size_t src_len, void **abstract) { @@ -89,9 +88,6 @@ comp_method_none_decomp(LIBSSH2_SESSION * session, (void) abstract; *dest = (unsigned char *) src; *dest_len = src_len; - - *free_dest = 0; - return 0; } @@ -222,7 +218,6 @@ comp_method_zlib_decomp(LIBSSH2_SESSION * session, unsigned char **dest, size_t *dest_len, size_t payload_limit, - int *free_dest, const unsigned char *src, size_t src_len, void **abstract) { @@ -234,22 +229,16 @@ comp_method_zlib_decomp(LIBSSH2_SESSION * session, int limiter = 0; /* If strm is null, then we have not yet been initialized. */ - if (strm == NULL) { - *dest = (unsigned char *) src; - *dest_len = src_len; - - *free_dest = 0; - return 0; - } + if (strm == NULL) + return _libssh2_error(session, LIBSSH2_ERROR_COMPRESS, + "decompression unitilized");; /* In practice they never come smaller than this */ - if (out_maxlen < 25) { + if (out_maxlen < 25) out_maxlen = 25; - } - if (out_maxlen > (int) payload_limit) { + if (out_maxlen > (int) payload_limit) out_maxlen = payload_limit; - } strm->next_in = (unsigned char *) src; strm->avail_in = src_len; @@ -340,7 +329,6 @@ comp_method_zlib_decomp(LIBSSH2_SESSION * session, *dest = (unsigned char *) out; *dest_len = out_maxlen - strm->avail_out; - *free_dest = 1; return 0; } diff --git a/src/libssh2_priv.h b/src/libssh2_priv.h index ba8afff..8e4a63e 100644 --- a/src/libssh2_priv.h +++ b/src/libssh2_priv.h @@ -892,9 +892,11 @@ struct _LIBSSH2_COMP_METHOD void **abstract); int (*decomp) (LIBSSH2_SESSION *session, unsigned char **dest, - size_t *dest_len, size_t payload_limit, - int *free_dest, const unsigned char *src, - size_t src_len, void **abstract); + size_t *dest_len, + size_t payload_limit, + const unsigned char *src, + size_t src_len, + void **abstract); int (*dtor) (LIBSSH2_SESSION * session, int compress, void **abstract); }; diff --git a/src/transport.c b/src/transport.c index 831d1d2..093ed39 100644 --- a/src/transport.c +++ b/src/transport.c @@ -198,47 +198,18 @@ fullpacket(LIBSSH2_SESSION * session, int encrypted /* 1 or 0 */ ) if (session->remote.comp && session->remote.comp->compress) { unsigned char *data; size_t data_len; - int free_payload = 1; - rc = session->remote.comp->decomp(session, &data, &data_len, LIBSSH2_PACKET_MAXDECOMP, - &free_payload, p->payload, session->fullpacket_payload_len, &session->remote.comp_abstract); - if(rc) { - LIBSSH2_FREE(session, p->payload); + LIBSSH2_FREE(session, p->payload); + if(rc) return rc; - } - if (free_payload) { - LIBSSH2_FREE(session, p->payload); - p->payload = data; - session->fullpacket_payload_len = data_len; - } else { - if (data == p->payload) { - /* It's not to be freed, because the - * compression layer reused payload, So let's - * do the same! - */ - session->fullpacket_payload_len = data_len; - } else { - /* No comp_method actually lets this happen, - * but let's prepare for the future */ - - LIBSSH2_FREE(session, p->payload); - - /* We need a freeable struct otherwise the - * brigade won't know what to do with it */ - p->payload = LIBSSH2_ALLOC(session, data_len); - if (!p->payload) - return LIBSSH2_ERROR_ALLOC; - - memcpy(p->payload, data, data_len); - session->fullpacket_payload_len = data_len; - } - } + p->payload = data; + session->fullpacket_payload_len = data_len; } session->fullpacket_packet_type = p->payload[0];