--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/secureswitools/swisistools/source/interpretsislib/uninstaller.cpp Thu Dec 17 08:51:10 2009 +0200
@@ -0,0 +1,100 @@
+/*
+* Copyright (c) 2008-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:
+*
+*/
+
+
+#pragma warning (disable: 4786)
+
+#include <iostream>
+#include <sstream>
+
+
+#include "uninstaller.h"
+#include "errors.h"
+
+
+Uninstaller::Uninstaller( SisRegistry& aReg, const CParameterList& aParamList )
+: iRegistry(aReg), iParamList(aParamList)
+{
+}
+
+
+void Uninstaller::Uninstall()
+{
+ const CParameterList::OptionList& uids = iParamList.PkgUidsToRemove();
+
+ // Get the package UID
+ for (CParameterList::OptionList::const_iterator curr = uids.begin(); curr != uids.end(); ++curr)
+ {
+ TUint32 uid;
+
+ bool convertedOk = false;
+
+ std::wstring temp= *curr;
+ std::wistringstream stringStream( temp );
+
+ // Check for hex prefix
+ if ( (temp.substr( 0, 2 ) == (L"0x") || temp.substr( 0, 2 ) == (L"0X")) &&
+ curr->length() > 2 )
+ {
+ // The UID is in Hex, skip "0x" prefix
+ stringStream.ignore( 2 );
+ stringStream >> std::hex >> uid;
+ convertedOk = ( !stringStream.fail() );
+ }
+ else
+ {
+ // The UID is in Decimal
+ stringStream >> uid;
+ convertedOk = ( !stringStream.fail() );
+ }
+
+ if (convertedOk)
+ {
+ RemovePkg(uid);
+ }
+ else
+ {
+ std::wostringstream os;
+
+ os << L" Invalid Package UID " << std::hex << uid;
+ std::wstring msg = os.str();
+ throw InterpretSisError( msg, CMDLINE_ERROR );
+ }
+ }
+
+ // Regenerate SIS stub registries
+ iRegistry.GenerateStubRegistry();
+}
+
+
+void Uninstaller::RemovePkg(const TUint32 aUid)
+{
+ if (iRegistry.IsInstalled(aUid))
+ {
+ LINFO(L"Removing UID 0x" << std::hex << aUid);
+ iRegistry.RemovePkg(aUid);
+ }
+ else
+ {
+ // No SisRegistry file found!!
+ std::wostringstream os;
+
+ os << L" SIS Registry entry for 0x" << std::hex << aUid << L" Not found";
+ std::wstring msg = os.str();
+ throw InterpretSisError( msg, PACKAGE_NOT_FOUND );
+ }
+}