summaryrefslogtreecommitdiff
path: root/zip/ZipArchive/ZipMemFile.h
diff options
context:
space:
mode:
Diffstat (limited to 'zip/ZipArchive/ZipMemFile.h')
-rw-r--r--zip/ZipArchive/ZipMemFile.h129
1 files changed, 129 insertions, 0 deletions
diff --git a/zip/ZipArchive/ZipMemFile.h b/zip/ZipArchive/ZipMemFile.h
new file mode 100644
index 0000000..948e73e
--- /dev/null
+++ b/zip/ZipArchive/ZipMemFile.h
@@ -0,0 +1,129 @@
+////////////////////////////////////////////////////////////////////////////////
+// This source file is part of the ZipArchive library source distribution and
+// is Copyrighted 2000 - 2007 by Artpol Software - Tadeusz Dracz
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// For the licensing details refer to the License.txt file.
+//
+// Web Site: http://www.artpol-software.com
+////////////////////////////////////////////////////////////////////////////////
+
+/**
+* \file ZipMemFile.h
+* Includes the CZipMemFile class.
+*
+*/
+#if !defined(ZIPARCHIVE_ZIPMEMFILE_DOT_H)
+#define ZIPARCHIVE_ZIPMEMFILE_DOT_H
+
+#if _MSC_VER > 1000
+#pragma once
+#endif
+
+#include "ZipAbstractFile.h"
+#include "ZipString.h"
+#include "ZipExport.h"
+
+/**
+ Represents a file in memory.
+ Automatically grows when necessary.
+*/
+class ZIP_API CZipMemFile : public CZipAbstractFile
+{
+protected:
+ size_t m_nGrowBy, m_nPos;
+ size_t m_nBufSize, m_nDataSize;
+ BYTE* m_lpBuf;
+ bool m_bAutoDelete;
+ void Free()
+ {
+ if (m_lpBuf)
+ {
+ free(m_lpBuf);
+ m_lpBuf = NULL;
+ }
+ }
+ void Init()
+ {
+ m_nGrowBy = m_nPos = 0;
+ m_nBufSize = m_nDataSize = 0;
+ m_lpBuf = NULL;
+
+ }
+ void Grow(size_t nBytes);
+public:
+ bool IsClosed() const { return m_lpBuf == NULL;}
+ void Flush(){}
+
+ ZIP_FILE_USIZE Seek(ZIP_FILE_SIZE lOff, int nFrom);
+ ZIP_FILE_USIZE GetLength() const {return m_nDataSize;}
+ void Write(const void* lpBuf, UINT nCount);
+ UINT Read(void* lpBuf, UINT nCount);
+ void SetLength(ZIP_FILE_USIZE nNewLen);
+ CZipString GetFilePath() const {return _T("");}
+ CZipMemFile(long nGrowBy = 1024)
+ {
+ Init();
+ m_nGrowBy = nGrowBy;
+ m_bAutoDelete = true;
+ }
+
+
+
+ CZipMemFile(BYTE* lpBuf, UINT nBufSize, long nGrowBy = 0)
+ {
+ Init();
+ Attach(lpBuf, nBufSize, nGrowBy);
+ }
+
+ CZipMemFile(CZipMemFile& from)
+ {
+ Copy(from);
+ }
+
+ void Copy(CZipMemFile& from)
+ {
+ SetLength(from.m_nDataSize);
+ from.Read(m_lpBuf, (UINT)from.m_nDataSize);
+ }
+
+ ZIP_FILE_USIZE GetPosition() const { return m_nPos;}
+ void Attach(BYTE* lpBuf, UINT nBufSize, long nGrowBy = 0)
+ {
+ Close();
+ m_lpBuf = lpBuf;
+ m_nGrowBy = nGrowBy;
+ m_nBufSize = nBufSize;
+ m_nDataSize = nGrowBy == 0 ? nBufSize : 0;
+ m_bAutoDelete = false;
+ }
+
+ void ReInit(long nGrowBy = 1024)
+ {
+ Close();
+ Init();
+ m_nGrowBy = nGrowBy;
+ m_bAutoDelete = true;
+ }
+
+ BYTE* Detach()
+ {
+ BYTE* b = m_lpBuf;
+ Init();
+ return b;
+ }
+ void Close()
+ {
+ if (m_bAutoDelete)
+ Free();
+ Init();
+ }
+ virtual ~CZipMemFile(){Close();}
+
+};
+
+#endif // !defined(ZIPARCHIVE_ZIPMEMFILE_DOT_H)