other-licenses/7zstub/src/7zip/Common/OutBuffer.h

Tue, 06 Jan 2015 21:39:09 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Tue, 06 Jan 2015 21:39:09 +0100
branch
TOR_BUG_9701
changeset 8
97036ab72558
permissions
-rw-r--r--

Conditionally force memory storage according to privacy.thirdparty.isolate;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.

     1 // OutBuffer.h
     3 #ifndef __OUTBUFFER_H
     4 #define __OUTBUFFER_H
     6 #include "../IStream.h"
     7 #include "../../Common/MyCom.h"
     9 #ifndef _NO_EXCEPTIONS
    10 struct COutBufferException
    11 {
    12   HRESULT ErrorCode;
    13   COutBufferException(HRESULT errorCode): ErrorCode(errorCode) {}
    14 };
    15 #endif
    17 class COutBuffer
    18 {
    19 protected:
    20   Byte *_buffer;
    21   UInt32 _pos;
    22   UInt32 _limitPos;
    23   UInt32 _streamPos;
    24   UInt32 _bufferSize;
    25   CMyComPtr<ISequentialOutStream> _stream;
    26   UInt64 _processedSize;
    27   Byte  *_buffer2;
    28   bool _overDict;
    30   HRESULT FlushPart();
    31   void FlushWithCheck();
    32 public:
    33   #ifdef _NO_EXCEPTIONS
    34   HRESULT ErrorCode;
    35   #endif
    37   COutBuffer(): _buffer(0), _pos(0), _stream(0), _buffer2(0) {}
    38   ~COutBuffer() { Free(); }
    40   bool Create(UInt32 bufferSize);
    41   void Free();
    43   void SetMemStream(Byte *buffer) { _buffer2 = buffer; }
    44   void SetStream(ISequentialOutStream *stream);
    45   void Init();
    46   HRESULT Flush();
    47   void ReleaseStream() {  _stream.Release(); }
    49   void WriteByte(Byte b)
    50   {
    51     _buffer[_pos++] = b;
    52     if(_pos == _limitPos)
    53       FlushWithCheck();
    54   }
    55   void WriteBytes(const void *data, size_t size)
    56   {
    57     for (size_t i = 0; i < size; i++)
    58       WriteByte(((const Byte *)data)[i]);
    59   }
    61   UInt64 GetProcessedSize() const;
    62 };
    64 #endif

mercurial