diff -r 4a4892eec172 -r 3e156c80c15d metadataengine/server/src/mdsmaintenanceengine.cpp --- a/metadataengine/server/src/mdsmaintenanceengine.cpp Tue May 25 13:10:05 2010 +0300 +++ b/metadataengine/server/src/mdsmaintenanceengine.cpp Wed Jun 09 10:09:20 2010 +0300 @@ -59,7 +59,7 @@ // Constructor // ------------------------------------------------ // -CMdSMaintenanceEngine::CMdSMaintenanceEngine() +CMdSMaintenanceEngine::CMdSMaintenanceEngine() : iPrivateSchemaFileInvalid( EFalse ) { } @@ -129,32 +129,50 @@ iMaintenance->CreateDatabaseL( ); const TUint KMdSServerUid = 0x0320e65f; // temporal uid - // try to read schema file from C drive - TRAPD( err, ImportSchemaL( aSchema, KSchemaImportFile, KMdSServerUid) ); + TInt schemaError( KErrNone ); + + if( iPrivateSchemaFileInvalid ) + { + // if schema was updated in FOTA update, read the updated schema from ROM + TRAP( schemaError, ImportSchemaL( aSchema, KSchemaRomImportFile, KMdSServerUid) ); + } + else + { + // try to read schema file from C drive + TRAP( schemaError, ImportSchemaL( aSchema, KSchemaImportFile, KMdSServerUid) ); + } - if( err != KErrNone ) + if( schemaError != KErrNone ) { - __LOG1( ELogAlways, "Schema reading error: %d", err ); + __LOG1( ELogAlways, "Schema reading error: %d", schemaError ); // if schema file is not found, try to read from rom (Z) drive - if ( err == KErrNotFound || err == KErrPathNotFound ) + if ( schemaError == KErrNotFound || schemaError == KErrPathNotFound ) { - TRAP( err, ImportSchemaL( aSchema, KSchemaRomImportFile, KMdSServerUid) ); + TRAP( schemaError, ImportSchemaL( aSchema, KSchemaRomImportFile, KMdSServerUid) ); } - if( err != KErrNone ) + else if( !iPrivateSchemaFileInvalid && schemaError == KErrCorrupt ) + { + iPrivateSchemaFileInvalid = ETrue; + } + else + { + schemaError = KErrUnknown; + } + if( schemaError != KErrNone ) { - __LOG1( ELogAlways, "Schema reading error: %d", err ); + __LOG1( ELogAlways, "Schema reading error: %d", schemaError ); DeleteDatabase(); - User::Leave( err ); + User::Leave( schemaError ); } } if ( FailedImports() != 0 ) { - User::Leave( KErrCorrupt ); + User::Leave( KErrBadName ); } // try to read default import file from C drive - TRAP( err, ImportMetadataL( aManipulate, aSchema, KMdsDefaultImportFile ) ); + TRAPD( err, ImportMetadataL( aManipulate, aSchema, KMdsDefaultImportFile ) ); if ( err == KErrNotFound || err == KErrPathNotFound ) { // if default import file is not found, try to read from rom (Z) drive