tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

woff2_out.cc (1543B)


      1 /* Copyright 2014 Google Inc. All Rights Reserved.
      2 
      3   Distributed under MIT license.
      4   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
      5 */
      6 
      7 /* Output buffer for WOFF2 decompression. */
      8 
      9 #include <woff2/output.h>
     10 
     11 namespace woff2 {
     12 
     13 WOFF2StringOut::WOFF2StringOut(std::string *buf)
     14    : buf_(buf), max_size_(kDefaultMaxSize), offset_(0) {}
     15 
     16 bool WOFF2StringOut::Write(const void *buf, size_t n) {
     17  return Write(buf, offset_, n);
     18 }
     19 
     20 bool WOFF2StringOut::Write(const void *buf, size_t offset, size_t n) {
     21  if (offset > max_size_ || n > max_size_ - offset) {
     22    return false;
     23  }
     24  if (offset == buf_->size()) {
     25    buf_->append(static_cast<const char*>(buf), n);
     26  } else {
     27    if (offset + n > buf_->size()) {
     28      buf_->append(offset + n - buf_->size(), 0);
     29    }
     30    buf_->replace(offset, n, static_cast<const char*>(buf), n);
     31  }
     32  offset_ = std::max(offset_, offset + n);
     33 
     34  return true;
     35 }
     36 
     37 void WOFF2StringOut::SetMaxSize(size_t max_size) {
     38  max_size_ = max_size;
     39  if (offset_ > max_size_) {
     40    offset_ = max_size_;
     41  }
     42 }
     43 
     44 WOFF2MemoryOut::WOFF2MemoryOut(uint8_t* buf, size_t buf_size)
     45  : buf_(buf),
     46    buf_size_(buf_size),
     47    offset_(0) {}
     48 
     49 bool WOFF2MemoryOut::Write(const void *buf, size_t n) {
     50  return Write(buf, offset_, n);
     51 }
     52 
     53 bool WOFF2MemoryOut::Write(const void *buf, size_t offset, size_t n) {
     54  if (offset > buf_size_ || n > buf_size_ - offset) {
     55    return false;
     56  }
     57  std::memcpy(buf_ + offset, buf, n);
     58  offset_ = std::max(offset_, offset + n);
     59 
     60  return true;
     61 }
     62 
     63 } // namespace woff2