setsysnr.inc 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. procedure SetSyscallNumbers;
  2. Var
  3. mib : array[0..1] of cint;
  4. release : shortstring;
  5. len : size_t;
  6. oerrno : cint;
  7. err : word;
  8. point, c : char;
  9. i, version_major, version_minor, version : cint;
  10. Begin
  11. mib[0] := 1{ CTL_KERN};
  12. mib[1] := 2{KERN_OSRELEASE};
  13. len := sizeof (release) - 1;
  14. oerrno := geterrno;
  15. if (do_syscall(syscall_nr___sysctl,TSysParam(@mib), 2, TSysParam(@release[1]),
  16. TSysParam(@len), TSysParam(NIL), 0) = -1) Then
  17. Begin
  18. if (geterrno = ESysENOMEM) Then
  19. seterrno(oerrno);
  20. version_major:=3;
  21. version_minor:=9;
  22. End
  23. else
  24. begin
  25. setlength(release,len);
  26. i:=0;
  27. while (i < len) do
  28. begin
  29. if (release[i]='.') then
  30. break;
  31. inc (i);
  32. end;
  33. setlength(release,i-1);
  34. val (release, version_major, err);
  35. if err<> 0 then
  36. version_major:=3;
  37. setlength(release,len);
  38. release:=copy(release,i+1,len);
  39. val (release, version_minor, err);
  40. if err<> 0 then
  41. version_minor:=9;
  42. end;
  43. version:=version_major * 1000 + version_minor;
  44. if version >= 5005 then
  45. begin
  46. syscall_nr_waitpid := syscall_nr_wait4_55;
  47. syscall_nr_setitimer := syscall_nr_setitimer_55;
  48. syscall_nr_getitimer := syscall_nr_getitimer_55;
  49. syscall_nr_gettimeofday := syscall_nr_gettimeofday_55;
  50. syscall_nr_settimeofday := syscall_nr_settimeofday_55;
  51. syscall_nr_clock_gettime := syscall_nr_clock_gettime_55;
  52. syscall_nr_clock_settime := syscall_nr_clock_settime_55;
  53. syscall_nr_clock_getres := syscall_nr_clock_getres_55;
  54. syscall_nr_select := syscall_nr_select_55;
  55. syscall_nr_getrusage := syscall_nr_getrusage_55;
  56. syscall_nr_utimes := syscall_nr_utimes_55;
  57. syscall_nr_futimes := syscall_nr_futimes_55;
  58. syscall_nr_nanosleep := syscall_nr_nanosleep_55;
  59. syscall_nr_kevent := syscall_nr_kevent_55;
  60. end;
  61. if version>= 5004 then
  62. begin
  63. syscall_nr_statfs := syscall_nr_statfs_54;
  64. syscall_nr_fstatfs := syscall_nr_fstatfs_54;
  65. syscall_nr_fhstatfs := syscall_nr_fhstatfs_54;
  66. end
  67. else if version >= 4004 then
  68. begin
  69. syscall_nr_statfs := syscall_nr_statfs_44;
  70. syscall_nr_fstatfs := syscall_nr_fstatfs_44;
  71. syscall_nr_fhstatfs := syscall_nr_fhstatfs_44;
  72. end
  73. else if version < 2006 then
  74. begin
  75. syscall_nr_statfs := syscall_nr_statfs_20;
  76. syscall_nr_fstatfs := syscall_nr_fstatfs_20;
  77. syscall_nr_pipe := syscall_nr_pipe_20;
  78. end;
  79. if version>= 5005 then
  80. begin
  81. syscall_nr_stat := syscall_nr_stat_55;
  82. syscall_nr_fstat := syscall_nr_fstat_55;
  83. syscall_nr_lstat := syscall_nr_lstat_55;
  84. syscall_nr_fstatat := syscall_nr_fstatat_55;
  85. end
  86. else if version < 3006 then
  87. begin
  88. syscall_nr_stat := syscall_nr_stat_20;
  89. syscall_nr_fstat := syscall_nr_fstat_20;
  90. syscall_nr_lstat := syscall_nr_lstat_20;
  91. syscall_nr_fhstat := syscall_nr_fhstat_20;
  92. end;
  93. if version < 3005 then
  94. syscall_nr_sigaltstack := syscall_nr_sigaltstack_20;
  95. if version = 5001 then
  96. syscall_nr___tfork := syscall_nr___tfork_51
  97. else if version > 5001 then
  98. syscall_nr___tfork := syscall_nr___tfork_52;
  99. end;