userlibandfileserver/fileserver/inc/rofs.h
author Slion
Tue, 08 Dec 2009 08:11:42 +0100
branchanywhere
changeset 19 f6d3d9676ee4
parent 0 a41df078684a
permissions -rw-r--r--
Trying to figure out how to implement my WINC like compatibility layer. Going the emulation way is probably not so smart. We should not use the kernel but rather hook native functions in the Exec calls.

// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
// All rights reserved.
// This component and the accompanying materials are made available
// under the terms of the License "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:
// Nokia Corporation - initial contribution.
//
// Contributors:
//
// Description:
//
// WARNING: This file contains some APIs which are internal and are subject
//          to change without notice. Such APIs should therefore not be used
//          outside the Kernel and Hardware Services package.
//

/**
 @file
 @internalAll
*/

#ifndef ROFS_H
#define ROFS_H

/**
@internalAll
@released
*/
const TUint16 KRofsFormatVersion = 0x200;

class TRofsEntry
/**
@internalAll
@released
*/
	{
public:
	TUint16 iStructSize;	// Total size of entry, header + name + any padding
	TUint8	iUids[sizeof(TCheckedUid)];		// A copy of all the UID info
	TUint8	iNameOffset;	// offset of iName from start of entry
	TUint8	iAtt;			// standard file attributes
	TUint32 iFileSize;		// real size of file in bytes (may be different from size in image)
							// for subdirectories this is the total size of the directory
							// block entry excluding padding
	TUint32 iFileAddress;	// address in image of file start
	TUint8	iAttExtra;		// extra ROFS attributes (these are inverted so 0 = enabled)
	TUint8	iNameLength;	// length of iName
	TUint16 iName[1];
	};

/**
@internalAll
@released
*/
const TUint KRofsEntryNameOffset = _FOFF( TRofsEntry, iName );
/**
@internalAll
@released
*/
const TUint KRofsEntryHeaderSize = KRofsEntryNameOffset;

class TRofsDir
/**
@internalAll
@released
*/
	{
	public:
	TUint16	iStructSize;		// Total size of this directory block including padding
	TUint8	padding;
	TUint8	iFirstEntryOffset;	// offset to first entry
	TUint32 iFileBlockAddress;	// address of associated file block
	TUint32	iFileBlockSize;		// size of associated file block
	TRofsEntry	iSubDir;		// first subdir entry (not present if no subdirs)
	};

/**
@internalAll
@released
*/
const TUint KRofsDirFirstEntryOffset = _FOFF( TRofsDir, iSubDir );
/**
@internalAll
@released
*/
const TUint KRofsDirHeaderSize = KRofsDirFirstEntryOffset;

class TRofsHeader
/**
@internalAll
@released
*/
	{
	public:
	TUint8		iIdentifier[4];		// ROFS identifier
	TUint8		iHeaderSize;
	TUint8		iReserved;
	TUint16		iRofsFormatVersion;
	TUint		iDirTreeOffset;	// offset to start of directory structure
	TUint		iDirTreeSize;		// size in bytes of directory
	TUint		iDirFileEntriesOffset;	// offset to start of file entries
	TUint		iDirFileEntriesSize;	// size in bytes of file entry block
	TInt64		iTime;
	TVersion	iImageVersion;		// licensee image version
	TUint32		iImageSize;
	TUint		iCheckSum;
	TUint32		iMaxImageSize;
	};
/**
@internalAll
@released
*/

class TExtensionRofsHeader
	{
	public:    
	TUint8		iIdentifier[4];		// ROFS Extension identifier
	TUint8		iHeaderSize;
	TUint8		iReserved;
	TUint16		iRofsFormatVersion;
	TUint		iDirTreeOffset;	        // offset to start of directory structure
	TUint		iDirTreeSize;		// size in bytes of directory
	TUint		iDirFileEntriesOffset;	// offset to start of file entries
	TUint		iDirFileEntriesSize;	// size in bytes of file entry block
	TInt64		iTime;
	TVersion	iImageVersion;		// licensee image version
	TUint32		iImageSize;
	TUint		iCheckSum;
	TUint32		iMaxImageSize;
	};

const TUint KRofsHeaderSize = sizeof(TRofsHeader);
const TUint KExtensionRofsHeaderSize = sizeof(TExtensionRofsHeader);

/**
@internalAll
@released
*/
const TInt16 KEarliestSupportedFormatVersion = KRofsFormatVersion;
/**
@internalAll
@released
*/
const TInt16 KLatestSupportedFormatVersion = KRofsFormatVersion;

const TUint KRofsMangleNameLength = 7;

#endif