diff -r 42de37ce7ce4 -r f3bd2a0973b9 landmarks/locationlandmarks/localaccess/src/EPos_CPosLmLocalDatabase.cpp --- 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