charconvfw/charconvplugins/src/shared/JISBASE_SHARED_2.CPP
branchRCL_3
changeset 54 748ec5531811
parent 0 1fb32624e06b
child 55 336bee5c2d35
--- a/charconvfw/charconvplugins/src/shared/JISBASE_SHARED_2.CPP	Wed Jun 09 11:40:52 2010 +0300
+++ b/charconvfw/charconvplugins/src/shared/JISBASE_SHARED_2.CPP	Tue Aug 31 17:01:26 2010 +0300
@@ -161,6 +161,7 @@
 
 EXPORT_C TInt CnvJisBase::ConvertToUnicode(CCnvCharacterSetConverter::TEndianness aDefaultEndiannessOfForeignCharacters, TDes16& aUnicode, const TDesC8& aForeign, TInt& aState, TInt& aNumberOfUnconvertibleCharacters, TInt& aIndexOfFirstByteOfFirstUnconvertibleCharacter)
 	{
+    TInt ret =KErrNone;
     TBool pictographsSupported = FeatureManager::FeatureSupported(KFeatureIdJapanesePicto);
     RArray<CnvUtilities::SState> states;
     if ( pictographsSupported )
@@ -169,60 +170,62 @@
         CnvUtilities::SState state;
         state.iEscapeSequence=&KLit8EscapeSequenceForJisRoman; // Jis-Roman is the default state, so it must come first in the array
         state.iConversionData=&CnvJisRoman::ConversionData();
-        states.Append(state);
+        ret |= states.Append(state);
         state.iEscapeSequence=&KLit8EscapeSequenceForJisRomanIncorrect;
         state.iConversionData=&CnvJisRoman::ConversionData();
-        states.Append(state);
+        ret |= states.Append(state);
         state.iEscapeSequence=&KLit8EscapeSequenceForAscii;
         state.iConversionData=&CCnvCharacterSetConverter::AsciiConversionData();
-        states.Append(state);
+        ret |= states.Append(state);
     
         SetStatesForPictograph(states);
 
         state.iEscapeSequence=&KLit8EscapeSequenceForHalfWidthKatakana;
         state.iConversionData=&halfWidthKatakana7ConversionData;
-        states.Append(state);
+        ret |= states.Append(state);
         state.iEscapeSequence=&KLit8EscapeSequenceForJisC6226_1978;
         state.iConversionData=&CnvJisX0208::ConversionData();
-        states.Append(state);
+        ret |= states.Append(state);
         state.iEscapeSequence=&KLit8EscapeSequenceForJisX0208_1983;
         state.iConversionData=&CnvJisX0208::ConversionData();
-        states.Append(state);
+        ret |= states.Append(state);
         state.iEscapeSequence=&KLit8EscapeSequenceForJisX0208_199x;
         state.iConversionData=&CnvJisX0208::ConversionData();
-        states.Append(state);
+        ret |= states.Append(state);
         state.iEscapeSequence=&KLit8EscapeSequenceForJisX0212_1990;
         state.iConversionData=&CnvJisX0212::ConversionData();
-        states.Append(state);
+        ret |= states.Append(state);
         }
     else
         {            
         CnvUtilities::SState state;
     	state.iEscapeSequence=&KLit8EscapeSequenceForJisRoman; // Jis-Roman is the default state, so it must come first in the array
     	state.iConversionData=&CnvJisRoman::ConversionData();
-        states.Append(state);
+    	ret |= states.Append(state);
         state.iEscapeSequence=&KLit8EscapeSequenceForJisRomanIncorrect;
     	state.iConversionData=&CnvJisRoman::ConversionData();	
-        states.Append(state);
+    	ret |= states.Append(state);
     	state.iEscapeSequence=&KLit8EscapeSequenceForAscii;
     	state.iConversionData=&CCnvCharacterSetConverter::AsciiConversionData();
-        states.Append(state);
+    	ret |= states.Append(state);
     	state.iEscapeSequence=&KLit8EscapeSequenceForHalfWidthKatakana;
     	state.iConversionData=&halfWidthKatakana7ConversionData;
-        states.Append(state);
+    	ret |= states.Append(state);
     	state.iEscapeSequence=&KLit8EscapeSequenceForJisC6226_1978;
     	state.iConversionData=&CnvJisX0208::ConversionData();
-        states.Append(state);
+    	ret |= states.Append(state);
     	state.iEscapeSequence=&KLit8EscapeSequenceForJisX0208_1983;
     	state.iConversionData=&CnvJisX0208::ConversionData();
-        states.Append(state);
+    	ret |= states.Append(state);
     	state.iEscapeSequence=&KLit8EscapeSequenceForJisX0208_199x;
     	state.iConversionData=&CnvJisX0208::ConversionData();
-        states.Append(state);
+    	ret |= states.Append(state);
     	state.iEscapeSequence=&KLit8EscapeSequenceForJisX0212_1990;
     	state.iConversionData=&CnvJisX0212::ConversionData();
-        states.Append(state);
+    	ret |= states.Append(state);
         }
+    __ASSERT_DEBUG(!ret, User::Panic(_L("RArray append failure"), ret));
+    
 	const TArray<CnvUtilities::SState> arrayOfStates(states.Array());
 	aUnicode.SetLength(0);
 	const TUint8* const pointerToFirstByte=aForeign.Ptr();
@@ -313,6 +316,7 @@
 				const TInt returnValue=(*appendConvertToUnicode)(aDefaultEndiannessOfForeignCharacters, aUnicode, runToConvert, aState, numberOfUnconvertibleCharacters, indexOfFirstByteOfFirstUnconvertibleCharacter, arrayOfStates, outputConversionFlags, inputConversionFlags);
 				if (returnValue<0)
 					{
+                    states.Close();
 					return returnValue; // this is an error-code
 					}
 				if (numberOfUnconvertibleCharacters>0)