X-Git-Url: http://www.lcore.org/git/lcore.git/blobdiff_plain/987e8123d8ba3201ed2690004cfefd7983ff7487..1c8b91ca0f6891a397357c7cf7d77af18c15937d:/unixstuff.inc

diff --git a/unixstuff.inc b/unixstuff.inc
old mode 100755
new mode 100644
index 89c96f2..1a9a97b
--- a/unixstuff.inc
+++ b/unixstuff.inc
@@ -22,7 +22,8 @@
       {$else}
 	result := invalue;
       {$endif}
-    end;  
+    end; 
+    {$define need_v6constants}
   {$else}
     
     {$define sigprocmask := fpsigprocmask}
@@ -42,20 +43,69 @@
     {$ifndef ver1_9_2}
       {$define flock     := fpflock}
       {$ifndef ver1_9_4}
-        procedure Execl(Todo:string);inline;
+        //beware: this is needed because FPC_FULLVERSION >= 30200 breaks delphi 6 even inside an ifdef it shouldn't process
+        {$ifdef fpc}
+          {$ifdef ver3}
+            {$ifndef ver3_0}{$ifndef ver3_1}{$define fpc_3_2_or_later}{$endif}{$endif}
+          {$endif}
+          {$ifdef ver4}{$define fpc_3_2_or_later}{$endif}
+        {$endif}
+        {$ifdef fpc_3_2_or_later}
+          procedure Execl(Todo:rawbytestring);inline;
+        {$else}
+          procedure Execl(Todo:string);inline;
+        {$endif}
 	var
 	  p : ppchar;
 	begin
-	  p := unixutil.StringToPPChar(Todo,1);
+	  p := unixutil.StringToPPChar(Todo,0);
 	  if (p=nil) or (p^=nil) then exit;
 	  fpexecv(p^,p);
 	end;
+	function SendTo(Sock: LongInt; const Buf;BufLen: LongInt;Flags: LongInt;var Addr;AddrLen: LongInt):LongInt;
+	begin
+	  result := fpsendto(sock,@buf,buflen,flags,@addr,addrlen);
+	end;
+	function RecvFrom(Sock: LongInt;var Buf;Buflen: LongInt;Flags: LongInt;var Addr;var addrlen: Longint):LongInt;
+	begin
+	  result := fprecvfrom(sock,@buf,buflen,flags,@addr,@addrlen);
+	end;
+	{$define socket := fpsocket}
+	function Bind(Sock: LongInt;const Addr;AddrLen: LongInt):Boolean;
+	begin
+	  result := fpbind(sock,@addr,addrlen) = 0;
+	end;
+	function SetSocketOptions(Sock: LongInt;Level: LongInt;OptName: LongInt;const OptVal;optlen: LongInt):LongInt;
+	begin
+	  result := fpsetsockopt(sock,level,optname,@optval,optlen);
+	end;
+	function Connect(Sock: LongInt;const Addr;Addrlen: LongInt):Boolean;
+	begin
+	  result := fpconnect(sock,@addr,addrlen) >= 0;
+	end;
+        function listen(Sock: LongInt;MaxConnect: LongInt):Boolean;
+        begin
+          result := fplisten(sock,maxconnect) = 0;
+        end; 
+        function GetPeerName(Sock: LongInt; var Addr;var Addrlen: LongInt):LongInt;
+        begin
+          result := fpgetpeername(sock,@addr,@addrlen);
+        end;
+        function GetSocketName(Sock: LongInt; var Addr;var Addrlen: LongInt):LongInt;
+        begin
+          result := fpgetsockname(sock,@addr,@addrlen);
+        end;
+        function Accept(Sock: LongInt; var Addr; var Addrlen: LongInt):LongInt;
+        begin
+          result := fpaccept(sock,@addr,@addrlen);
+        end;
       {$endif}
     {$endif}
     {$ifdef ver2_0}
       const
         IPPROTO_UDP=17;
         IPPROTO_ICMP=1;
+      {$define need_v6constants}
     {$endif}
     {$ifdef ver1_9}
       const
@@ -73,6 +123,7 @@
 	  result := invalue;
 	{$endif}
       end;
+      {$define need_v6constants}
     {$endif}
     procedure gettimeofday(var tv:ttimeval);inline;
     begin
@@ -110,4 +161,22 @@
       sys_eintr=esyseintr;
 
   {$endif}
+  {$ifdef need_v6constants}
+    {$ifdef linux} 
+      //the below values are only known correct on linux, I don't support 
+      //1.0.x on any other unix platform atm anyway --plugwash
+      const 
+        IPPROTO_IPV6 = 41;
+        IPV6_V6ONLY         = 26;
+    {$endif}
+  {$endif}
+  {$ifdef freebsd}
+    //freepascal doesn't seem to define IPV6_V6ONLY on freebsd, the definition
+    //here is taken from the include files of a freebsd 8 system
+    const
+      IPV6_V6ONLY = 27;
+  {$endif}
+
 {$endif}
+
+