浏览代码

* made Byte/Word/Long/Int64Rec endian safe
+ Int128/OWordRec

git-svn-id: trunk@16279 -

florian 14 年之前
父节点
当前提交
b4c912bf92
共有 1 个文件被更改,包括 40 次插入4 次删除
  1. 40 4
      rtl/objpas/sysutils/sysutilh.inc

+ 40 - 4
rtl/objpas/sysutils/sysutilh.inc

@@ -41,21 +41,57 @@ type
 
 
    LongRec = packed record
    LongRec = packed record
       case Integer of
       case Integer of
+{$ifdef FPC_LITTLE_ENDIAN}
         0 : (Lo,Hi : Word);
         0 : (Lo,Hi : Word);
+{$else FPC_LITTLE_ENDIAN}
+        0 : (Hi,Lo : Word);
+{$endif FPC_LITTLE_ENDIAN}
         1 : (Bytes : Array[0..3] of Byte);
         1 : (Bytes : Array[0..3] of Byte);
    end;
    end;
 
 
    WordRec = packed record
    WordRec = packed record
+{$ifdef FPC_LITTLE_ENDIAN}
      Lo,Hi : Byte;
      Lo,Hi : Byte;
+{$else FPC_LITTLE_ENDIAN}
+     Hi,Lo : Byte;
+{$endif FPC_LITTLE_ENDIAN}
    end;
    end;
 
 
    Int64Rec = packed record
    Int64Rec = packed record
       case integer of
       case integer of
+{$ifdef FPC_LITTLE_ENDIAN}
         0 : (Lo,Hi : Cardinal);
         0 : (Lo,Hi : Cardinal);
+{$else FPC_LITTLE_ENDIAN}
+        0 : (Hi,Lo : Cardinal);
+{$endif FPC_LITTLE_ENDIAN}
         1 : (Words : Array[0..3] of Word);
         1 : (Words : Array[0..3] of Word);
         2 : (Bytes : Array[0..7] of Byte);
         2 : (Bytes : Array[0..7] of Byte);
    end;
    end;
 
 
+   Int128Rec = packed record
+      case integer of
+{$ifdef FPC_LITTLE_ENDIAN}
+        0 : (Lo,Hi : QWord);
+{$else FPC_LITTLE_ENDIAN}
+        0 : (Hi,Lo : QWord);
+{$endif FPC_LITTLE_ENDIAN}
+        1 : (DWords : Array[0..3] of DWord);
+        2 : (Words : Array[0..7] of Word);
+        3 : (Bytes : Array[0..15] of Byte);
+   end;
+
+   OWordRec = packed record
+      case integer of
+{$ifdef FPC_LITTLE_ENDIAN}
+        0 : (Lo,Hi : QWord);
+{$else FPC_LITTLE_ENDIAN}
+        0 : (Hi,Lo : QWord);
+{$endif FPC_LITTLE_ENDIAN}
+        1 : (DWords : Array[0..3] of DWord);
+        2 : (Words : Array[0..7] of Word);
+        3 : (Bytes : Array[0..15] of Byte);
+   end;
+
    PByteArray = ^TByteArray;
    PByteArray = ^TByteArray;
    TByteArray = Array[0..32767] of Byte;
    TByteArray = Array[0..32767] of Byte;
 
 
@@ -186,7 +222,7 @@ Var
 
 
 Type
 Type
    TCreateGUIDFunc = Function(Out GUID : TGUID) : Integer;
    TCreateGUIDFunc = Function(Out GUID : TGUID) : Integer;
-   
+
 Var
 Var
    OnCreateGUID : TCreateGUIDFunc = Nil;
    OnCreateGUID : TCreateGUIDFunc = Nil;
    Function CreateGUID(out GUID : TGUID) : Integer;
    Function CreateGUID(out GUID : TGUID) : Integer;
@@ -233,7 +269,7 @@ Type
   { unicode string functions }
   { unicode string functions }
   {$i sysunih.inc}
   {$i sysunih.inc}
 {$endif FPC_HAS_UNICODESTRING}
 {$endif FPC_HAS_UNICODESTRING}
-  
+
   { Read filename handling functions declaration }
   { Read filename handling functions declaration }
   {$i finah.inc}
   {$i finah.inc}
 
 
@@ -253,9 +289,9 @@ Type
 
 
   function SafeLoadLibrary(const FileName: AnsiString;
   function SafeLoadLibrary(const FileName: AnsiString;
     ErrorMode: DWord = {$ifdef windows}SEM_NOOPENFILEERRORBOX{$else windows}0{$endif windows}): HMODULE;
     ErrorMode: DWord = {$ifdef windows}SEM_NOOPENFILEERRORBOX{$else windows}0{$endif windows}): HMODULE;
-    
+
   function GetModuleName(Module: HMODULE): string;
   function GetModuleName(Module: HMODULE): string;
-  
+
 { some packages and unit related constants for compatibility }
 { some packages and unit related constants for compatibility }
 
 
 const
 const