diff -r 7333d7932ef7 -r 8b7f4e561641 installationservices/swi/source/sisfile/swtypereginfo.cpp --- a/installationservices/swi/source/sisfile/swtypereginfo.cpp Tue Aug 31 15:21:33 2010 +0300 +++ b/installationservices/swi/source/sisfile/swtypereginfo.cpp Wed Sep 01 12:22:02 2010 +0100 @@ -17,49 +17,239 @@ #include "swtypereginfo.h" -#include "arrayutils.h" -#include "ipcutil.h" + using namespace Swi; -EXPORT_C void SoftwareTypeRegInfoUtils::SerializeArrayL(const RPointerArray& aSwTypeRegInfoArray, RBuf8& aSerializedArray) +CLocalizedSoftwareTypeName::CLocalizedSoftwareTypeName() + { + } + +CLocalizedSoftwareTypeName::CLocalizedSoftwareTypeName(TLanguage aLocale) + : iLocale(aLocale) + { + } + +EXPORT_C CLocalizedSoftwareTypeName::~CLocalizedSoftwareTypeName() + { + delete iName; + } + +EXPORT_C CLocalizedSoftwareTypeName* CLocalizedSoftwareTypeName::NewL(const TDesC& aName, TLanguage aLocale) + { + CLocalizedSoftwareTypeName *self = CLocalizedSoftwareTypeName::NewLC(aName, aLocale); + CleanupStack::Pop(self); + return self; + } + +EXPORT_C CLocalizedSoftwareTypeName* CLocalizedSoftwareTypeName::NewLC(const TDesC& aName, TLanguage aLocale) + { + CLocalizedSoftwareTypeName *self = new(ELeave) CLocalizedSoftwareTypeName(aLocale); + CleanupStack::PushL(self); + self->iName = aName.AllocL(); + return self; + } + +EXPORT_C CLocalizedSoftwareTypeName* CLocalizedSoftwareTypeName::NewL(RReadStream& aStream) + { + CLocalizedSoftwareTypeName* self = new(ELeave) CLocalizedSoftwareTypeName(); + CleanupStack::PushL(self); + self->InternalizeL(aStream); + CleanupStack::Pop(self); + return self; + } + +EXPORT_C void CLocalizedSoftwareTypeName::ExternalizeL(RWriteStream& aStream) const + { + aStream.WriteInt32L(iLocale); + aStream << *iName; + } + +void CLocalizedSoftwareTypeName::InternalizeL(RReadStream& aStream) + { + TLanguage locale = static_cast(aStream.ReadInt32L()); + iLocale = locale; + + delete iName; + iName = HBufC::NewL(aStream, KMaxTInt); // No restriction on length + } + +// ########################################################################################## + +EXPORT_C CSoftwareTypeRegInfo* CSoftwareTypeRegInfo::NewL(const TDesC& aUniqueSoftwareTypeName) + { + CSoftwareTypeRegInfo* self = new (ELeave) CSoftwareTypeRegInfo(); + CleanupStack::PushL(self); + self->iUniqueSoftwareTypeName = HBufC::NewL(aUniqueSoftwareTypeName.Length()); + self->iUniqueSoftwareTypeName->Des().Copy(aUniqueSoftwareTypeName); + CleanupStack::Pop(self); + return self; + } + +EXPORT_C CSoftwareTypeRegInfo* CSoftwareTypeRegInfo::NewL(RReadStream& aStream) + { + CSoftwareTypeRegInfo* self = new (ELeave) CSoftwareTypeRegInfo(); + CleanupStack::PushL(self); + self->InternalizeL(aStream); + CleanupStack::Pop(self); + return self; + } + +CSoftwareTypeRegInfo::CSoftwareTypeRegInfo() + { + } + +EXPORT_C CSoftwareTypeRegInfo::~CSoftwareTypeRegInfo() + { + delete iUniqueSoftwareTypeName; + iMimeTypes.Close(); + iLocalizedSoftwareTypeNames.Close(); + } + +EXPORT_C void CSoftwareTypeRegInfo::ExternalizeL(RWriteStream& aStream) const + { + aStream << *iUniqueSoftwareTypeName; + aStream << iSifPluginUid.iUid; + + TUid installerUid = iInstallerSecureId; + aStream << installerUid.iUid; + + TUid executionLayerUid = iExecutionLayerSecureId; + aStream << executionLayerUid.iUid; + + // MIME types + const TInt numMimeTypes = iMimeTypes.Count(); + aStream.WriteInt32L(numMimeTypes); + for (TInt i=0; iSize(); + + // MIME types + const TInt numMimeTypes = iMimeTypes.Count(); + size += sizeof(TInt); + for (TInt i=0; iSize(); + } + + // Localized names + const TInt numLocalizedNames = iLocalizedSoftwareTypeNames.Count(); + size += sizeof(TInt); + for (TInt i=0; iName().Size(); + } + + return size; + } + +void CSoftwareTypeRegInfo::InternalizeL(RReadStream& aStream) + { + ASSERT(iUniqueSoftwareTypeName == NULL); + + iUniqueSoftwareTypeName = HBufC::NewL(aStream, EUniqueSwTypeNameMaxLength); + + iSifPluginUid = TUid::Uid(aStream.ReadInt32L()); + iInstallerSecureId = TUid::Uid(aStream.ReadInt32L()); + iExecutionLayerSecureId = TUid::Uid(aStream.ReadInt32L()); + + // MIME types + const TInt numMimeTypes = aStream.ReadInt32L(); + for (TInt i=0; iDes().Copy(aMimeType); + iMimeTypes.AppendL(mimeType); + CleanupStack::Pop(mimeType); + } + +EXPORT_C void CSoftwareTypeRegInfo::SetLocalizedSoftwareTypeNameL(TLanguage aLanguage, const TDesC& aName) + { + CLocalizedSoftwareTypeName* name = CLocalizedSoftwareTypeName::NewLC(aName, aLanguage); + iLocalizedSoftwareTypeNames.AppendL(name); + CleanupStack::Pop(name); + } + +// ########################################################################################## + +EXPORT_C void SoftwareTypeRegInfoUtils::SerializeArrayL(const RPointerArray& aSwTypeRegInfoArray, RBuf8& aSerializedArray) { TInt bufLen = sizeof(TInt); const TInt count = aSwTypeRegInfoArray.Count(); for (TInt i=0; iExternalizedSize(); + } aSerializedArray.ReAllocL(aSerializedArray.Length()+bufLen); RDesWriteStream ws(aSerializedArray); CleanupClosePushL(ws); - ExternalizePointerArrayL(aSwTypeRegInfoArray, ws); + ws.WriteInt32L(count); + for (TInt i=0; i& aSwTypeRegInfoArray) +EXPORT_C void SoftwareTypeRegInfoUtils::UnserializeArrayL(RReadStream& aStream, RPointerArray& aSwTypeRegInfoArray) { + CleanupResetAndDestroyPushL(aSwTypeRegInfoArray); const TInt numElems = aStream.ReadInt32L(); for (TInt i=0; i& aSwTypeRegInfoArray, RBuf& aSerializedNames) +EXPORT_C void SoftwareTypeRegInfoUtils::SerializeUniqueSwTypeNamesL(const RPointerArray& aSwTypeRegInfoArray, RBuf& aSerializedNames) { const TInt numNames = aSwTypeRegInfoArray.Count(); TInt bufLen = 0; for (TInt i=0; i(KUniqueNameSeparator)); } @@ -75,6 +265,7 @@ EXPORT_C void SoftwareTypeRegInfoUtils::UnserializeUniqueSwTypeNamesL(const TDesC& aSerializedNames, RArray& aUniqueSwTypeNames) { + CleanupClosePushL(aUniqueSwTypeNames); TPtrC buf(aSerializedNames); for (;;) { @@ -93,9 +284,10 @@ break; } } + CleanupStack::Pop(&aUniqueSwTypeNames); } -EXPORT_C void SoftwareTypeRegInfoUtils::ExtractMimeTypesL(const RPointerArray& aSwTypeRegInfoArray, RPointerArray& aMimeTypes) +EXPORT_C void SoftwareTypeRegInfoUtils::ExtractMimeTypesL(const RPointerArray& aSwTypeRegInfoArray, RPointerArray& aMimeTypes) { for (TInt i=0; i