From 7fd7eee1c9ab25a5e72d4a3ba966fd4253b8d8c6 Mon Sep 17 00:00:00 2001 From: paul Date: Sat, 17 Sep 2011 13:12:07 +0000 Subject: [PATCH] =?UTF-8?q?merge=20r17330=20from=20cpstrnew=20branch=20by?= =?UTF-8?q?=20michael:=20*=20Patch=20from=20Inoussa,=20fixing=20tunistr1.p?= =?UTF-8?q?p=20and=C2=A0twide1.pp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: trunk@19107 - --- compiler/ncnv.pas | 6 +++--- rtl/inc/ustrings.inc | 8 +++++++- rtl/inc/wstrings.inc | 12 +++++++++++- 3 files changed, 21 insertions(+), 5 deletions(-) diff --git a/compiler/ncnv.pas b/compiler/ncnv.pas index 232fd25a4e..7cfe663698 100644 --- a/compiler/ncnv.pas +++ b/compiler/ncnv.pas @@ -2918,9 +2918,9 @@ implementation else if (tstringdef(resultdef).stringtype=st_ansistring) and ((tstringdef(left.resultdef).stringtype in [st_widestring,st_unicodestring]) or { ansistring to ansistring and no RawByteString envolved? } - ((tstringdef(resultdef).encoding<>65535) and - (tstringdef(left.resultdef).stringtype=st_ansistring) and - (tstringdef(left.resultdef).encoding<>65535) + (//(tstringdef(resultdef).encoding<>65535) and + (tstringdef(left.resultdef).stringtype=st_ansistring) + //(tstringdef(left.resultdef).encoding<>65535) ) ) then result:=ccallnode.createinternres(procname, diff --git a/rtl/inc/ustrings.inc b/rtl/inc/ustrings.inc index c38e664314..4204b73136 100644 --- a/rtl/inc/ustrings.inc +++ b/rtl/inc/ustrings.inc @@ -340,11 +340,17 @@ Function fpc_AnsiStr_To_UnicodeStr (Const S2 : RawByteString): UnicodeString; co } Var Size : SizeInt; + cp: TSystemCodePage; begin result:=''; Size:=Length(S2); if Size>0 then - widestringmanager.Ansi2UnicodeMoveProc(PChar(S2),StringCodePage(S2),result,Size); + begin + cp:=StringCodePage(S2); + if cp=$ffff then + cp:=DefaultSystemCodePage; + widestringmanager.Ansi2UnicodeMoveProc(PChar(S2),cp,result,Size); + end; end; diff --git a/rtl/inc/wstrings.inc b/rtl/inc/wstrings.inc index f2e0e5c7f3..21e6e0144b 100644 --- a/rtl/inc/wstrings.inc +++ b/rtl/inc/wstrings.inc @@ -267,11 +267,21 @@ Function fpc_WideStr_To_AnsiStr (const S2 : WideString{$ifdef FPC_HAS_CPSTRING}; } Var Size : SizeInt; +{$ifndef FPC_HAS_CPSTRING} + cp : TSystemCodePage; +{$endif FPC_HAS_CPSTRING} begin +{$ifndef FPC_HAS_CPSTRING} + cp:=$ffff; +{$endif FPC_HAS_CPSTRING} result:=''; Size:=Length(S2); if Size>0 then - widestringmanager.Wide2AnsiMoveProc(PWideChar(Pointer(S2)),result,{$ifdef FPC_HAS_CPSTRING}cp{$else}TSystemCodePage(0){$endif FPC_HAS_CPSTRING},Size); + begin + if cp=$ffff then + cp:=DefaultSystemCodePage; + widestringmanager.Wide2AnsiMoveProc(PWideChar(Pointer(S2)),result,cp,Size); + end; end;