Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Comment: | {5037} ensure PatchCode() will work even if OS memory page size is not 4KB |
---|---|
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
3973e3ae61a3c6480cd412f0b3245da2 |
User & Date: | ab 2019-02-13 17:11:25 |
2019-02-15
| ||
11:03 | {5038} fixed SHA256/x64-SSE4.1 process using new GetMemAligned() function check-in: a783f7e4f7 user: ab tags: trunk | |
2019-02-13
| ||
17:11 | {5037} ensure PatchCode() will work even if OS memory page size is not 4KB check-in: 3973e3ae61 user: ab tags: trunk | |
17:08 | {5036} made TSQLRecordProperties and T*AutoCreateFields initialization thread-safe in all cases check-in: 1ad9bf10cc user: ab tags: trunk | |
Changes to SynCommons.pas.
13265 13266 13267 13268 13269 13270 13271 13272 13273 13274 13275 13276 13277 13278 13279 ..... 39143 39144 39145 39146 39147 39148 39149 39150 39151 39152 39153 39154 39155 39156 39157 39158 39159 39160 39161 39162 39163 ..... 39531 39532 39533 39534 39535 39536 39537 39538 39539 39540 39541 39542 39543 39544 39545 39546 39547 39548 ..... 60739 60740 60741 60742 60743 60744 60745 60746 60747 60748 60749 60750 60751 60752 60753 60754 60755 60756 |
// version number // - typically, this includes the major and minor version placed // together in one 32-bit integer // - generally does not include the release or build numbers // - returns Cardinal(-1) in case of failure function GetFileVersion(const FileName: TFileName): cardinal; {$endif} /// returns a JSON object containing basic information about the computer // - including Host, User, CPU, OS, freemem, freedisk... function SystemInfoJson: RawUTF8; type /// the recognized operating systems ................................................................................ id := id+'.'+id; // at least CompanyName.ProductName if SetCurrentProcessExplicitAppUserModelID(pointer(id))<>S_OK then exit; result := true; LastAppUserModelID := AppUserModelID; end; {$else} // wrapper around some low-level OS (non Windows) specific API const _SC_PAGE_SIZE = $1000; {$endif MSWINDOWS} { TFileVersion } constructor TFileVersion.Create(const aFileName: TFileName; aMajor,aMinor,aRelease,aBuild: integer); var M,D: word; ................................................................................ {$else} var PageSize, AlignedAddr: PtrUInt; i: integer; begin if Backup<>nil then for i := 0 to Size-1 do // do not use Move() here PByteArray(Backup)^[i] := PByteArray(Old)^[i]; PageSize := _SC_PAGE_SIZE; AlignedAddr := PtrUInt(Old) and not (PageSize - 1); while PtrUInt(Old) + PtrUInt(Size) >= AlignedAddr + PageSize do Inc(PageSize,_SC_PAGE_SIZE); {$ifdef USEMPROTECT} if mprotect(Pointer(AlignedAddr),PageSize,PROT_READ or PROT_WRITE or PROT_EXEC)=0 then {$else} Do_SysCall(syscall_nr_mprotect,PtrUInt(AlignedAddr),PageSize,PROT_READ or PROT_WRITE or PROT_EXEC); {$endif} try for i := 0 to Size-1 do // do not use Move() here ................................................................................ fBuf := MapViewOfFile(fMap,FILE_MAP_READ,Hi,Lo,fBufSize); if fBuf=nil then begin // Windows failed to find a contiguous VA space -> fall back on direct read CloseHandle(fMap); fMap := 0; {$else} if aCustomOffset<>0 then if aCustomOffset and (_SC_PAGE_SIZE-1)<>0 then raise ESynException.CreateUTF8('fpmmap(aCustomOffset=%) with pagesize=%', [aCustomOffset,_SC_PAGE_SIZE]) else aCustomOffset := aCustomOffset div _SC_PAGE_SIZE; fBuf := {$ifdef KYLIX3}mmap{$else}fpmmap{$endif}( nil,fBufSize,PROT_READ,MAP_SHARED,fFile,aCustomOffset); if fBuf=MAP_FAILED then begin fBuf := nil; {$endif} end else result := true; |
| < < < < < < < | | | | | | | | |
13265 13266 13267 13268 13269 13270 13271 13272 13273 13274 13275 13276 13277 13278 13279 ..... 39143 39144 39145 39146 39147 39148 39149 39150 39151 39152 39153 39154 39155 39156 ..... 39524 39525 39526 39527 39528 39529 39530 39531 39532 39533 39534 39535 39536 39537 39538 39539 39540 39541 ..... 60732 60733 60734 60735 60736 60737 60738 60739 60740 60741 60742 60743 60744 60745 60746 60747 60748 60749 |
// version number // - typically, this includes the major and minor version placed // together in one 32-bit integer // - generally does not include the release or build numbers // - returns Cardinal(-1) in case of failure function GetFileVersion(const FileName: TFileName): cardinal; {$endif DELPHI6OROLDER} /// returns a JSON object containing basic information about the computer // - including Host, User, CPU, OS, freemem, freedisk... function SystemInfoJson: RawUTF8; type /// the recognized operating systems ................................................................................ id := id+'.'+id; // at least CompanyName.ProductName if SetCurrentProcessExplicitAppUserModelID(pointer(id))<>S_OK then exit; result := true; LastAppUserModelID := AppUserModelID; end; {$endif MSWINDOWS} { TFileVersion } constructor TFileVersion.Create(const aFileName: TFileName; aMajor,aMinor,aRelease,aBuild: integer); var M,D: word; ................................................................................ {$else} var PageSize, AlignedAddr: PtrUInt; i: integer; begin if Backup<>nil then for i := 0 to Size-1 do // do not use Move() here PByteArray(Backup)^[i] := PByteArray(Old)^[i]; PageSize := SystemInfo.dwPageSize; AlignedAddr := PtrUInt(Old) and not (PageSize-1); while PtrUInt(Old)+PtrUInt(Size)>=AlignedAddr+PageSize do Inc(PageSize,SystemInfo.dwPageSize); {$ifdef USEMPROTECT} if mprotect(Pointer(AlignedAddr),PageSize,PROT_READ or PROT_WRITE or PROT_EXEC)=0 then {$else} Do_SysCall(syscall_nr_mprotect,PtrUInt(AlignedAddr),PageSize,PROT_READ or PROT_WRITE or PROT_EXEC); {$endif} try for i := 0 to Size-1 do // do not use Move() here ................................................................................ fBuf := MapViewOfFile(fMap,FILE_MAP_READ,Hi,Lo,fBufSize); if fBuf=nil then begin // Windows failed to find a contiguous VA space -> fall back on direct read CloseHandle(fMap); fMap := 0; {$else} if aCustomOffset<>0 then if aCustomOffset and (SystemInfo.dwPageSize-1)<>0 then raise ESynException.CreateUTF8('fpmmap(aCustomOffset=%) with SystemInfo.dwPageSize=%', [aCustomOffset,SystemInfo.dwPageSize]) else aCustomOffset := aCustomOffset div SystemInfo.dwPageSize; fBuf := {$ifdef KYLIX3}mmap{$else}fpmmap{$endif}( nil,fBufSize,PROT_READ,MAP_SHARED,fFile,aCustomOffset); if fBuf=MAP_FAILED then begin fBuf := nil; {$endif} end else result := true; |
Changes to SynopseCommit.inc.
1 |
'1.18.5036'
|
| |
1 |
'1.18.5037'
|