landmarks/locationlandmarks/localaccess/src/EPos_CPosLmLocalDatabase.cpp
branchRCL_3
changeset 6 f3bd2a0973b9
parent 0 667063e416a2
child 8 6fcbaa43369c
--- 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