123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- {$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}
- var
- use_openbsd_getdirentries_49 : boolean = false;
- use_getdirentries_syscall : boolean = true;
- 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;
- if version >= 5005 then
- begin
- syscall_nr_waitpid := syscall_nr_wait4_55;
- syscall_nr_setitimer := syscall_nr_setitimer_55;
- syscall_nr_getitimer := syscall_nr_getitimer_55;
- syscall_nr_gettimeofday := syscall_nr_gettimeofday_55;
- syscall_nr_settimeofday := syscall_nr_settimeofday_55;
- syscall_nr_clock_gettime := syscall_nr_clock_gettime_55;
- syscall_nr_clock_settime := syscall_nr_clock_settime_55;
- syscall_nr_clock_getres := syscall_nr_clock_getres_55;
- syscall_nr_select := syscall_nr_select_55;
- syscall_nr_getrusage := syscall_nr_getrusage_55;
- syscall_nr_utimes := syscall_nr_utimes_55;
- syscall_nr_futimes := syscall_nr_futimes_55;
- syscall_nr_nanosleep := syscall_nr_nanosleep_55;
- syscall_nr_kevent := syscall_nr_kevent_55;
- end;
- if version>= 5004 then
- begin
- syscall_nr_statfs := syscall_nr_statfs_54;
- syscall_nr_fstatfs := syscall_nr_fstatfs_54;
- syscall_nr_fhstatfs := syscall_nr_fhstatfs_54;
- end
- else if version >= 4004 then
- begin
- syscall_nr_statfs := syscall_nr_statfs_44;
- syscall_nr_fstatfs := syscall_nr_fstatfs_44;
- syscall_nr_fhstatfs := syscall_nr_fhstatfs_44;
- end
- else if version < 2006 then
- begin
- syscall_nr_statfs := syscall_nr_statfs_20;
- syscall_nr_fstatfs := syscall_nr_fstatfs_20;
- syscall_nr_pipe := syscall_nr_pipe_20;
- end;
- if version>= 5005 then
- begin
- syscall_nr_stat := syscall_nr_stat_55;
- syscall_nr_fstat := syscall_nr_fstat_55;
- syscall_nr_lstat := syscall_nr_lstat_55;
- syscall_nr_fstatat := syscall_nr_fstatat_55;
- end
- else if version < 3006 then
- begin
- syscall_nr_stat := syscall_nr_stat_20;
- syscall_nr_fstat := syscall_nr_fstat_20;
- syscall_nr_lstat := syscall_nr_lstat_20;
- syscall_nr_fhstat := syscall_nr_fhstat_20;
- end;
- if version < 3005 then
- syscall_nr_sigaltstack := syscall_nr_sigaltstack_20;
- if version = 5001 then
- syscall_nr___tfork := syscall_nr___tfork_51
- else if version > 5001 then
- syscall_nr___tfork := syscall_nr___tfork_52;
- if version >= 5005 then
- begin
- { FIXME: what should we do here? }
- syscall_nr_getdirentries := -1;
- use_getdirentries_syscall:=false;
- end
- else if version >= 4009 then
- begin
- syscall_nr_getdirentries := syscall_nr_getdirentries_49;
- use_openbsd_getdirentries_49:=true;
- end;
- end;
|