Fixed lots of issues with installing a low-caps version of fshell from SIS file.
* Fixed issue in CCommandFactory whereby some APIs like GetCommandInfoL could trigger allocations on the wrong heap or signals to the wrong thread. The symptoms were often seen as a crash in the which_00 thread when running ciftest.
* Lots of build fixes for when FSHELL_PROTECTED_UIDS isn't defined and when all capabilities aren't available.
* Added new platform.mmh macro FSHELL_OPEN_SIGNED.
* Open signing of fshell SIS files is now supported for production S60 handsets. Build fshell with the FSHELL_OPEN_SIGNED macro defined (and without defining FSHELL_CAP_ALL or FSHELL_PROTECTED_UIDS) in your platform.mmh and submit \epoc32\fshell\fshell.unsigned.sis to https://www.symbiansigned.com/app/page/public/openSignedOnline.do . The following commands are not available when using Open Signing due to Platform Security restrictions: fdb; kerninfo; chunkinfo; svrinfo; objinfo; sudo; fsck; localdrive; ramdefrag; readmem; reboot; setcritical; setpriority. Others such as chkdeps, e32header, ps, and fshell itself will run but in a restricted capacity (for example, fshell will no longer allow you to modify files in the \sys\bin directory).
* Removed commands objinfo, svrinfo, chunkinfo, readmem, fsck completely when memory access isn't present - previously they would still appear in the help but would give an error if you tried to run them.
// fzipup.h
//
// Copyright (c) 2008 - 2010 Accenture. All rights reserved.
// This component and the accompanying materials are made available
// under the terms of the "Eclipse Public License v1.0"
// which accompanies this distribution, and is available
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
//
// Initial Contributors:
// Accenture - Initial contribution
//
#ifndef __FZIP_UP_H__
#define __FZIP_UP_H__
#include <zipfile.h>
#include <ezbufman.h>
#include <fshell/ioutils.h>
using namespace IoUtils;
const TUint32 KDefaultZipBufferLength = 0x8000; // 32 Kbytes
//
// class CBufferManager
// manage the i/o buffers for compression, wrapper over the MEZBufferManager mix-in
// takes input data from one file stream & writes the compressed output to another file stream
//
class CBufferManager : public CBase, public MEZBufferManager
{
public:
static CBufferManager *NewLC(RFileReadStream& aInput, RFileWriteStream& aOutput, TInt aInputStreamBytes, TInt aBufferSize);
~CBufferManager();
inline TInt TotalBytesOut(){ return iBytesWritten; }
// from MEzBufferManager
void InitializeL(CEZZStream &aZStream);
void NeedInputL(CEZZStream &aZStream);
void NeedOutputL(CEZZStream &aZStream);
void FinalizeL(CEZZStream &aZStream);
private:
CBufferManager(RFileReadStream& aInput, RFileWriteStream& aOutput, TInt aInputStreamBytes, TInt aBufferSize);
void ConstructL();
void ReadInputL();
void WriteOutputL(CEZZStream& aZStream);
private:
RFileReadStream& iInput;
RFileWriteStream& iOutput;
TInt iInputStreamBytes; // size of the input stream in bytes
TInt iReadLength;
TInt iBufferSize;
TInt iBytesWritten;
TUint8* iInputBuffer;
TUint8* iOutputBuffer;
TPtr8 iInputDescriptor;
TPtr8 iOutputDescriptor;
};
//
// class CZipEntry
// defines attributes associated with a file contained within a zip archive
// note these are taken from PKWARE'S APPNOTE.TXT zip-file format specification
//
class CZipItUp;
class CZipEntry : public CZipArchive
{
public:
friend class CZipItUp;
static CZipEntry* NewLC(RFs& aFs, const TDesC& aFilename, const TInt aUid);
virtual ~CZipEntry();
void SetOffset(TUint32 aOffset);
TUint32 ReturnOffset();
TUint32 FileHeaderSize();
private:
CZipEntry(RFs& aFs, const TInt aUid);
void ConstructL(const TDesC& aFilename);
void CalcCRCL();
private:
static const TInt iOffset;
TLocalHeader iLFH; // Local File Header
HBufC8* iFileData; // File Data
TCentralDirectoryHeader iFH; // File Header
RFs& iFs; // f32 hook
TBuf8<KMaxFileName> iAsciiName; // Ascii file name
RFile iInput; // input data from file
const TInt iUid; // uid id'ing this particular zip entry
TSglQueLink iLink;
};
//
// class CZipItUp
// create a zip archive
//
typedef TSglQue<CZipEntry> CZipMemberLinkedList;
typedef TSglQueIter<CZipEntry> CZipMemberLinkedListIter;
class CZipItUp : public CBase
{
public:
static CZipItUp* NewLC(RFs& aFs, TDesC& aArchive);
virtual ~CZipItUp();
void AddFileL(const TDesC& aFile);
void CreateZipL();
private:
CZipItUp(RFs& aFs, TDesC& aArchive);
void ConstructL();
void AddEntryL(CZipEntry& aEntry);
TBool DuplicateEntryL(const TDesC& aFile);
void AppendLocalFileHeaderL(RFileWriteStream& aStream, CZipEntry& aZipEntry);
void AppendCompressedDataL(RFileWriteStream& aStream, CZipEntry& aZipEntry);
void AppendCentralDirectoryFileHeaderL(RFileWriteStream& aStream, CZipEntry& aEntry);
void AppendCentralDirectoryTrailerL(RFileWriteStream& aStream);
private:
RFs& iFs;
TDesC& iFileName;
RFile iFile;
CZipMemberLinkedList iZipMemberLinkedList;
CZipMemberLinkedListIter iZipMemberLinkedListIter;
TInt iEntryUid;
struct TCdt
{
TUint32 iSignature;
TUint16 iDiskNumber;
TUint16 iStartDiskNumber;
TUint16 iLocalEntryCount;
TUint16 iTotalEntryCount;
TUint32 iSize;
TUint32 iOffset;
TUint16 iCommentLength;
};
TCdt iCDT; // Central Directory Trailer
};
#endif // __FZIP_UP_H__