mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-05-02 09:33:41 +02:00
67 lines
1.5 KiB
PHP
67 lines
1.5 KiB
PHP
|
|
{$ifdef FPC_COMPILING_SYSCALL_UNIT}
|
|
|
|
{ these variables are used inside osysc.inc file
|
|
but needed here also if compiling syscall unit. }
|
|
{$i errno.inc}
|
|
{$i ptypes.inc}
|
|
|
|
{$endif FPC_COMPILING_SYSCALL_UNIT}
|
|
|
|
{$ifndef FPC_IS_SYSTEM}
|
|
|
|
function geterrno:longint; external name 'FPC_SYS_GETERRNO';
|
|
procedure seterrno(err:longint); external name 'FPC_SYS_SETERRNO';
|
|
|
|
{$endif FPC_IS_SYSTEM}
|
|
|
|
procedure SetSyscallNumbers;
|
|
|
|
Var
|
|
mib : array[0..1] of cint;
|
|
release : shortstring;
|
|
len : size_t;
|
|
oerrno : cint;
|
|
err : word;
|
|
point, c : char;
|
|
i, version_major, version_minor, version : cint;
|
|
Begin
|
|
mib[0] := 1{ CTL_KERN};
|
|
mib[1] := 2{KERN_OSRELEASE};
|
|
len := sizeof (release) - 1;
|
|
oerrno := geterrno;
|
|
|
|
if (do_syscall(syscall_nr_sysctl,TSysParam(@mib), 2, TSysParam(@release[1]),
|
|
TSysParam(@len), TSysParam(NIL), 0) = -1) Then
|
|
Begin
|
|
if (geterrno = ESysENOMEM) Then
|
|
seterrno(oerrno);
|
|
version_major:=3;
|
|
version_minor:=9;
|
|
End
|
|
else
|
|
begin
|
|
setlength(release,len);
|
|
i:=0;
|
|
while (i < len) do
|
|
begin
|
|
if (release[i]='.') then
|
|
break;
|
|
inc (i);
|
|
end;
|
|
setlength(release,i-1);
|
|
val (release, version_major, err);
|
|
if err<> 0 then
|
|
version_major:=3;
|
|
setlength(release,len);
|
|
release:=copy(release,i+1,len);
|
|
val (release, version_minor, err);
|
|
if err<> 0 then
|
|
version_minor:=9;
|
|
end;
|
|
|
|
version:=version_major * 1000 + version_minor;
|
|
|
|
{ version-specific checks and setting of compatibility flags can be inserted here }
|
|
end;
|