diff -r b8bdbc8f59c7 -r 7d4490026038 persistentstorage/sql/OsLayer/os_symbian.cpp --- a/persistentstorage/sql/OsLayer/os_symbian.cpp Thu Aug 12 11:53:23 2010 +0100 +++ b/persistentstorage/sql/OsLayer/os_symbian.cpp Mon Sep 27 11:59:56 2010 +0100 @@ -971,22 +971,19 @@ { SQLITE_TRACE_OS(OstTrace0(TRACE_INTERNALS, COSLAYERDATA_CREATE_ENTRY, "OS-Entry;0;COsLayerData::Create")); __ASSERT_DEBUG(!COsLayerData::iOsLayerData, __SQLITEPANIC2(ESqliteOsPanicOsLayerDataExists)); + COsLayerData::iOsLayerData = new COsLayerData; if(!COsLayerData::iOsLayerData) { - COsLayerData::iOsLayerData = new COsLayerData; - if(!COsLayerData::iOsLayerData) - { - SQLITE_TRACE_OS(OstTrace0(TRACE_INTERNALS, COSLAYERDATA_CREATE_EXIT1, "OS-Exit;0;COsLayerData::Create;err=KErrNoMemory")); - return KErrNoMemory; - } - TInt err = COsLayerData::iOsLayerData->DoCreate(); - if(err != KErrNone) - { - delete COsLayerData::iOsLayerData; - COsLayerData::iOsLayerData = NULL; - SQLITE_TRACE_OS(OstTrace1(TRACE_INTERNALS, COSLAYERDATA_CREATE_EXIT2, "OS-Exit;0;COsLayerData::Create;err=%d", err)); - return err; - } + SQLITE_TRACE_OS(OstTrace0(TRACE_INTERNALS, COSLAYERDATA_CREATE_EXIT1, "OS-Exit;0;COsLayerData::Create;err=KErrNoMemory")); + return KErrNoMemory; + } + TInt err = COsLayerData::iOsLayerData->DoCreate(); + if(err != KErrNone) + { + delete COsLayerData::iOsLayerData; + COsLayerData::iOsLayerData = NULL; + SQLITE_TRACE_OS(OstTrace1(TRACE_INTERNALS, COSLAYERDATA_CREATE_EXIT2, "OS-Exit;0;COsLayerData::Create;err=%d", err)); + return err; } SQLITE_TRACE_OS(OstTrace0(TRACE_INTERNALS, COSLAYERDATA_CREATE_EXIT3, "OS-Exit;0;COsLayerData::Create;err=KErrNone")); return KErrNone; @@ -1983,11 +1980,7 @@ __OS_CALL(EOsFileSectorSize, 0, 0); __OSTIME_COUNTER(TheOsCallTicks[EOsFileSectorSize], ::OsCallProfile(dbFile.iIsJournal, EOsFileSectorSize), 0, 0, aDbFile, 0); __ASSERT_DEBUG(dbFile.iSectorSize > 0, __SQLITEPANIC2(ESqliteOsPanicInternalError)); - if(dbFile.iSectorSize > 0) - { - return dbFile.iSectorSize; - } - return SQLITE_DEFAULT_SECTOR_SIZE; + return dbFile.iSectorSize; } /** @@ -2013,11 +2006,7 @@ __OS_CALL(EOsFileDeviceCharacteristics, 0, 0); __OSTIME_COUNTER(TheOsCallTicks[EOsFileDeviceCharacteristics], ::OsCallProfile(dbFile.iIsJournal, EOsFileDeviceCharacteristics), 0, 0, aDbFile, 0); __ASSERT_DEBUG(dbFile.iDeviceCharacteristics >= 0, __SQLITEPANIC2(ESqliteOsPanicInternalError)); - if(dbFile.iDeviceCharacteristics >= 0) - { - return dbFile.iDeviceCharacteristics; - } - return 0; + return dbFile.iDeviceCharacteristics; } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -2074,6 +2063,28 @@ return err; } +//Maps disk sector sizes to SQLITE_IOCAP_ATOMIC constants + +struct TSqliteSectorSizeMap + { + TInt iSectorSize; + TInt iSqliteSectorSizeConstant; + }; + +//Used in TVfs::DoGetDeviceCharacteristics() to find which SQLITE_IOCAP_ATOMIC constant should be used +//for the specified sector size +const TSqliteSectorSizeMap KSqliteSectorSizeMap[] = + { + { 512, SQLITE_IOCAP_ATOMIC512}, + { 1024, SQLITE_IOCAP_ATOMIC1K}, + { 2048, SQLITE_IOCAP_ATOMIC2K}, + { 4096, SQLITE_IOCAP_ATOMIC4K}, + { 8192, SQLITE_IOCAP_ATOMIC8K}, + {16384, SQLITE_IOCAP_ATOMIC16K}, + {32768, SQLITE_IOCAP_ATOMIC32K}, + {65536, SQLITE_IOCAP_ATOMIC64K} + }; + /** Retrieves and returns in a bit set the device characteristics. @@ -2097,35 +2108,13 @@ { deviceCharacteristics |= SQLITE_IOCAP_ATOMIC; } - switch(aVolumeInfo.iBlockSize) + for(TInt i=0;i<(sizeof(KSqliteSectorSizeMap)/sizeof(KSqliteSectorSizeMap[0]));++i) { - case 512: - deviceCharacteristics |= SQLITE_IOCAP_ATOMIC512; - break; - case 1024: - deviceCharacteristics |= SQLITE_IOCAP_ATOMIC1K; - break; - case 2048: - deviceCharacteristics |= SQLITE_IOCAP_ATOMIC2K; - break; - case 4096: - deviceCharacteristics |= SQLITE_IOCAP_ATOMIC4K; + if(KSqliteSectorSizeMap[i].iSectorSize == aVolumeInfo.iBlockSize) + { + deviceCharacteristics |= KSqliteSectorSizeMap[i].iSqliteSectorSizeConstant; break; - case 8192: - deviceCharacteristics |= SQLITE_IOCAP_ATOMIC8K; - break; - case 16384: - deviceCharacteristics |= SQLITE_IOCAP_ATOMIC16K; - break; - case 32768: - deviceCharacteristics |= SQLITE_IOCAP_ATOMIC32K; - break; - case 65536: - deviceCharacteristics |= SQLITE_IOCAP_ATOMIC64K; - break; - default: - //Do nothing. deviceCharacteristics was initialized with 0 at the beginning of the function body. - break; + } } return deviceCharacteristics; }