landmarks/locationlandmarks/localaccess/src/EPos_CPosLmLocalDatabase.cpp
changeset 18 3825cf2dc8c2
parent 0 667063e416a2
--- a/landmarks/locationlandmarks/localaccess/src/EPos_CPosLmLocalDatabase.cpp	Tue Feb 02 10:12:24 2010 +0200
+++ b/landmarks/locationlandmarks/localaccess/src/EPos_CPosLmLocalDatabase.cpp	Fri Apr 16 15:23:31 2010 +0300
@@ -321,6 +321,7 @@
 //
 EXPORT_C void CPosLmLocalDatabase::CommitServerTransactionLX()
     {
+    //coverity[naming_error : FALSE]
     CommitServerTransactionL();
     CleanupStack::Pop(); // rollback
     }
@@ -716,17 +717,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