--- a/landmarks/locationlandmarks/localaccess/src/EPos_CPosLmLocalDatabase.cpp Fri Feb 19 23:14:27 2010 +0200
+++ b/landmarks/locationlandmarks/localaccess/src/EPos_CPosLmLocalDatabase.cpp Fri Mar 12 15:44:22 2010 +0200
@@ -716,17 +716,28 @@
TInt err = iDbAccess->OpenDatabaseL(*iDbUri);
if (err != KErrNone)
{
- // Re-create database if below error codes
- if (err == KErrCorrupt || err == KErrNotSupported)
+ // As this is a default landmarks db, all errors other than OutOfMemory
+ // should be handled by replacing a corrupt db or creating a new db if one is missing.
+ if (err == KErrNoMemory)
{
- iSubSession->CreateDefaultDbL(*iDbUri, ETrue);
+ User::Leave(err);
}
else
{
- iSubSession->CreateDefaultDbL(*iDbUri, EFalse);
+ if ((err == KErrNotFound) || (err == KErrPathNotFound)
+ || (err == KErrArgument) || (err == KErrAlreadyExists))
+ {
+ // Create a new database [default landmarks db]
+ iSubSession->CreateDefaultDbL(*iDbUri, EFalse);
+ }
+ else
+ {
+ // Try deleting the corrupted database and then create a new one
+ iSubSession->CreateDefaultDbL(*iDbUri, ETrue);
+ }
+ *DatabaseAccess()->InitFlagPtr() = ECreated;
+ User::LeaveIfError(iDbAccess->OpenDatabaseL(*iDbUri));
}
- *DatabaseAccess()->InitFlagPtr() = ECreated;
- User::LeaveIfError(iDbAccess->OpenDatabaseL(*iDbUri));
}
}
CleanupStack::PopAndDestroy(); // DbLock