--- a/homescreenpluginsrv/hspsodt/src/hspsodt.cpp Fri Mar 12 15:43:54 2010 +0200
+++ b/homescreenpluginsrv/hspsodt/src/hspsodt.cpp Mon Mar 15 12:41:53 2010 +0200
@@ -15,7 +15,6 @@
*
*/
-
#include "hspsodt.h"
#include <s32strm.h>
#include <s32mem.h>
@@ -23,9 +22,6 @@
#include "hspsdomdocument.h"
#include "hspsresource.h"
-/* Literal delim is used in separation of theme header and and other data in ODT-streaming. */
-_LIT(KDelim, "#");
-
// ============================ MEMBER FUNCTIONS ===============================
// -----------------------------------------------------------------------------
@@ -148,20 +144,16 @@
// -----------------------------------------------------------------------------
EXPORT_C HBufC8* ChspsODT::MarshalHeaderL() const
{
- CBufFlat* buf = CBufFlat::NewL( KMaxHeaderDataLength8 );
- CleanupStack::PushL( buf );
- RBufWriteStream stream( *buf ); //stream over the buffer
- CleanupClosePushL( stream );
+ HBufC8* buf = HBufC8::NewLC( HeaderSize() );
+ TPtr8 ptr = buf->Des();
+ RDesWriteStream stream( ptr );
+ stream.PushL();
ExternalizeHeaderL( stream );
- CleanupStack::PopAndDestroy( &stream );
+ stream.Pop();
+ stream.Close();
+ CleanupStack::Pop( buf );
- //Create a heap descriptor from the buffer
- HBufC8* des = HBufC8::NewL( buf->Size() );
- TPtr8 ptr( des->Des() );
- buf->Read( 0, ptr, buf->Size() );
- CleanupStack::PopAndDestroy( buf );
-
- return des;
+ return buf;
}
// -----------------------------------------------------------------------------
@@ -188,7 +180,6 @@
// -----------------------------------------------------------------------------
EXPORT_C void ChspsODT::UnMarshalHeaderL( const TDesC8& aStreamData )
{
-
RDesReadStream stream( aStreamData );
CleanupClosePushL( stream );
InternalizeHeaderL( stream );
@@ -215,9 +206,8 @@
EXPORT_C void ChspsODT::InternalizeL( RReadStream& aStream )
{
InternalizeHeaderL( aStream );
- // consumes header delimiter
- aStream.ReadInt16L();
InternalizeResourceListL( aStream );
+
delete iDomDocument;
iDomDocument = NULL;
iDomDocument = ChspsDomDocument::NewL( aStream );
@@ -229,88 +219,147 @@
// (other items were commented in a header).
// -----------------------------------------------------------------------------
void ChspsODT::ExternalizeHeaderL( RWriteStream& aStream ) const
- {
- if ( iPackageVersion )
+ {
+ const TDesC& packageVersion = PackageVersion();
+ aStream.WriteInt32L( packageVersion.Length() );
+ if( packageVersion.Length() > 0 )
+ {
+ aStream << packageVersion;
+ }
+
+ aStream.WriteUint32L( iThemeUid );
+
+ const TDesC& providerName = ProviderName();
+ aStream.WriteInt32L( providerName.Length() );
+ if( providerName.Length() > 0 )
+ {
+ aStream << providerName;
+ }
+
+ const TDesC& themeFullName = ThemeFullName();
+ aStream.WriteInt32L( themeFullName.Length() );
+ if( themeFullName.Length() > 0 )
+ {
+ aStream << themeFullName;
+ }
+
+ const TDesC& themeShortName = ThemeShortName();
+ aStream.WriteInt32L( themeShortName.Length() );
+ if( themeShortName.Length() > 0 )
+ {
+ aStream << themeShortName;
+ }
+
+ const TDesC& themeVersion = ThemeVersion();
+ aStream.WriteInt32L( themeVersion.Length() );
+ if( themeVersion.Length() > 0 )
{
- aStream << *iPackageVersion;
- }
- else
+ aStream << themeVersion;
+ }
+
+ const TDesC& description = Description();
+ aStream.WriteInt32L( description.Length() );
+ if( description.Length() > 0 )
+ {
+ aStream << description;
+ }
+
+ const TDesC& logoFile = LogoFile();
+ aStream.WriteInt32L( logoFile.Length() );
+ if( logoFile.Length() > 0 )
+ {
+ aStream << logoFile;
+ }
+
+ const TDesC& previewFile = PreviewFile();
+ aStream.WriteInt32L( previewFile.Length() );
+ if( previewFile.Length() > 0 )
{
- aStream << KNullDesC;
+ aStream << previewFile;
+ }
+
+ aStream.WriteUint32L( iFamilyMask );
+ aStream.WriteUint32L( iConfigurationType );
+ aStream.WriteUint32L( iRootUid );
+ aStream.WriteUint32L( iProviderUid );
+ aStream.WriteUint32L( iFlags );
+
+ aStream.WriteInt32L( iLanguage );
+ aStream.WriteInt32L( iMultiInstance );
+ }
+
+
+// -----------------------------------------------------------------------------
+// ChspsODT::HeaderSize
+// Calculate header size in bytes.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+TInt ChspsODT::HeaderSize() const
+ {
+ TInt size = sizeof( TInt32 );
+ if( PackageVersion().Length() > 0 )
+ {
+ size += sizeof( TUint32 ); // String streaming insert also max. 32bit member of TCardinality.
+ size += PackageVersion().Size();
}
- aStream.WriteUint32L( iFamilyMask );
- aStream.WriteUint32L( iConfigurationType );
- aStream.WriteUint32L( iRootUid );
- aStream.WriteUint32L( iProviderUid );
- aStream.WriteUint32L( iThemeUid );
- aStream.WriteInt32L( iMultiInstance );
+ size += sizeof( TUint32 ); // iThemeUid
- if ( iDescription )
+ size += sizeof( TInt32 );
+ if( ProviderName().Length() > 0 )
{
- aStream << *iDescription;
+ size += sizeof( TUint32 ); // String streaming insert also max. 32bit member of TCardinality.
+ size += ProviderName().Size();
}
- else
+
+ size += sizeof( TInt32 );
+ if( ThemeFullName().Length() > 0 )
{
- aStream << KNullDesC;
- }
- if ( iLogoFile )
- {
- aStream << *iLogoFile;
+ size += sizeof( TUint32 ); // String streaming insert also max. 32bit member of TCardinality.
+ size += ThemeFullName().Size();
}
- else
+
+ size += sizeof( TInt32 );
+ if( ThemeShortName().Length() > 0 )
{
- aStream << KNullDesC;
- }
- if ( iPreviewFile )
- {
- aStream << *iPreviewFile;
+ size += sizeof( TUint32 ); // String streaming insert also max. 32bit member of TCardinality.
+ size += ThemeShortName().Size();
}
- else
- {
- aStream << KNullDesC;
- }
- if ( iProviderName )
+
+ size += sizeof( TInt32 );
+ if( ThemeVersion().Length() > 0 )
{
- aStream << *iProviderName;
- }
- else
- {
- aStream << KNullDesC;
- }
+ size += sizeof( TUint32 ); // String streaming insert also max. 32bit member of TCardinality.
+ size += ThemeVersion().Size();
+ }
- if ( iThemeFullName )
+ size += sizeof( TInt32 );
+ if( Description().Length() > 0 )
{
- aStream << *iThemeFullName;
- }
- else
- {
- aStream << KNullDesC;
- }
-
- if ( iThemeShortName )
+ size += sizeof( TUint32 ); // String streaming insert also max. 32bit member of TCardinality.
+ size += Description().Size();
+ }
+
+ size += sizeof( TInt32 );
+ if( LogoFile().Length() > 0 )
{
- aStream << *iThemeShortName;
- }
- else
- {
- aStream << KNullDesC;
- }
-
- if ( iThemeVersion )
+ size += sizeof( TUint32 ); // String streaming insert also max. 32bit member of TCardinality.
+ size += LogoFile().Size();
+ }
+
+ size += sizeof( TInt32 );
+ if( PreviewFile().Length() > 0 )
{
- aStream << *iThemeVersion;
- }
- else
- {
- aStream << KNullDesC;
- }
+ size += sizeof( TUint32 ); // String streaming insert also max. 32bit member of TCardinality.
+ size += PreviewFile().Size();
+ }
- aStream.WriteInt32L( iLanguage );
- aStream.WriteUint32L( iFlags );
+ size += sizeof( TUint32 ) * 5; // iFamilyMask, iConfigurationType,
+ // iRootUid, iProviderUid, iFlags
+
+ size += sizeof( TInt32 ) * 2; // iLanguage, iMultiInstance
- // end of the header delimiter
- aStream.WriteL( KDelim );
+ return size;
}
// -----------------------------------------------------------------------------
@@ -319,59 +368,111 @@
// (other items were commented in a header).
// -----------------------------------------------------------------------------
EXPORT_C void ChspsODT::InternalizeHeaderL( RReadStream& aStream )
- {
- HBufC* version = HBufC::NewL( aStream, KMaxFileName );
- CleanupStack::PushL( version );
- if ( iPackageVersion && version->Des().Compare( iPackageVersion->Des() ) != 0 )
+ {
+ TInt len = aStream.ReadInt32L();
+ HBufC* version = NULL;
+ if( len > 0 )
+ {
+ version = HBufC::NewL( aStream, len );
+ }
+ CleanupStack::PushL( version );
+
+ // Check version request.
+ if( iPackageVersion )
{
- // Package version check requested (iPackageVersion defined)
- // and package version not supported
- User::Leave( KErrNotSupported );
+ TBool supported = ETrue;
+ if( version == NULL )
+ {
+ supported = EFalse;
+ }
+ else if( version &&
+ version->Compare( *iPackageVersion ) != 0 )
+ {
+ supported = EFalse;
+ }
+
+ if( !supported )
+ {
+ // Package version check requested (iPackageVersion defined)
+ // and package version not supported
+ User::Leave( KErrNotSupported );
+ }
}
- if ( !iPackageVersion && version->Length() )
+
+ if( version )
{
- // Package version check not requested
+ delete iPackageVersion;
+ iPackageVersion = NULL;
iPackageVersion = version->AllocL();
}
CleanupStack::PopAndDestroy( version );
-
- iFamilyMask = aStream.ReadUint32L();
- iConfigurationType = aStream.ReadUint32L();
- iRootUid = aStream.ReadUint32L();
- iProviderUid = aStream.ReadUint32L();
+
iThemeUid = aStream.ReadUint32L();
- iMultiInstance = aStream.ReadInt32L();
-
- delete iDescription;
- iDescription = NULL;
- iDescription = HBufC::NewL(aStream, KMaxDescLength );
-
- delete iLogoFile;
- iLogoFile = NULL;
- iLogoFile = HBufC::NewL(aStream, KMaxFileName );
-
- delete iPreviewFile;
- iPreviewFile = NULL;
- iPreviewFile = HBufC::NewL(aStream, KMaxFileName );
-
+
delete iProviderName;
iProviderName = NULL;
- iProviderName = HBufC::NewL(aStream, KMaxFileName );
+ len = aStream.ReadInt32L();
+ if( len > 0 )
+ {
+ iProviderName = HBufC::NewL( aStream, len );
+ }
delete iThemeFullName;
iThemeFullName = NULL;
- iThemeFullName = HBufC::NewL(aStream, KMaxFileName );
+ len = aStream.ReadInt32L();
+ if( len > 0 )
+ {
+ iThemeFullName = HBufC::NewL( aStream, len );
+ }
delete iThemeShortName;
iThemeShortName = NULL;
- iThemeShortName = HBufC::NewL(aStream, KMaxFileName );
-
+ len = aStream.ReadInt32L();
+ if( len > 0 )
+ {
+ iThemeShortName = HBufC::NewL( aStream, len );
+ }
+
delete iThemeVersion;
iThemeVersion = NULL;
- iThemeVersion = HBufC::NewL(aStream, KMaxFileName );
-
+ len = aStream.ReadInt32L();
+ if( len > 0 )
+ {
+ iThemeVersion = HBufC::NewL( aStream, len );
+ }
+
+ delete iDescription;
+ iDescription = NULL;
+ len = aStream.ReadInt32L();
+ if( len > 0 )
+ {
+ iDescription = HBufC::NewL( aStream, len );
+ }
+
+ delete iLogoFile;
+ iLogoFile = NULL;
+ len = aStream.ReadInt32L();
+ if( len > 0 )
+ {
+ iLogoFile = HBufC::NewL( aStream, len );
+ }
+
+ delete iPreviewFile;
+ iPreviewFile = NULL;
+ len = aStream.ReadInt32L();
+ if( len > 0 )
+ {
+ iPreviewFile = HBufC::NewL( aStream, len );
+ }
+
+ iFamilyMask = aStream.ReadUint32L();
+ iConfigurationType = aStream.ReadUint32L();
+ iRootUid = aStream.ReadUint32L();
+ iProviderUid = aStream.ReadUint32L();
+ iFlags = aStream.ReadUint32L();
+
iLanguage = aStream.ReadInt32L();
- iFlags = aStream.ReadUint32L();
+ iMultiInstance = aStream.ReadInt32L();
}
// -----------------------------------------------------------------------------
@@ -583,9 +684,16 @@
// -----------------------------------------------------------------------------
EXPORT_C void ChspsODT::SetProviderNameL( const TDesC& aName )
{
- delete iProviderName;
- iProviderName = NULL;
- iProviderName = aName.AllocL();
+ if( iProviderName )
+ {
+ delete iProviderName;
+ iProviderName = NULL;
+ }
+
+ if( aName.Length() != 0 )
+ {
+ iProviderName = aName.AllocL();
+ }
}
// -----------------------------------------------------------------------------
@@ -612,9 +720,16 @@
// -----------------------------------------------------------------------------
EXPORT_C void ChspsODT::SetThemeFullNameL( const TDesC& aName )
{
- delete iThemeFullName;
- iThemeFullName = NULL;
- iThemeFullName = aName.AllocL();
+ if( iThemeFullName )
+ {
+ delete iThemeFullName;
+ iThemeFullName = NULL;
+ }
+
+ if( aName.Length() != 0 )
+ {
+ iThemeFullName = aName.AllocL();
+ }
}
// -----------------------------------------------------------------------------
@@ -641,9 +756,16 @@
// -----------------------------------------------------------------------------
EXPORT_C void ChspsODT::SetThemeShortNameL( const TDesC& aName )
{
- delete iThemeShortName;
- iThemeShortName = NULL;
- iThemeShortName = aName.AllocL();
+ if( iThemeShortName )
+ {
+ delete iThemeShortName;
+ iThemeShortName = NULL;
+ }
+
+ if( aName.Length() != 0 )
+ {
+ iThemeShortName = aName.AllocL();
+ }
}
// -----------------------------------------------------------------------------
@@ -670,9 +792,16 @@
// -----------------------------------------------------------------------------
EXPORT_C void ChspsODT::SetThemeVersionL( const TDesC& aVersion )
{
- delete iThemeVersion;
- iThemeVersion = NULL;
- iThemeVersion = aVersion.AllocL();
+ if( iThemeVersion )
+ {
+ delete iThemeVersion;
+ iThemeVersion = NULL;
+ }
+
+ if( aVersion.Length() != 0 )
+ {
+ iThemeVersion = aVersion.AllocL();
+ }
}
// -----------------------------------------------------------------------------
@@ -804,9 +933,16 @@
// -----------------------------------------------------------------------------
EXPORT_C void ChspsODT::SetPackageVersionL( const TDesC& aVersion )
{
- delete iPackageVersion;
- iPackageVersion = NULL;
- iPackageVersion = aVersion.AllocL();
+ if( iPackageVersion )
+ {
+ delete iPackageVersion;
+ iPackageVersion = NULL;
+ }
+
+ if( aVersion.Length() != 0 )
+ {
+ iPackageVersion = aVersion.AllocL();
+ }
}
// -----------------------------------------------------------------------------
@@ -867,9 +1003,16 @@
// -----------------------------------------------------------------------------
EXPORT_C void ChspsODT::SetDescriptionL( const TDesC& aDesc )
{
- delete iDescription;
- iDescription = NULL;
- iDescription = aDesc.AllocL();
+ if( iDescription )
+ {
+ delete iDescription;
+ iDescription = NULL;
+ }
+
+ if( aDesc.Length() != 0 )
+ {
+ iDescription = aDesc.AllocL();
+ }
}
// -----------------------------------------------------------------------------
@@ -891,10 +1034,17 @@
// ChspsODT::SetLogoFileL
// -----------------------------------------------------------------------------
EXPORT_C void ChspsODT::SetLogoFileL( const TDesC& aPath )
- {
- delete iLogoFile;
- iLogoFile = NULL;
- iLogoFile = aPath.AllocL();
+ {
+ if( iLogoFile )
+ {
+ delete iLogoFile;
+ iLogoFile = NULL;
+ }
+
+ if( aPath.Length() != 0 )
+ {
+ iLogoFile = aPath.AllocL();
+ }
}
// -----------------------------------------------------------------------------
@@ -916,10 +1066,17 @@
// ChspsODT::SetPreviewFileL
// -----------------------------------------------------------------------------
EXPORT_C void ChspsODT::SetPreviewFileL( const TDesC& aPath )
- {
- delete iPreviewFile;
- iPreviewFile = NULL;
- iPreviewFile = aPath.AllocL();
+ {
+ if( iPreviewFile )
+ {
+ delete iPreviewFile;
+ iPreviewFile = NULL;
+ }
+
+ if( aPath.Length() != 0 )
+ {
+ iPreviewFile = aPath.AllocL();
+ }
}
// -----------------------------------------------------------------------------