os/persistentdata/persistentstorage/dbms/pcdbms/ustor/US_FILE.CPP
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
sl@0
     1
// Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     2
// All rights reserved.
sl@0
     3
// This component and the accompanying materials are made available
sl@0
     4
// under the terms of "Eclipse Public License v1.0"
sl@0
     5
// which accompanies this distribution, and is available
sl@0
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     7
//
sl@0
     8
// Initial Contributors:
sl@0
     9
// Nokia Corporation - initial contribution.
sl@0
    10
//
sl@0
    11
// Contributors:
sl@0
    12
//
sl@0
    13
// Description:
sl@0
    14
// The file-store database which provides the default format
sl@0
    15
// 
sl@0
    16
//
sl@0
    17
sl@0
    18
#include "US_STD.H"
sl@0
    19
#include <s32file.h>
sl@0
    20
sl@0
    21
EXPORT_C CDbFileStoreDatabase::CDbFileStoreDatabase(RFs& aFs)
sl@0
    22
	:iFs(aFs)
sl@0
    23
	{}
sl@0
    24
sl@0
    25
EXPORT_C CDbFileStoreDatabase::~CDbFileStoreDatabase()
sl@0
    26
	{
sl@0
    27
	if (iDelete)
sl@0
    28
		{
sl@0
    29
		delete iStore;		// must be destroyed before the file is deleted
sl@0
    30
		iStore=0;
sl@0
    31
sl@0
    32
		// If a debug build - record error
sl@0
    33
		(void)iFs.Delete(*iName);
sl@0
    34
		}
sl@0
    35
	delete iName;
sl@0
    36
	}
sl@0
    37
sl@0
    38
CDbFileStoreDatabase* CDbFileStoreDatabase::NewLC(RFs& aFs)
sl@0
    39
	{
sl@0
    40
	CDbFileStoreDatabase* self=new(ELeave) CDbFileStoreDatabase(aFs);
sl@0
    41
	CleanupStack::PushL(self);
sl@0
    42
	return self;
sl@0
    43
	}
sl@0
    44
sl@0
    45
//
sl@0
    46
// over-ride the store database and just mark the file for deletion
sl@0
    47
//
sl@0
    48
EXPORT_C void CDbFileStoreDatabase::DestroyL()
sl@0
    49
	{
sl@0
    50
	iDelete=ETrue;
sl@0
    51
	}
sl@0
    52
sl@0
    53
//
sl@0
    54
// Provide the "size" and "usage" properties
sl@0
    55
//
sl@0
    56
EXPORT_C TInt CDbFileStoreDatabase::Property(CDbDatabase::TProperty aProperty)
sl@0
    57
	{
sl@0
    58
	switch (aProperty)
sl@0
    59
		{
sl@0
    60
	case CDbDatabase::EUpdateStats:
sl@0
    61
		return 1;
sl@0
    62
	case CDbDatabase::ESize:
sl@0
    63
	case CDbDatabase::EUsage:
sl@0
    64
		{
sl@0
    65
		TInt size;
sl@0
    66
		TInt r=STATIC_CAST(CFileStore&,Store()).File().Size(size);
sl@0
    67
		if (r<0)
sl@0
    68
			return r;
sl@0
    69
		if (aProperty==CDbDatabase::ESize)
sl@0
    70
			return size;
sl@0
    71
		r=iReclaim;
sl@0
    72
		if (r<0)
sl@0
    73
			return r;
sl@0
    74
		return 100-(r*100)/size;	// usage in %
sl@0
    75
		}
sl@0
    76
	default:
sl@0
    77
		return CDbStoreDatabase::Property(aProperty);
sl@0
    78
		}
sl@0
    79
	}
sl@0
    80
sl@0
    81
sl@0
    82
//SYMBIAN_REMOVE_TRIVIAL_ENCRYPTION version of the method.
sl@0
    83
EXPORT_C void CDbFileStoreDatabase::CreateL(const TDesC& aName, TDbFormat::TCreate aMode,
sl@0
    84
                                            const TUidType& aType)
sl@0
    85
	{
sl@0
    86
	__ASSERT(!iName);	// check construction phase
sl@0
    87
//
sl@0
    88
	iName=aName.AllocL();
sl@0
    89
	CFileStore* store;
sl@0
    90
	switch (aMode)
sl@0
    91
		{
sl@0
    92
	default:
sl@0
    93
		__LEAVE(KErrNotSupported);
sl@0
    94
	case TDbFormat::ECreate:
sl@0
    95
		store=CPermanentFileStore::CreateL(iFs,aName,EFileRead|EFileWrite);
sl@0
    96
		break;
sl@0
    97
	case TDbFormat::EReplace:
sl@0
    98
		store=CPermanentFileStore::ReplaceL(iFs,aName,EFileRead|EFileWrite);
sl@0
    99
		break;
sl@0
   100
		};
sl@0
   101
	iStore=store;
sl@0
   102
	iDelete=ETrue;		// cleanup fully in case of failure
sl@0
   103
	store->SetTypeL(aType);
sl@0
   104
	store->SetRootL(CreateRootL(CDbStoreDatabase::ConstructL()));
sl@0
   105
	store->CommitL();
sl@0
   106
	iDelete=EFalse;				// file is now good
sl@0
   107
	}
sl@0
   108
sl@0
   109
// SYMBIAN_REMOVE_TRIVIAL_ENCRYPTION version of the method.
sl@0
   110
// Create the standard file database. The database is the root stream
sl@0
   111
//
sl@0
   112
EXPORT_C CDbDatabase* CDbFileStoreDatabase::CreateL(RFs& aFs, const TDesC& aName,
sl@0
   113
                                                    TDbFormat::TCreate aMode, const TUidType& aType)
sl@0
   114
	{
sl@0
   115
	CDbFileStoreDatabase* self=NewLC(aFs);
sl@0
   116
	self->CreateL(aName,aMode,aType);
sl@0
   117
	CDbDatabase* db=self->InterfaceL();
sl@0
   118
	CleanupStack::Pop(self);
sl@0
   119
	return db;
sl@0
   120
	}
sl@0
   121
sl@0
   122
sl@0
   123
//
sl@0
   124
// default implementation. Database _is_ the root
sl@0
   125
//
sl@0
   126
EXPORT_C TStreamId CDbFileStoreDatabase::CreateRootL(TStreamId aDatabaseId)
sl@0
   127
	{
sl@0
   128
	return aDatabaseId;
sl@0
   129
	}
sl@0
   130
sl@0
   131
//
sl@0
   132
// Open, phase #1
sl@0
   133
// open the file-store and return the root stream id
sl@0
   134
//
sl@0
   135
EXPORT_C void CDbFileStoreDatabase::OpenL(const TDesC& aName,TDbFormat::TOpen aMode)
sl@0
   136
	{
sl@0
   137
	__ASSERT(!iName);	// check construction phase
sl@0
   138
//
sl@0
   139
	iName=aName.AllocL();
sl@0
   140
	const TUint mode=aMode==TDbFormat::EReadOnly ? EFileShareReadersOnly : EFileWrite;
sl@0
   141
	CFileStore* store=CPermanentFileStore::OpenL(iFs,*iName,mode);
sl@0
   142
	iStore=store;
sl@0
   143
	CDbStoreDatabase::RestoreL(DatabaseIdL(store->Root()));
sl@0
   144
	}
sl@0
   145
sl@0
   146
//
sl@0
   147
// default implementation. Database _is_ the root
sl@0
   148
//
sl@0
   149
EXPORT_C TStreamId CDbFileStoreDatabase::DatabaseIdL(TStreamId aRootId)
sl@0
   150
	{
sl@0
   151
	return aRootId;
sl@0
   152
	}
sl@0
   153
sl@0
   154
//
sl@0
   155
// Create the standard file database. The database is the root stream
sl@0
   156
//
sl@0
   157
EXPORT_C CDbSource* CDbFileStoreDatabase::OpenL(RFs& aFs,const TDesC& aName,TDbFormat::TOpen aMode)
sl@0
   158
	{
sl@0
   159
	CDbFileStoreDatabase* self=NewLC(aFs);
sl@0
   160
	self->OpenL(aName,aMode);
sl@0
   161
	CDbSource* src=self->SourceL();
sl@0
   162
	CleanupStack::Pop();			// self
sl@0
   163
	return src;
sl@0
   164
	}
sl@0
   165
sl@0
   166
const TDbFormat KBuiltinFormat=
sl@0
   167
	{
sl@0
   168
	_S("epoc"),&CDbFileStoreDatabase::CreateL,&CDbFileStoreDatabase::OpenL,
sl@0
   169
	{KPermanentFileStoreLayoutUidValue,KDbmsFileDatabaseUidValue}
sl@0
   170
	};
sl@0
   171
	
sl@0
   172
GLDEF_D const TDbDriver KBuiltinDriver={1,&KBuiltinFormat};