author | hgs |
Mon, 27 Sep 2010 11:59:56 +0100 | |
changeset 51 | 7d4490026038 |
parent 31 | ba1c4f4a893f |
permissions | -rw-r--r-- |
51 | 1 |
// Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies). |
0
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
2 |
// All rights reserved. |
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
3 |
// This component and the accompanying materials are made available |
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
4 |
// under the terms of "Eclipse Public License v1.0" |
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
5 |
// which accompanies this distribution, and is available |
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
6 |
// at the URL "http://www.eclipse.org/legal/epl-v10.html". |
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
7 |
// |
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
8 |
// Initial Contributors: |
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
9 |
// Nokia Corporation - initial contribution. |
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
10 |
// |
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
11 |
// Contributors: |
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
12 |
// |
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
13 |
// Description: |
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
14 |
// |
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
15 |
|
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
16 |
|
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
17 |
#include <bautils.h> |
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
18 |
#include "logservpanic.h" |
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
19 |
#include "LogServResourceInterpreter.h" |
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
20 |
|
51 | 21 |
//LogWrap resoure file name |
22 |
_LIT(KResourceFileWrapper, "\\resource\\logeng\\logwrap.rsc"); |
|
0
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
23 |
|
51 | 24 |
const TInt KStringsArrayGranularity = 20; |
0
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
25 |
|
51 | 26 |
/** |
27 |
Creates a CLogServResourceInterpreter instance. |
|
28 |
The created CLogServResourceInterpreter instance will load into memory the content of the LogWrap |
|
29 |
resource file. |
|
30 |
||
31 |
@param aFs Reference to a file session object, used later for reading the content of the resource file. |
|
0
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
32 |
|
51 | 33 |
@leave KErrNoMemory, an out of memory condition has occurred; |
34 |
Note that the function may leave with database specific errors and |
|
35 |
other system-wide error codes. |
|
36 |
*/ |
|
37 |
CLogServResourceInterpreter* CLogServResourceInterpreter::NewL(RFs& aFs) |
|
0
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
38 |
{ |
51 | 39 |
CLogServResourceInterpreter* self = new (ELeave) CLogServResourceInterpreter(aFs); |
0
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
40 |
CleanupStack::PushL(self); |
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
41 |
self->ConstructL(); |
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
42 |
CleanupStack::Pop(self); |
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
43 |
return self; |
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
44 |
} |
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
45 |
|
51 | 46 |
/** |
47 |
Destroys CLogServResourceInterpreter object deallocating all previously allocated resources |
|
48 |
(the resource file, the memory for the loaded resource strings) |
|
49 |
*/ |
|
50 |
CLogServResourceInterpreter::~CLogServResourceInterpreter() |
|
0
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
51 |
{ |
51 | 52 |
iFile.Close(); |
53 |
for(TInt i=iStrings.Count()-1;i>=0;--i) |
|
54 |
{ |
|
55 |
delete iStrings[i].iString; |
|
56 |
} |
|
57 |
iStrings.Close(); |
|
58 |
} |
|
0
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
59 |
|
51 | 60 |
/** |
61 |
Creates a resource reader object for the resource identified by the aId parameter. |
|
62 |
||
63 |
@param aReader Output parameter. The resource reader object, created by this call. |
|
64 |
@param aId Resource item identifier. |
|
65 |
||
66 |
@leave KErrNoMemory, an out of memory condition has occurred; |
|
67 |
Note that the function may leave with database specific errors and |
|
68 |
other system-wide error codes. |
|
69 |
*/ |
|
70 |
void CLogServResourceInterpreter::CreateResourceReaderLC(TResourceReader& aReader, TInt aId) |
|
71 |
{ |
|
72 |
HBufC8* string = GetStringL(aId); |
|
73 |
//Resource reader needs to be created with a copy of the string resource as otherwise |
|
74 |
//our "HBufC8*" string will be deleted when the resource reader is deleted! |
|
75 |
aReader.SetBuffer(string->AllocLC()); |
|
0
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
76 |
} |
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
77 |
|
51 | 78 |
/** |
79 |
Initializes CLogServResourceInterpreter data members with their default values. |
|
80 |
@param aFs Reference to a file session object, used later for reading the content of the resource file. |
|
81 |
*/ |
|
82 |
CLogServResourceInterpreter::CLogServResourceInterpreter(RFs& aFs) : |
|
83 |
iFs(aFs), |
|
84 |
iStrings(KStringsArrayGranularity) |
|
85 |
{ |
|
86 |
} |
|
0
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
87 |
|
51 | 88 |
/** |
89 |
Loads the content of the LogWrap resource file. |
|
90 |
*/ |
|
91 |
void CLogServResourceInterpreter::ConstructL() |
|
0
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
92 |
{ |
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
93 |
// Find the resource file |
51 | 94 |
TFileName fileName; |
0
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
95 |
fileName.Copy(RProcess().FileName()); |
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
96 |
|
51 | 97 |
TParse parse; |
98 |
parse.Set(KResourceFileWrapper, &fileName, NULL); |
|
0
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
99 |
fileName = parse.FullName(); |
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
100 |
|
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
101 |
// Get language of resource file |
51 | 102 |
BaflUtils::NearestLanguageFile(iFs, fileName); |
0
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
103 |
|
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
104 |
// Check the entry exists on this drive (e.g. if we are running the log server |
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
105 |
// from RAM, then default to the ROM if no RSC on the current drive exists). |
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
106 |
TEntry fsEntry; |
51 | 107 |
TInt err = iFs.Entry(fileName, fsEntry); |
108 |
if(err == KErrNotFound || err == KErrPathNotFound) |
|
0
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
109 |
{ |
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
110 |
// Switch to ROM (we might already have been launching from the ROM, |
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
111 |
// in which case this will have no effect anyway). |
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
112 |
fileName[0] = 'Z'; |
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
113 |
} |
51 | 114 |
iFile.OpenL(iFs, fileName); |
0
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
115 |
} |
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
116 |
|
51 | 117 |
/** |
118 |
Attempts to read the resource string, identified by the aId parameter, from |
|
119 |
the iStrings array. If the resource stringis not there, it will be loaded from the |
|
120 |
resource file and put in iStrings array. |
|
121 |
@param aId Resource string identifier. |
|
122 |
@return HBufC8 object containing the requested string |
|
123 |
@leave KErrNoMemory, an out of memory condition has occurred; |
|
124 |
Note that the function may leave with database specific errors and |
|
125 |
other system-wide error codes. |
|
126 |
*/ |
|
127 |
HBufC8* CLogServResourceInterpreter::GetStringL(TInt aId) |
|
0
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
128 |
{ |
51 | 129 |
TLinearOrder<TResourceString> order(&CLogServResourceInterpreter::Compare); |
130 |
//Try to find the requested resource in the cached strings |
|
131 |
TInt idx = iStrings.FindInOrder(TResourceString(aId, NULL), order); |
|
132 |
if(idx == KErrNotFound) |
|
0
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
133 |
{ |
51 | 134 |
//String not in the cache, load it from the resource file |
135 |
iStrings.ReserveL(iStrings.Count() + 1); |
|
136 |
HBufC8* buf = iFile.AllocReadL(aId); |
|
137 |
TResourceString entry(aId, buf); |
|
138 |
#ifdef _DEBUG |
|
139 |
TInt err = |
|
140 |
#endif |
|
141 |
iStrings.InsertInOrder(entry, order); |
|
142 |
__ASSERT_DEBUG(err == KErrNone, User::Invariant()); |
|
143 |
return buf; |
|
144 |
} |
|
145 |
return iStrings[idx].iString; |
|
0
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
146 |
} |
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
147 |
|
51 | 148 |
/** |
149 |
Compares two iStrings entries. |
|
150 |
Used for sorting/finding entries in iStrings sorted array. |
|
0
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
151 |
|
51 | 152 |
@param aLeft Left entry to be compared |
153 |
@param aRight Right entry to be compared |
|
154 |
@return -1 aLeft is less than aRight, 0 entries are equal, 1 aLeft is bigger than aRight |
|
155 |
*/ |
|
156 |
TInt CLogServResourceInterpreter::Compare(const CLogServResourceInterpreter::TResourceString& aLeft, |
|
157 |
const CLogServResourceInterpreter::TResourceString& aRight) |
|
0
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
158 |
{ |
51 | 159 |
TInt64 res = (TInt64)aLeft.iId - (TInt64)aRight.iId; |
160 |
return res > 0LL ? 1 : (res < 0LL ? -1 : 0); |
|
0
08ec8eefde2f
Revision: 201003
Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
parents:
diff
changeset
|
161 |
} |