fix compile error on fpc 3.2.2
[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         {$if FPC_FULLVERSION >= 30200}\r
47           procedure Execl(Todo:rawbytestring);inline;\r
48         {$else}\r
49           procedure Execl(Todo:string);inline;\r
50         {$endif}\r
51         var\r
52           p : ppchar;\r
53         begin\r
54           p := unixutil.StringToPPChar(Todo,0);\r
55           if (p=nil) or (p^=nil) then exit;\r
56           fpexecv(p^,p);\r
57         end;\r
58         function SendTo(Sock: LongInt; const Buf;BufLen: LongInt;Flags: LongInt;var Addr;AddrLen: LongInt):LongInt;\r
59         begin\r
60           result := fpsendto(sock,@buf,buflen,flags,@addr,addrlen);\r
61         end;\r
62         function RecvFrom(Sock: LongInt;var Buf;Buflen: LongInt;Flags: LongInt;var Addr;var addrlen: Longint):LongInt;\r
63         begin\r
64           result := fprecvfrom(sock,@buf,buflen,flags,@addr,@addrlen);\r
65         end;\r
66         {$define socket := fpsocket}\r
67         function Bind(Sock: LongInt;const Addr;AddrLen: LongInt):Boolean;\r
68         begin\r
69           result := fpbind(sock,@addr,addrlen) = 0;\r
70         end;\r
71         function SetSocketOptions(Sock: LongInt;Level: LongInt;OptName: LongInt;const OptVal;optlen: LongInt):LongInt;\r
72         begin\r
73           result := fpsetsockopt(sock,level,optname,@optval,optlen);\r
74         end;\r
75         function Connect(Sock: LongInt;const Addr;Addrlen: LongInt):Boolean;\r
76         begin\r
77           result := fpconnect(sock,@addr,addrlen) >= 0;\r
78         end;\r
79         function listen(Sock: LongInt;MaxConnect: LongInt):Boolean;\r
80         begin\r
81           result := fplisten(sock,maxconnect) = 0;\r
82         end; \r
83         function GetPeerName(Sock: LongInt; var Addr;var Addrlen: LongInt):LongInt;\r
84         begin\r
85           result := fpgetpeername(sock,@addr,@addrlen);\r
86         end;\r
87         function GetSocketName(Sock: LongInt; var Addr;var Addrlen: LongInt):LongInt;\r
88         begin\r
89           result := fpgetsockname(sock,@addr,@addrlen);\r
90         end;\r
91         function Accept(Sock: LongInt; var Addr; var Addrlen: LongInt):LongInt;\r
92         begin\r
93           result := fpaccept(sock,@addr,@addrlen);\r
94         end;\r
95       {$endif}\r
96     {$endif}\r
97     {$ifdef ver2_0}\r
98       const\r
99         IPPROTO_UDP=17;\r
100         IPPROTO_ICMP=1;\r
101       {$define need_v6constants}\r
102     {$endif}\r
103     {$ifdef ver1_9}\r
104       const\r
105         IPPROTO_UDP=17;\r
106         IPPROTO_ICMP=1;\r
107       function ntohs(invalue:word):word;inline;\r
108       var\r
109         invaluebytes : array[0..1] of byte absolute invalue;\r
110         resultbytes : array[0..1] of byte absolute result;\r
111       begin\r
112         {$ifdef endian_little}\r
113           resultbytes[0] := invaluebytes[1];\r
114           resultbytes[1] := invaluebytes[0];\r
115         {$else}\r
116           result := invalue;\r
117         {$endif}\r
118       end;\r
119       {$define need_v6constants}\r
120     {$endif}\r
121     procedure gettimeofday(var tv:ttimeval);inline;\r
122     begin\r
123       fpgettimeofday(@tv,nil);    \r
124     end;\r
125     function gettimeofdaysec : longint;\r
126     var\r
127       tv:ttimeval;\r
128     begin\r
129       gettimeofday(tv);\r
130       result := tv.tv_sec;\r
131     end;\r
132 \r
133     //a function is used here rather than a define to prevent issues with tlasio.dup\r
134     function dup(const original:integer):integer;inline;\r
135     begin\r
136       result := fpdup(original);\r
137     end;\r
138     function octal(invalue:longint):longint;\r
139     var\r
140       a : integer;\r
141       i : integer;\r
142     begin\r
143       i := 0;\r
144       result := 0;\r
145       while invalue <> 0 do begin\r
146         a := invalue mod 10;\r
147         result := result + (a shl (i*3));\r
148 \r
149         invalue := invalue div 10;\r
150         inc(i);\r
151       end;\r
152     end;\r
153     const\r
154       sys_eintr=esyseintr;\r
155 \r
156   {$endif}\r
157   {$ifdef need_v6constants}\r
158     {$ifdef linux} \r
159       //the below values are only known correct on linux, I don't support \r
160       //1.0.x on any other unix platform atm anyway --plugwash\r
161       const \r
162         IPPROTO_IPV6 = 41;\r
163         IPV6_V6ONLY         = 26;\r
164     {$endif}\r
165   {$endif}\r
166   {$ifdef freebsd}\r
167     //freepascal doesn't seem to define IPV6_V6ONLY on freebsd, the definition\r
168     //here is taken from the include files of a freebsd 8 system\r
169     const\r
170       IPV6_V6ONLY = 27;\r
171   {$endif}\r
172 \r
173 {$endif}\r
174 \r
175     \r