aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2009-06-19 12:47:49 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2009-06-19 12:47:49 +0200
commitf26d5cd3cb349d6a5bb39a74ae28d47bd378c937 (patch)
tree31da1477689d9bd7c842a6bbc41616f2437f5d87
parent1abad480e041d8f50044e3c64968957746507e3f (diff)
downloadgcc-f26d5cd3cb349d6a5bb39a74ae28d47bd378c937.zip
gcc-f26d5cd3cb349d6a5bb39a74ae28d47bd378c937.tar.gz
gcc-f26d5cd3cb349d6a5bb39a74ae28d47bd378c937.tar.bz2
[multiple changes]
2009-06-19 Thomas Quinot <quinot@adacore.com> * i-vxwoio.ads: Add comments 2009-06-19 Thomas Quinot <quinot@adacore.com> * socket.c, g-socthi-vms.adb, g-socthi-vms.ads, g-socthi-vxworks.adb, g-socthi-vxworks.ads, g-socthi-mingw.adb, g-socthi-mingw.ads, g-socthi.adb, g-socthi.ads, g-socket.adb, g-sothco.ads (GNAT.Sockets.Thin.C_Ioctl): Rename to Socket_Ioctl. (GNAT.Sockets.Thin.Socket_Ioctl): Use new function Thin_Common.Socket_Ioctl. (GNAT.Sockets.Thin_Common.Socket_Ioctl): Binding to new C wrapper __gnat_socket_ioctl. (__gnat_socket_ioctl): Wrapper for ioctl(2) called with a single int* argument after the file descriptor and request code. 2009-06-19 Robert Dewar <dewar@adacore.com> * checks.adb: Minor reformatting From-SVN: r148694
-rw-r--r--gcc/ada/ChangeLog21
-rw-r--r--gcc/ada/checks.adb2
-rw-r--r--gcc/ada/g-socket.adb6
-rw-r--r--gcc/ada/g-socthi-mingw.adb13
-rw-r--r--gcc/ada/g-socthi-mingw.ads9
-rw-r--r--gcc/ada/g-socthi-vms.adb30
-rw-r--r--gcc/ada/g-socthi-vms.ads8
-rw-r--r--gcc/ada/g-socthi-vxworks.adb36
-rw-r--r--gcc/ada/g-socthi-vxworks.ads8
-rw-r--r--gcc/ada/g-socthi.adb30
-rw-r--r--gcc/ada/g-socthi.ads8
-rw-r--r--gcc/ada/g-sothco.ads8
-rw-r--r--gcc/ada/i-vxwoio.ads7
-rw-r--r--gcc/ada/socket.c12
14 files changed, 113 insertions, 85 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index d621b1b..af67e51 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,24 @@
+2009-06-19 Thomas Quinot <quinot@adacore.com>
+
+ * i-vxwoio.ads: Add comments
+
+2009-06-19 Thomas Quinot <quinot@adacore.com>
+
+ * socket.c, g-socthi-vms.adb, g-socthi-vms.ads, g-socthi-vxworks.adb,
+ g-socthi-vxworks.ads, g-socthi-mingw.adb, g-socthi-mingw.ads,
+ g-socthi.adb, g-socthi.ads, g-socket.adb, g-sothco.ads
+ (GNAT.Sockets.Thin.C_Ioctl): Rename to Socket_Ioctl.
+ (GNAT.Sockets.Thin.Socket_Ioctl): Use new function
+ Thin_Common.Socket_Ioctl.
+ (GNAT.Sockets.Thin_Common.Socket_Ioctl): Binding to new C wrapper
+ __gnat_socket_ioctl.
+ (__gnat_socket_ioctl): Wrapper for ioctl(2) called with a single int*
+ argument after the file descriptor and request code.
+
+2009-06-19 Robert Dewar <dewar@adacore.com>
+
+ * checks.adb: Minor reformatting
+
2009-06-19 Jose Ruiz <ruiz@adacore.com>
* env.c (__gnat_environ): RTX does not support this functionality.
diff --git a/gcc/ada/checks.adb b/gcc/ada/checks.adb
index 50e5269..cb4405e 100644
--- a/gcc/ada/checks.adb
+++ b/gcc/ada/checks.adb
@@ -3324,7 +3324,7 @@ package body Checks is
case Attribute_Name (N) is
-- For Pos/Val attributes, we can refine the range using the
- -- possible range of values of the attribute expression
+ -- possible range of values of the attribute expression.
when Name_Pos | Name_Val =>
Determine_Range
diff --git a/gcc/ada/g-socket.adb b/gcc/ada/g-socket.adb
index 9cd471a..b15f52f 100644
--- a/gcc/ada/g-socket.adb
+++ b/gcc/ada/g-socket.adb
@@ -707,10 +707,8 @@ package body GNAT.Sockets is
null;
end case;
- Res := C_Ioctl
- (C.int (Socket),
- Requests (Request.Name),
- Arg'Unchecked_Access);
+ Res := Socket_Ioctl
+ (C.int (Socket), Requests (Request.Name), Arg'Unchecked_Access);
if Res = Failure then
Raise_Socket_Error (Socket_Errno);
diff --git a/gcc/ada/g-socthi-mingw.adb b/gcc/ada/g-socthi-mingw.adb
index 093731c..7c0e7f6 100644
--- a/gcc/ada/g-socthi-mingw.adb
+++ b/gcc/ada/g-socthi-mingw.adb
@@ -247,6 +247,19 @@ package body GNAT.Sockets.Thin is
return Res;
end C_Connect;
+ ------------------
+ -- Socket_Ioctl --
+ ------------------
+
+ function Socket_Ioctl
+ (S : C.int;
+ Req : C.int;
+ Arg : access C.int) return C.int
+ is
+ begin
+ return C_Ioctl (S, Req, Arg);
+ end Socket_Ioctl;
+
---------------
-- C_Recvmsg --
---------------
diff --git a/gcc/ada/g-socthi-mingw.ads b/gcc/ada/g-socthi-mingw.ads
index 922e64a..42783e5 100644
--- a/gcc/ada/g-socthi-mingw.ads
+++ b/gcc/ada/g-socthi-mingw.ads
@@ -120,10 +120,10 @@ package GNAT.Sockets.Thin is
Optval : System.Address;
Optlen : not null access C.int) return C.int;
- function C_Ioctl
- (S : C.int;
- Req : C.int;
- Arg : access C.int) return C.int;
+ function Socket_Ioctl
+ (S : C.int;
+ Req : C.int;
+ Arg : access C.int) return C.int;
function C_Listen
(S : C.int;
@@ -234,7 +234,6 @@ private
pragma Import (Stdcall, C_Getpeername, "getpeername");
pragma Import (Stdcall, C_Getsockname, "getsockname");
pragma Import (Stdcall, C_Getsockopt, "getsockopt");
- pragma Import (Stdcall, C_Ioctl, "ioctlsocket");
pragma Import (Stdcall, C_Listen, "listen");
pragma Import (Stdcall, C_Recv, "recv");
pragma Import (Stdcall, C_Recvfrom, "recvfrom");
diff --git a/gcc/ada/g-socthi-vms.adb b/gcc/ada/g-socthi-vms.adb
index 6384598f..cb2b211 100644
--- a/gcc/ada/g-socthi-vms.adb
+++ b/gcc/ada/g-socthi-vms.adb
@@ -74,12 +74,6 @@ package body GNAT.Sockets.Thin is
Namelen : C.int) return C.int;
pragma Import (C, Syscall_Connect, "connect");
- function Syscall_Ioctl
- (S : C.int;
- Req : C.int;
- Arg : access C.int) return C.int;
- pragma Import (C, Syscall_Ioctl, "ioctl");
-
function Syscall_Recv
(S : C.int;
Msg : System.Address;
@@ -153,11 +147,11 @@ package body GNAT.Sockets.Thin is
and then R /= Failure
then
-- A socket inherits the properties of its server, especially
- -- the FIONBIO flag. Do not use C_Ioctl as this subprogram
+ -- the FIONBIO flag. Do not use Socket_Ioctl as this subprogram
-- tracks sockets set in non-blocking mode by user.
Set_Non_Blocking_Socket (R, Non_Blocking_Socket (S));
- Discard := Syscall_Ioctl (R, SOSC.FIONBIO, Val'Access);
+ Discard := C_Ioctl (R, SOSC.FIONBIO, Val'Access);
end if;
return R;
@@ -220,26 +214,24 @@ package body GNAT.Sockets.Thin is
end if;
end C_Connect;
- -------------
- -- C_Ioctl --
- -------------
+ ------------------
+ -- Socket_Ioctl --
+ ------------------
- function C_Ioctl
+ function Socket_Ioctl
(S : C.int;
Req : C.int;
Arg : access C.int) return C.int
is
begin
- if not SOSC.Thread_Blocking_IO
- and then Req = SOSC.FIONBIO
- then
+ if not SOSC.Thread_Blocking_IO and then Req = SOSC.FIONBIO then
if Arg.all /= 0 then
Set_Non_Blocking_Socket (S, True);
end if;
end if;
- return Syscall_Ioctl (S, Req, Arg);
- end C_Ioctl;
+ return C_Ioctl (S, Req, Arg);
+ end Socket_Ioctl;
------------
-- C_Recv --
@@ -405,10 +397,10 @@ package body GNAT.Sockets.Thin is
if not SOSC.Thread_Blocking_IO
and then R /= Failure
then
- -- Do not use C_Ioctl as this subprogram tracks sockets set
+ -- Do not use Socket_Ioctl as this subprogram tracks sockets set
-- in non-blocking mode by user.
- Discard := Syscall_Ioctl (R, SOSC.FIONBIO, Val'Access);
+ Discard := C_Ioctl (R, SOSC.FIONBIO, Val'Access);
Set_Non_Blocking_Socket (R, False);
end if;
diff --git a/gcc/ada/g-socthi-vms.ads b/gcc/ada/g-socthi-vms.ads
index 3799da8..3032b0e 100644
--- a/gcc/ada/g-socthi-vms.ads
+++ b/gcc/ada/g-socthi-vms.ads
@@ -123,10 +123,10 @@ package GNAT.Sockets.Thin is
Optval : System.Address;
Optlen : not null access C.int) return C.int;
- function C_Ioctl
- (S : C.int;
- Req : C.int;
- Arg : access C.int) return C.int;
+ function Socket_Ioctl
+ (S : C.int;
+ Req : C.int;
+ Arg : access C.int) return C.int;
function C_Listen
(S : C.int;
diff --git a/gcc/ada/g-socthi-vxworks.adb b/gcc/ada/g-socthi-vxworks.adb
index a35e429..67e6c25 100644
--- a/gcc/ada/g-socthi-vxworks.adb
+++ b/gcc/ada/g-socthi-vxworks.adb
@@ -80,12 +80,6 @@ package body GNAT.Sockets.Thin is
Namelen : C.int) return C.int;
pragma Import (C, Syscall_Connect, "connect");
- function Syscall_Ioctl
- (S : C.int;
- Req : C.int;
- Arg : access C.int) return C.int;
- pragma Import (C, Syscall_Ioctl, "ioctl");
-
function Syscall_Recv
(S : C.int;
Msg : System.Address;
@@ -161,11 +155,11 @@ package body GNAT.Sockets.Thin is
and then R /= Failure
then
-- A socket inherits the properties of its server especially
- -- the FIONBIO flag. Do not use C_Ioctl as this subprogram
+ -- the FIONBIO flag. Do not use Socket_Ioctl as this subprogram
-- tracks sockets set in non-blocking mode by user.
Set_Non_Blocking_Socket (R, Non_Blocking_Socket (S));
- Res := Syscall_Ioctl (R, SOSC.FIONBIO, Val'Access);
+ Res := C_Ioctl (R, SOSC.FIONBIO, Val'Access);
-- Is it OK to ignore result ???
end if;
@@ -230,26 +224,24 @@ package body GNAT.Sockets.Thin is
end if;
end C_Connect;
- -------------
- -- C_Ioctl --
- -------------
+ ------------------
+ -- Socket_Ioctl --
+ ------------------
- function C_Ioctl
- (S : C.int;
- Req : C.int;
- Arg : access C.int) return C.int
+ function Socket_Ioctl
+ (S : C.int;
+ Req : C.int;
+ Arg : access C.int) return C.int
is
begin
- if not SOSC.Thread_Blocking_IO
- and then Req = SOSC.FIONBIO
- then
+ if not SOSC.Thread_Blocking_IO and then Req = SOSC.FIONBIO then
if Arg.all /= 0 then
Set_Non_Blocking_Socket (S, True);
end if;
end if;
- return Syscall_Ioctl (S, Req, Arg);
- end C_Ioctl;
+ return C_Ioctl (S, Req, Arg);
+ end Socket_Ioctl;
------------
-- C_Recv --
@@ -399,10 +391,10 @@ package body GNAT.Sockets.Thin is
if not SOSC.Thread_Blocking_IO
and then R /= Failure
then
- -- Do not use C_Ioctl as this subprogram tracks sockets set
+ -- Do not use Socket_Ioctl as this subprogram tracks sockets set
-- in non-blocking mode by user.
- Res := Syscall_Ioctl (R, SOSC.FIONBIO, Val'Access);
+ Res := C_Ioctl (R, SOSC.FIONBIO, Val'Access);
-- Is it OK to ignore result ???
Set_Non_Blocking_Socket (R, False);
end if;
diff --git a/gcc/ada/g-socthi-vxworks.ads b/gcc/ada/g-socthi-vxworks.ads
index 14b8ad9..08fac05 100644
--- a/gcc/ada/g-socthi-vxworks.ads
+++ b/gcc/ada/g-socthi-vxworks.ads
@@ -121,10 +121,10 @@ package GNAT.Sockets.Thin is
Optval : System.Address;
Optlen : not null access C.int) return C.int;
- function C_Ioctl
- (S : C.int;
- Req : C.int;
- Arg : access C.int) return C.int;
+ function Socket_Ioctl
+ (S : C.int;
+ Req : C.int;
+ Arg : access C.int) return C.int;
function C_Listen
(S : C.int;
diff --git a/gcc/ada/g-socthi.adb b/gcc/ada/g-socthi.adb
index 0ffee86..b232378 100644
--- a/gcc/ada/g-socthi.adb
+++ b/gcc/ada/g-socthi.adb
@@ -76,12 +76,6 @@ package body GNAT.Sockets.Thin is
Namelen : C.int) return C.int;
pragma Import (C, Syscall_Connect, "connect");
- function Syscall_Ioctl
- (S : C.int;
- Req : C.int;
- Arg : access C.int) return C.int;
- pragma Import (C, Syscall_Ioctl, "ioctl");
-
function Syscall_Recv
(S : C.int;
Msg : System.Address;
@@ -165,11 +159,11 @@ package body GNAT.Sockets.Thin is
and then R /= Failure
then
-- A socket inherits the properties ot its server especially
- -- the FIONBIO flag. Do not use C_Ioctl as this subprogram
+ -- the FIONBIO flag. Do not use Socket_Ioctl as this subprogram
-- tracks sockets set in non-blocking mode by user.
Set_Non_Blocking_Socket (R, Non_Blocking_Socket (S));
- Discard := Syscall_Ioctl (R, SOSC.FIONBIO, Val'Access);
+ Discard := C_Ioctl (R, SOSC.FIONBIO, Val'Access);
end if;
Disable_SIGPIPE (R);
@@ -235,26 +229,24 @@ package body GNAT.Sockets.Thin is
end if;
end C_Connect;
- -------------
- -- C_Ioctl --
- -------------
+ ------------------
+ -- Socket_Ioctl --
+ ------------------
- function C_Ioctl
+ function Socket_Ioctl
(S : C.int;
Req : C.int;
Arg : access C.int) return C.int
is
begin
- if not SOSC.Thread_Blocking_IO
- and then Req = SOSC.FIONBIO
- then
+ if not SOSC.Thread_Blocking_IO and then Req = SOSC.FIONBIO then
if Arg.all /= 0 then
Set_Non_Blocking_Socket (S, True);
end if;
end if;
- return Syscall_Ioctl (S, Req, Arg);
- end C_Ioctl;
+ return C_Ioctl (S, Req, Arg);
+ end Socket_Ioctl;
------------
-- C_Recv --
@@ -404,10 +396,10 @@ package body GNAT.Sockets.Thin is
if not SOSC.Thread_Blocking_IO
and then R /= Failure
then
- -- Do not use C_Ioctl as this subprogram tracks sockets set
+ -- Do not use Socket_Ioctl as this subprogram tracks sockets set
-- in non-blocking mode by user.
- Discard := Syscall_Ioctl (R, SOSC.FIONBIO, Val'Access);
+ Discard := C_Ioctl (R, SOSC.FIONBIO, Val'Access);
Set_Non_Blocking_Socket (R, False);
end if;
Disable_SIGPIPE (R);
diff --git a/gcc/ada/g-socthi.ads b/gcc/ada/g-socthi.ads
index cb19050..eb690c5 100644
--- a/gcc/ada/g-socthi.ads
+++ b/gcc/ada/g-socthi.ads
@@ -122,10 +122,10 @@ package GNAT.Sockets.Thin is
Optval : System.Address;
Optlen : not null access C.int) return C.int;
- function C_Ioctl
- (S : C.int;
- Req : C.int;
- Arg : access C.int) return C.int;
+ function Socket_Ioctl
+ (S : C.int;
+ Req : C.int;
+ Arg : access C.int) return C.int;
function C_Listen
(S : C.int;
diff --git a/gcc/ada/g-sothco.ads b/gcc/ada/g-sothco.ads
index 9a86728..c5636a8 100644
--- a/gcc/ada/g-sothco.ads
+++ b/gcc/ada/g-sothco.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 2008, AdaCore --
+-- Copyright (C) 2008-2009, AdaCore --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -321,6 +321,11 @@ package GNAT.Sockets.Thin_Common is
Cp : C.Strings.chars_ptr;
Inp : System.Address) return C.int;
+ function C_Ioctl
+ (Fd : C.int;
+ Req : C.int;
+ Arg : access C.int) return C.int;
+
private
pragma Import (C, Get_Socket_From_Set, "__gnat_get_socket_from_set");
pragma Import (C, Is_Socket_In_Set, "__gnat_is_socket_in_set");
@@ -328,5 +333,6 @@ private
pragma Import (C, Insert_Socket_In_Set, "__gnat_insert_socket_in_set");
pragma Import (C, Remove_Socket_From_Set, "__gnat_remove_socket_from_set");
pragma Import (C, Reset_Socket_Set, "__gnat_reset_socket_set");
+ pragma Import (C, C_Ioctl, "__gnat_socket_ioctl");
pragma Import (C, Inet_Pton, SOSC.Inet_Pton_Linkname);
end GNAT.Sockets.Thin_Common;
diff --git a/gcc/ada/i-vxwoio.ads b/gcc/ada/i-vxwoio.ads
index 79aca27..dc69546 100644
--- a/gcc/ada/i-vxwoio.ads
+++ b/gcc/ada/i-vxwoio.ads
@@ -53,8 +53,8 @@ package Interfaces.VxWorks.IO is
type IOOPT is mod 2 ** int'Size;
-- Type of the option codes in ioctl
- -- ioctl function codes
- -- For more information see ioLib.h
+ -- ioctl function codes (for more information see ioLib.h)
+ -- These values could be generated automatically in System.OS_Constants???
FIONREAD : constant FUNCODE := 1;
FIOFLUSH : constant FUNCODE := 2;
@@ -129,6 +129,9 @@ package Interfaces.VxWorks.IO is
function ioctl (Fd : int; Function_Code : FUNCODE; Arg : IOOPT) return int;
pragma Import (C, ioctl, "ioctl");
-- Binding to the C routine ioctl
+ --
+ -- Note: we are taking advantage of the fact that on currently supported
+ -- VxWorks targets, it is fine to directly bind to a variadic C function.
------------------------------
-- Control of Get_Immediate --
diff --git a/gcc/ada/socket.c b/gcc/ada/socket.c
index 226f3be..df3b120 100644
--- a/gcc/ada/socket.c
+++ b/gcc/ada/socket.c
@@ -73,6 +73,7 @@ extern fd_set *__gnat_new_socket_set (fd_set *);
extern void __gnat_remove_socket_from_set (fd_set *, int);
extern void __gnat_reset_socket_set (fd_set *);
extern int __gnat_get_h_errno (void);
+extern int __gnat_socket_ioctl (int, int, int *);
#if defined (__vxworks) || defined (_WIN32)
extern int __gnat_inet_pton (int, const char *, void *);
#endif
@@ -409,6 +410,17 @@ __gnat_get_h_errno (void) {
#endif
}
+/* Wrapper for ioctl(2), which is a variadic function */
+
+int
+__gnat_socket_ioctl (int fd, int req, int *arg) {
+#if defined (_WIN32)
+ return ioctlsocket (fd, req, arg);
+#else
+ return ioctl (fd, req, arg);
+#endif
+}
+
#ifndef HAVE_INET_PTON
#ifdef VMS