mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-14 10:09:20 +02:00
merge r17601 from cpstrnew branch by inoussa:
Correct fpc_ansistr_to_ansistr and fpc_short_to_ansistr and test git-svn-id: trunk@19121 -
This commit is contained in:
parent
7c21524892
commit
aaf5392315
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -9955,6 +9955,7 @@ tests/test/tcpstrconcatmulti.pp svneol=native#text/plain
|
|||||||
tests/test/tcpstrconcatmulti2.pp svneol=native#text/plain
|
tests/test/tcpstrconcatmulti2.pp svneol=native#text/plain
|
||||||
tests/test/tcpstrsetlength.pp svneol=native#text/plain
|
tests/test/tcpstrsetlength.pp svneol=native#text/plain
|
||||||
tests/test/tcpstrsetlength2.pp svneol=native#text/plain
|
tests/test/tcpstrsetlength2.pp svneol=native#text/plain
|
||||||
|
tests/test/tcpstrshortstr2ansistr.pp svneol=native#text/plain
|
||||||
tests/test/tcptypedconst.pp svneol=native#text/plain
|
tests/test/tcptypedconst.pp svneol=native#text/plain
|
||||||
tests/test/tcptypedconst2.pp svneol=native#text/plain
|
tests/test/tcptypedconst2.pp svneol=native#text/plain
|
||||||
tests/test/tcptypedconst3.pp svneol=native#text/plain
|
tests/test/tcptypedconst3.pp svneol=native#text/plain
|
||||||
|
@ -2979,7 +2979,7 @@ implementation
|
|||||||
end
|
end
|
||||||
{ encoding parameter required? }
|
{ encoding parameter required? }
|
||||||
else if (tstringdef(resultdef).stringtype=st_ansistring) and
|
else if (tstringdef(resultdef).stringtype=st_ansistring) and
|
||||||
((tstringdef(left.resultdef).stringtype in [st_widestring,st_unicodestring]) or
|
((tstringdef(left.resultdef).stringtype in [st_widestring,st_unicodestring,st_shortstring]) or
|
||||||
{ ansistring to ansistring and no RawByteString envolved? }
|
{ ansistring to ansistring and no RawByteString envolved? }
|
||||||
(//(tstringdef(resultdef).encoding<>65535) and
|
(//(tstringdef(resultdef).encoding<>65535) and
|
||||||
(tstringdef(left.resultdef).stringtype=st_ansistring)
|
(tstringdef(left.resultdef).stringtype=st_ansistring)
|
||||||
|
@ -426,7 +426,7 @@ begin
|
|||||||
begin
|
begin
|
||||||
SetLength(result,Size);
|
SetLength(result,Size);
|
||||||
Move(S[1],result[1],Size);
|
Move(S[1],result[1],Size);
|
||||||
PAnsiRec(Pointer(S)-AnsiFirstOff)^.CodePage:=cp;
|
PAnsiRec(Pointer(result)-AnsiFirstOff)^.CodePage:=cp;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
@ -489,17 +489,29 @@ end;
|
|||||||
{$endif FPC_STRTOSHORTSTRINGPROC}
|
{$endif FPC_STRTOSHORTSTRINGPROC}
|
||||||
|
|
||||||
|
|
||||||
Function fpc_ShortStr_To_AnsiStr (Const S2 : ShortString): ansistring; compilerproc;
|
Function fpc_ShortStr_To_AnsiStr (Const S2 : ShortString{$ifdef FPC_HAS_CPSTRING};cp : TSystemCodePage{$endif FPC_HAS_CPSTRING}): RawByteString; compilerproc;
|
||||||
{
|
{
|
||||||
Converts a ShortString to a AnsiString;
|
Converts a ShortString to a AnsiString;
|
||||||
}
|
}
|
||||||
Var
|
Var
|
||||||
Size : SizeInt;
|
Size : SizeInt;
|
||||||
|
{$ifndef FPC_HAS_CPSTRING}
|
||||||
|
cp : TSystemCodePage;
|
||||||
|
{$endif FPC_HAS_CPSTRING}
|
||||||
begin
|
begin
|
||||||
|
{$ifdef FPC_HAS_CPSTRING}
|
||||||
|
if (cp=0) then
|
||||||
|
cp:=DefaultSystemCodePage;
|
||||||
|
{$else FPC_HAS_CPSTRING}
|
||||||
|
cp:=DefaultSystemCodePage;
|
||||||
|
{$endif FPC_HAS_CPSTRING}
|
||||||
Size:=Length(S2);
|
Size:=Length(S2);
|
||||||
Setlength (fpc_ShortStr_To_AnsiStr,Size);
|
Setlength (fpc_ShortStr_To_AnsiStr,Size);
|
||||||
if Size>0 then
|
if Size>0 then
|
||||||
Move(S2[1],Pointer(fpc_ShortStr_To_AnsiStr)^,Size);
|
begin
|
||||||
|
Move(S2[1],Pointer(fpc_ShortStr_To_AnsiStr)^,Size);
|
||||||
|
SetCodePage(fpc_ShortStr_To_AnsiStr,cp,False);
|
||||||
|
end
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Function fpc_Char_To_AnsiStr(const c : Char): AnsiString; compilerproc;
|
Function fpc_Char_To_AnsiStr(const c : Char): AnsiString; compilerproc;
|
||||||
|
@ -269,7 +269,7 @@ procedure fpc_AnsiStr_To_ShortStr (out res : shortstring;const S2 : Ansistring);
|
|||||||
{$ifdef FPC_HAS_CPSTRING}
|
{$ifdef FPC_HAS_CPSTRING}
|
||||||
Function fpc_AnsiStr_To_AnsiStr (const S : RawByteString;cp : TSystemCodePage): RawByteString; compilerproc;
|
Function fpc_AnsiStr_To_AnsiStr (const S : RawByteString;cp : TSystemCodePage): RawByteString; compilerproc;
|
||||||
{$endif FPC_HAS_CPSTRING}
|
{$endif FPC_HAS_CPSTRING}
|
||||||
Function fpc_ShortStr_To_AnsiStr (Const S2 : ShortString): ansistring; compilerproc;
|
Function fpc_ShortStr_To_AnsiStr (Const S2 : ShortString{$ifdef FPC_HAS_CPSTRING};cp : TSystemCodePage{$endif FPC_HAS_CPSTRING}): RawByteString; compilerproc;
|
||||||
Function fpc_Char_To_AnsiStr(const c : Char): AnsiString; compilerproc;
|
Function fpc_Char_To_AnsiStr(const c : Char): AnsiString; compilerproc;
|
||||||
|
|
||||||
Function fpc_PChar_To_AnsiStr(const p : pchar): ansistring; compilerproc;
|
Function fpc_PChar_To_AnsiStr(const p : pchar): ansistring; compilerproc;
|
||||||
|
49
tests/test/tcpstrshortstr2ansistr.pp
Normal file
49
tests/test/tcpstrshortstr2ansistr.pp
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
{$mode objfpc} {$H+}
|
||||||
|
uses
|
||||||
|
{$ifdef unix}
|
||||||
|
cwstring,
|
||||||
|
{$endif unix}
|
||||||
|
sysutils;
|
||||||
|
|
||||||
|
type
|
||||||
|
ts866 = type string<866>;
|
||||||
|
ts1252 = type string<1252>;
|
||||||
|
|
||||||
|
procedure doerror(ANumber : Integer);
|
||||||
|
begin
|
||||||
|
WriteLn('error ',ANumber);
|
||||||
|
Halt(ANumber);
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
s : ts866;
|
||||||
|
x : ts1252;
|
||||||
|
ss : shortstring;
|
||||||
|
i : Integer;
|
||||||
|
begin
|
||||||
|
ss := #128#156#196;
|
||||||
|
|
||||||
|
s := ss;
|
||||||
|
if (StringCodePage(s) <> 866) then
|
||||||
|
doerror(1);
|
||||||
|
if (Length(s) <> Length(ss)) then
|
||||||
|
doerror(2);
|
||||||
|
for i := 1 to Length(s) do
|
||||||
|
begin
|
||||||
|
if (Byte(s[i]) <> Byte(ss[i])) then
|
||||||
|
doerror(3)
|
||||||
|
end;
|
||||||
|
|
||||||
|
x := ss;
|
||||||
|
if (StringCodePage(x) <> 1252) then
|
||||||
|
doerror(4);
|
||||||
|
if (Length(x) <> Length(ss)) then
|
||||||
|
doerror(5);
|
||||||
|
for i := 1 to Length(x) do
|
||||||
|
begin
|
||||||
|
if (Byte(x[i]) <> Byte(ss[i])) then
|
||||||
|
doerror(6)
|
||||||
|
end;
|
||||||
|
|
||||||
|
WriteLn('Ok');
|
||||||
|
end.
|
Loading…
Reference in New Issue
Block a user