From 1af45d7ec0fa45a3d1a322929eff690959dc93f7 Mon Sep 17 00:00:00 2001 From: paul Date: Tue, 31 Jul 2012 01:24:36 +0000 Subject: [PATCH] rtl: don't perform unneeded string conversions if string codepage matches codepage to convert (thanks to Sergey) git-svn-id: trunk@21987 - --- rtl/inc/text.inc | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/rtl/inc/text.inc b/rtl/inc/text.inc index 127ee82619..47d716f395 100644 --- a/rtl/inc/text.inc +++ b/rtl/inc/text.inc @@ -702,14 +702,17 @@ begin SLen:=Length(s); If Len>SLen Then fpc_WriteBlanks(f,Len-SLen); - if slen > 0 then + if SLen > 0 then begin {$if defined(FPC_HAS_CPSTRING) and defined(FPC_HAS_FEATURE_ANSISTRINGS)} - a:=fpc_AnsiStr_To_AnsiStr(S,TextRec(f).CodePage); - fpc_WriteBuffer(f,PAnsiChar(a)^,Length(a)); - {$else} - fpc_WriteBuffer(f,PAnsiChar(s)^,SLen); + if TextRec(f).CodePage<>StringCodePage(S) then + begin + a:=fpc_AnsiStr_To_AnsiStr(S,TextRec(f).CodePage); + fpc_WriteBuffer(f,PAnsiChar(a)^,Length(a)); + end + else {$endif} + fpc_WriteBuffer(f,PAnsiChar(s)^,SLen); end; end; fmInput: InOutRes:=105 @@ -1344,7 +1347,8 @@ Begin SetLength(s,Slen); {$ifdef FPC_HAS_CPSTRING} SetCodePage(s,TextRec(f).CodePage,false); - s:=fpc_AnsiStr_To_AnsiStr(s,cp); + if cp<>TextRec(f).CodePage then + s:=fpc_AnsiStr_To_AnsiStr(s,cp); {$endif FPC_HAS_CPSTRING} End;