bug # 163739 - XPI Packager adding the xpi packager to the mozilla tree. this is a windows only app used to build the xpi packager for building self installing xpi files. git-svn-id: svn://10.0.0.236/trunk@134725 18797224-902f-48f8-a5cc-f745e15eee43
135 lines
4.2 KiB
C++
135 lines
4.2 KiB
C++
// ZipStorage.h: interface for the CZipStorage class.
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// Copyright (C) 2000 Tadeusz Dracz.
|
|
// For conditions of distribution and use, see copyright notice in ZipArchive.h
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#if !defined(AFX_ZIPSTORAGE_H__941824FE_3320_4794_BDE3_BE334ED8984B__INCLUDED_)
|
|
#define AFX_ZIPSTORAGE_H__941824FE_3320_4794_BDE3_BE334ED8984B__INCLUDED_
|
|
|
|
#include "ZipBigFile.h" // Added by ClassView
|
|
#include "ZipAutoBuffer.h" // Added by ClassView
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif // _MSC_VER > 1000
|
|
|
|
// callback function called when there is a need for a disk change
|
|
// calling CZipArchive functions, apart from the static ones, may have unexpected results
|
|
// iNumber - disk number needed
|
|
// iCode :
|
|
// -1 - disk needed for reading
|
|
// other codes occurs during writting
|
|
// >=0 : number of bytes needed
|
|
// -2 - the file with the archive name already exists on the disk
|
|
// -3 - the disk is probably write - protected
|
|
// -4 - couldn't create a file
|
|
// pData - user defined data
|
|
// return false to abort operation: the proper exception will be thrown
|
|
typedef bool (*ZIPCALLBACKFUN )(int iNumber, int iCode, void* pData);
|
|
|
|
class CZipStorage
|
|
{
|
|
public:
|
|
void Open(CMemFile& mf, int iMode);
|
|
// return the position in the file, taking into account the bytes in the write buffer
|
|
DWORD GetPosition();
|
|
|
|
// flush the data from the read buffer to the disk
|
|
void Flush();
|
|
|
|
// only called by CZipCentralDir when opening an existing archive
|
|
void UpdateSpanMode(WORD uLastDisk);
|
|
// the preset size of the write buffer
|
|
int m_iWriteBufferSize;
|
|
|
|
// user data to be passed to the callback function
|
|
void* m_pCallbackData;
|
|
|
|
// function used to change disks during writing to the disk spanning archive
|
|
void NextDisk(int iNeeded, LPCTSTR lpszFileName = NULL);
|
|
|
|
void Close(bool bAfterException);
|
|
|
|
// return the numer of the current disk
|
|
int GetCurrentDisk();
|
|
|
|
void SetCurrentDisk(int iNumber);
|
|
|
|
// change the disk during extract operations
|
|
void ChangeDisk(int iNumber);
|
|
|
|
// Function name : IsSpanMode
|
|
// Description : detect span mode
|
|
// Return type : int
|
|
// -1 - existing span opened
|
|
// 0 - no span
|
|
// 1 - new span
|
|
int IsSpanMode();
|
|
|
|
void Open(LPCTSTR szPathName, int iMode, int iVolumeSize);
|
|
void Write(void *pBuf, DWORD iSize, bool bAtOnce);
|
|
DWORD Read(void* pBuf, DWORD iSize, bool bAtOnce);
|
|
CZipBigFile m_internalfile;
|
|
CFile* m_pFile;
|
|
CZipStorage();
|
|
virtual ~CZipStorage();
|
|
enum {noSpan, pkzipSpan, tdSpan, suggestedAuto, suggestedTd};
|
|
int m_iSpanMode;
|
|
ZIPCALLBACKFUN m_pZIPCALLBACKFUN;
|
|
static char m_gszExtHeaderSignat[];
|
|
|
|
// open tdspan: last disk number, create tdspan: volume size
|
|
// create pkspan: not used
|
|
int m_iTdSpanData;
|
|
|
|
protected:
|
|
// how many bytes left free in the write buffer
|
|
DWORD GetFreeInBuffer();
|
|
friend class CZipCentralDir;
|
|
// numer of bytes available in the write buffer
|
|
DWORD m_uBytesInWriteBuffer;
|
|
|
|
// tdSpan : the total size of the current volume, pkSpan : free space on the current volume
|
|
DWORD m_uCurrentVolSize;
|
|
|
|
// return the number of bytes left on the current volume
|
|
DWORD VolumeLeft();
|
|
|
|
// write data to the internal buffer
|
|
void WriteInternalBuffer(char *pBuf, DWORD uSize);
|
|
|
|
// number of bytes left free in the write buffer
|
|
DWORD m_uVolumeFreeInBuffer;
|
|
|
|
CZipAutoBuffer m_pWriteBuffer;
|
|
|
|
// return the number of free bytes on the current removable disk
|
|
DWORD GetFreeVolumeSpace();
|
|
|
|
void CallCallback(int iCode, CString szTemp);
|
|
|
|
// only disk spanning creation: tells how many bytes have been written physically to the current volume
|
|
DWORD m_iBytesWritten;
|
|
|
|
// construct the name of the volume in tdSpan mode
|
|
CString GetTdVolumeName(bool bLast, LPCTSTR lpszZipName = NULL);
|
|
|
|
// change the disk in tdSpan mode
|
|
CString ChangeTdRead();
|
|
|
|
// change the disk in pkSpan mode
|
|
CString ChangePkzipRead();
|
|
|
|
// you can only add a new files to the new disk spanning archive and only extract
|
|
// them from the existing one
|
|
bool m_bNewSpan;
|
|
|
|
int m_iCurrentDisk;
|
|
bool OpenFile(LPCTSTR lpszName, UINT uFlags, bool bThrow = true);
|
|
void ThrowError(int err);
|
|
|
|
};
|
|
|
|
#endif // !defined(AFX_ZIPSTORAGE_H__941824FE_3320_4794_BDE3_BE334ED8984B__INCLUDED_)
|