tor/src/lib/compress/compress_none.c

55 lines
1.7 KiB
C
Raw Normal View History

/* Copyright (c) 2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
2018-06-20 14:13:28 +02:00
* Copyright (c) 2007-2018, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
* \file compress_none.c
* \brief Compression backend for identity compression.
*
* We actually define this backend so that we can treat the identity transform
* as another case of compression.
*
* This module should never be invoked directly. Use the compress module
* instead.
**/
#include "orconfig.h"
#include "lib/log/log.h"
2018-06-21 17:52:01 +02:00
#include "lib/compress/compress.h"
#include "lib/compress/compress_none.h"
#include "lib/intmath/cmp.h"
#include <string.h>
/** Transfer some bytes using the identity transformation. Read up to
* *<b>in_len</b> bytes from *<b>in</b>, and write up to *<b>out_len</b> bytes
* to *<b>out</b>, adjusting the values as we go. If <b>finish</b> is true,
* we've reached the end of the input.
*
* Return TOR_COMPRESS_DONE if we've finished the entire
* compression/decompression.
* Return TOR_COMPRESS_OK if we're processed everything from the input.
* Return TOR_COMPRESS_BUFFER_FULL if we're out of space on <b>out</b>.
* Return TOR_COMPRESS_ERROR if the stream is corrupt.
*/
tor_compress_output_t
tor_cnone_compress_process(char **out, size_t *out_len,
const char **in, size_t *in_len,
int finish)
{
size_t n_to_copy = MIN(*in_len, *out_len);
memcpy(*out, *in, n_to_copy);
*out += n_to_copy;
*in += n_to_copy;
*out_len -= n_to_copy;
*in_len -= n_to_copy;
if (*in_len == 0) {
return finish ? TOR_COMPRESS_DONE : TOR_COMPRESS_OK;
} else {
return TOR_COMPRESS_BUFFER_FULL;
}
}