From: Arnaud Charlet Date: Fri, 19 Jun 2009 10:47:49 +0000 (+0200) Subject: [multiple changes] X-Git-Tag: releases/gcc-4.5.0~5116 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f26d5cd3cb349d6a5bb39a74ae28d47bd378c937;p=thirdparty%2Fgcc.git [multiple changes] 2009-06-19 Thomas Quinot * i-vxwoio.ads: Add comments 2009-06-19 Thomas Quinot * 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 * checks.adb: Minor reformatting From-SVN: r148694 --- diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index d621b1b9d166..af67e51be2ac 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,24 @@ +2009-06-19 Thomas Quinot + + * i-vxwoio.ads: Add comments + +2009-06-19 Thomas Quinot + + * 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 + + * checks.adb: Minor reformatting + 2009-06-19 Jose Ruiz * env.c (__gnat_environ): RTX does not support this functionality. diff --git a/gcc/ada/checks.adb b/gcc/ada/checks.adb index 50e52693e948..cb4405ed6ca2 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 9cd471afd549..b15f52fdcfaa 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 093731ce40d6..7c0e7f6ef7fa 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 922e64aa22f1..42783e5f734a 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 6384598f07ab..cb2b211d2aae 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 3799da802d29..3032b0ec72b0 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 a35e429fbb20..67e6c25eeb8c 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 14b8ad92428e..08fac05d5550 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 0ffee86af49c..b232378fab64 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 cb19050250b7..eb690c5b4a88 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 9a8672830fa6..c5636a8f1e35 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 79aca27ad199..dc6954696922 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 226f3be85928..df3b1206428e 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