text: /* Copyright (c) 2004, Roger Dingledine.
   * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
   * Copyright (c) 2007-2017, The Tor Project, Inc. */
  /* See LICENSE for licensing information */
  
  /**
   * \file compress_lzma.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 "util.h"
  #include "torlog.h"
  #include "compress.h"
  #include "compress_none.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;
    }
  }
  
  