From 6d2a7a1b27c85a67ea35210900d5e5e27d8ba9d4 Mon Sep 17 00:00:00 2001 From: pierre Date: Thu, 8 Aug 2019 06:24:47 +0000 Subject: [PATCH] Fix change_endian code to read double and single float data git-svn-id: trunk@42600 - --- compiler/entfile.pas | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/compiler/entfile.pas b/compiler/entfile.pas index d91e99f994..e6161acd18 100644 --- a/compiler/entfile.pas +++ b/compiler/entfile.pas @@ -1202,7 +1202,9 @@ function tentryfile.getrealsize(sizeofreal : longint):entryreal; var e : entryreal; d : double; + di : qword;{ integer of same size as double } s : single; + si : dword; { integer of same size as single } begin if sizeofreal=sizeof(e) then begin @@ -1242,9 +1244,11 @@ begin end; readdata(d,sizeof(d)); if change_endian then - result:=swapendian(pqword(@d)^) - else - result:=d; + begin + di:=swapendian(pqword(@d)^); + d:=pdouble(@di)^; + end; + result:=d; inc(entryidx,sizeof(d)); result:=d; {$ifdef DEBUG_PPU} @@ -1267,9 +1271,11 @@ begin end; readdata(s,sizeof(s)); if change_endian then - result:=swapendian(pdword(@s)^) - else - result:=s; + begin + si:=swapendian(pdword(@s)^); + s:=psingle(@si)^; + end; + result:=s; inc(entryidx,sizeof(s)); result:=s; {$ifdef DEBUG_PPU}