/* Copyright (c) 2004, Roger Dingledine. * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. * 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 "common/util.h" #include "common/torlog.h" #include "common/compress.h" #include "common/compress_none.h" /** Transfer some bytes using the identity transformation. Read up to * *in_len bytes from *in, and write up to *out_len bytes * to *out, adjusting the values as we go. If finish 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 out. * 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; } }