fix build in various fpc versions on linux
[lcore.git] / unixstuff.inc
1 {$ifdef UNIX}\r
2   {$macro on}\r
3   {$ifdef VER1_0}\r
4     {$define tv_sec := sec}\r
5     {$define tv_usec := usec}\r
6     function dup(const original:integer):integer;inline;\r
7     begin\r
8       linux.dup(original,result);\r
9     end;\r
10     {$define gettimeofdaysec := gettimeofday}\r
11     const\r
12       IPPROTO_UDP=17;\r
13       IPPROTO_ICMP=1;\r
14     function ntohs(invalue:word):word;inline;\r
15     var\r
16       invaluebytes : array[0..1] of byte absolute invalue;\r
17       resultbytes : array[0..1] of byte absolute result;\r
18     begin\r
19       {$ifdef endian_little}\r
20         resultbytes[0] := invaluebytes[1];\r
21         resultbytes[1] := invaluebytes[0];\r
22       {$else}\r
23         result := invalue;\r
24       {$endif}\r
25     end; \r
26     {$define need_v6constants}\r
27   {$else}\r
28     \r
29     {$define sigprocmask := fpsigprocmask}\r
30     {$define sigaction   := fpsigaction}\r
31     {$define fdclose     := fpclose}\r
32     {$define fcntl       := fpfcntl}\r
33     {$define fdwrite     := fpwrite}\r
34     {$define fdread      := fpread}\r
35     {$define fdopen      := fpopen}\r
36     {$define select      := fpselect}\r
37     {$define linuxerror  := fpgeterrno}\r
38     {$define fork        := fpfork}\r
39     {$define getpid      := fpgetpid}\r
40     {$define getenv      := fpgetenv}\r
41     {$define chmod       := fpchmod}\r
42     {$define dup2        := fpdup2}\r
43     {$ifndef ver1_9_2}\r
44       {$define flock     := fpflock}\r
45       {$ifndef ver1_9_4}\r
46         procedure Execl(Todo:string);inline;\r
47         var\r
48           p : ppchar;\r
49         begin\r
50           p := unixutil.StringToPPChar(Todo,1);\r
51           if (p=nil) or (p^=nil) then exit;\r
52           fpexecv(p^,p);\r
53         end;\r
54         function SendTo(Sock: LongInt; const Buf;BufLen: LongInt;Flags: LongInt;var Addr;AddrLen: LongInt):LongInt;\r
55         begin\r
56           result := fpsendto(sock,@buf,buflen,flags,@addr,addrlen);\r
57         end;\r
58         function RecvFrom(Sock: LongInt;var Buf;Buflen: LongInt;Flags: LongInt;var Addr;var addrlen: Longint):LongInt;\r
59         begin\r
60           result := fprecvfrom(sock,@buf,buflen,flags,@addr,@addrlen);\r
61         end;\r
62         {$define socket := fpsocket}\r
63         function Bind(Sock: LongInt;const Addr;AddrLen: LongInt):Boolean;\r
64         begin\r
65           result := fpbind(sock,@addr,addrlen) = 0;\r
66         end;\r
67         function SetSocketOptions(Sock: LongInt;Level: LongInt;OptName: LongInt;const OptVal;optlen: LongInt):LongInt;\r
68         begin\r
69           result := fpsetsockopt(sock,level,optname,@optval,optlen);\r
70         end;\r
71         function Connect(Sock: LongInt;const Addr;Addrlen: LongInt):Boolean;\r
72         begin\r
73           result := fpconnect(sock,@addr,addrlen) >= 0;\r
74         end;\r
75         function listen(Sock: LongInt;MaxConnect: LongInt):Boolean;\r
76         begin\r
77           result := fplisten(sock,maxconnect) = 0;\r
78         end; \r
79         function GetPeerName(Sock: LongInt; var Addr;var Addrlen: LongInt):LongInt;\r
80         begin\r
81           result := fpgetpeername(sock,@addr,@addrlen);\r
82         end;\r
83         function GetSocketName(Sock: LongInt; var Addr;var Addrlen: LongInt):LongInt;\r
84         begin\r
85           result := fpgetsockname(sock,@addr,@addrlen);\r
86         end;\r
87         function Accept(Sock: LongInt; var Addr; var Addrlen: LongInt):LongInt;\r
88         begin\r
89           result := fpaccept(sock,@addr,@addrlen);\r
90         end;\r
91       {$endif}\r
92     {$endif}\r
93     {$ifdef ver2_0}\r
94       const\r
95         IPPROTO_UDP=17;\r
96         IPPROTO_ICMP=1;\r
97       {$define need_v6constants}\r
98     {$endif}\r
99     {$ifdef ver1_9}\r
100       const\r
101         IPPROTO_UDP=17;\r
102         IPPROTO_ICMP=1;\r
103       function ntohs(invalue:word):word;inline;\r
104       var\r
105         invaluebytes : array[0..1] of byte absolute invalue;\r
106         resultbytes : array[0..1] of byte absolute result;\r
107       begin\r
108         {$ifdef endian_little}\r
109           resultbytes[0] := invaluebytes[1];\r
110           resultbytes[1] := invaluebytes[0];\r
111         {$else}\r
112           result := invalue;\r
113         {$endif}\r
114       end;\r
115       {$define need_v6constants}\r
116     {$endif}\r
117     procedure gettimeofday(var tv:ttimeval);inline;\r
118     begin\r
119       fpgettimeofday(@tv,nil);    \r
120     end;\r
121     function gettimeofdaysec : longint;\r
122     var\r
123       tv:ttimeval;\r
124     begin\r
125       gettimeofday(tv);\r
126       result := tv.tv_sec;\r
127     end;\r
128 \r
129     //a function is used here rather than a define to prevent issues with tlasio.dup\r
130     function dup(const original:integer):integer;inline;\r
131     begin\r
132       result := fpdup(original);\r
133     end;\r
134     function octal(invalue:longint):longint;\r
135     var\r
136       a : integer;\r
137       i : integer;\r
138     begin\r
139       i := 0;\r
140       result := 0;\r
141       while invalue <> 0 do begin\r
142         a := invalue mod 10;\r
143         result := result + (a shl (i*3));\r
144 \r
145         invalue := invalue div 10;\r
146         inc(i);\r
147       end;\r
148     end;\r
149     const\r
150       sys_eintr=esyseintr;\r
151 \r
152   {$endif}\r
153   {$ifdef need_v6constants}\r
154     {$ifdef linux} \r
155       //the below values are only known correct on linux, I don't support \r
156       //1.0.x on any other unix platform atm anyway --plugwash\r
157       const \r
158         IPPROTO_IPV6 = 41;\r
159         IPV6_V6ONLY         = 26;\r
160     {$endif}\r
161   {$endif}\r
162 {$endif}\r
163