aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2009-09-18 15:50:26 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2009-09-18 15:50:26 +0200
commitf5e976a5b5424c7d517669d22afb0cbcbceceffe (patch)
tree2b138ed12345e85367c8b9dcf120c6b734dbf81e
parent658cea5b3e38f28dcdfe3322998089e2c19bad07 (diff)
downloadgcc-f5e976a5b5424c7d517669d22afb0cbcbceceffe.zip
gcc-f5e976a5b5424c7d517669d22afb0cbcbceceffe.tar.gz
gcc-f5e976a5b5424c7d517669d22afb0cbcbceceffe.tar.bz2
[multiple changes]
2009-09-18 Thomas Quinot <quinot@adacore.com> * g-socket.adb (Is_Open): New function indicating whether a Selector_Type object is open. 2009-09-18 Vincent Celier <celier@adacore.com> * osint-c.adb (Create_Output_Library_Info): Make sure that the ALI file is deleted before creating it. 2009-09-18 Robert Dewar <dewar@adacore.com> * bindgen.adb: Minor reformatting From-SVN: r151842
-rw-r--r--gcc/ada/ChangeLog14
-rw-r--r--gcc/ada/bindgen.adb3
-rw-r--r--gcc/ada/g-socket.adb52
-rw-r--r--gcc/ada/osint-c.adb6
4 files changed, 51 insertions, 24 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index f763a28..647ff07 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,17 @@
+2009-09-18 Thomas Quinot <quinot@adacore.com>
+
+ * g-socket.adb (Is_Open): New function indicating whether a
+ Selector_Type object is open.
+
+2009-09-18 Vincent Celier <celier@adacore.com>
+
+ * osint-c.adb (Create_Output_Library_Info): Make sure that the ALI file
+ is deleted before creating it.
+
+2009-09-18 Robert Dewar <dewar@adacore.com>
+
+ * bindgen.adb: Minor reformatting
+
2009-09-18 Arnaud Charlet <charlet@adacore.com>
* s-taprop-tru64.adb, s-taprop-linux.adb, s-taprop-solaris.adb,
diff --git a/gcc/ada/bindgen.adb b/gcc/ada/bindgen.adb
index ce81c7a..1825861 100644
--- a/gcc/ada/bindgen.adb
+++ b/gcc/ada/bindgen.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2008, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2009, Free Software Foundation, Inc. --
-- --
-- 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- --
@@ -198,7 +198,6 @@ package body Bindgen is
-- Zero_Cost_Exceptions is set to one if zero cost exceptions are used for
-- this partition, and to zero if longjmp/setjmp exceptions are used.
- -- the use of zero
-- Detect_Blocking indicates whether pragma Detect_Blocking is active or
-- not. A value of zero indicates that the pragma is not present, while a
diff --git a/gcc/ada/g-socket.adb b/gcc/ada/g-socket.adb
index 8afde3b..7741dc0 100644
--- a/gcc/ada/g-socket.adb
+++ b/gcc/ada/g-socket.adb
@@ -265,6 +265,10 @@ package body GNAT.Sockets is
-- fd_set component is actually cleared. Note that the case where it is
-- not can occur for an uninitialized Socket_Set_Type object.
+ function Is_Open (S : Selector_Type) return Boolean;
+ -- Return True for an "open" Selector_Type object, i.e. one for which
+ -- Create_Selector has been called and Close_Selector has not been called.
+
---------
-- "+" --
---------
@@ -282,9 +286,7 @@ package body GNAT.Sockets is
Res : C.int;
begin
- if Selector.R_Sig_Socket = No_Socket
- or else Selector.W_Sig_Socket = No_Socket
- then
+ if not Is_Open (Selector) then
raise Program_Error with "closed selector";
end if;
@@ -336,11 +338,7 @@ package body GNAT.Sockets is
Status : out Selector_Status)
is
begin
- if Selector /= null
- and then (Selector.R_Sig_Socket = No_Socket
- or else
- Selector.W_Sig_Socket = No_Socket)
- then
+ if Selector /= null and then not Is_Open (Selector.all) then
raise Program_Error with "closed selector";
end if;
@@ -492,9 +490,7 @@ package body GNAT.Sockets is
TPtr : Timeval_Access;
begin
- if Selector.R_Sig_Socket = No_Socket
- or else Selector.W_Sig_Socket = No_Socket
- then
+ if not Is_Open (Selector) then
raise Program_Error with "closed selector";
end if;
@@ -583,9 +579,10 @@ package body GNAT.Sockets is
procedure Close_Selector (Selector : in out Selector_Type) is
begin
- if Selector.R_Sig_Socket = No_Socket
- or else Selector.W_Sig_Socket = No_Socket
- then
+ if not Is_Open (Selector) then
+
+ -- Selector already in closed state: nothing to do
+
return;
end if;
@@ -662,10 +659,7 @@ package body GNAT.Sockets is
-- Used to set Socket to non-blocking I/O
begin
- if Selector /= null and then
- (Selector.R_Sig_Socket = No_Socket
- or else Selector.W_Sig_Socket = No_Socket)
- then
+ if Selector /= null and then not Is_Open (Selector.all) then
raise Program_Error with "closed selector";
end if;
@@ -760,9 +754,9 @@ package body GNAT.Sockets is
Res : C.int;
begin
- if Selector.R_Sig_Socket /= No_Socket
- or else Selector.W_Sig_Socket /= No_Socket
- then
+ if Is_Open (Selector) then
+ -- Raise exception to prevent socket descriptor leak
+
raise Program_Error with "selector already open";
end if;
@@ -1392,6 +1386,22 @@ package body GNAT.Sockets is
return True;
end Is_IP_Address;
+ -------------
+ -- Is_Open --
+ -------------
+
+ function Is_Open (S : Selector_Type) return Boolean is
+ begin
+ -- Either both controlling socket descriptors are valid (case of an
+ -- open selector) or neither (case of a closed selector).
+
+ pragma Assert ((S.R_Sig_Socket /= No_Socket)
+ =
+ (S.W_Sig_Socket /= No_Socket));
+
+ return S.R_Sig_Socket /= No_Socket;
+ end Is_Open;
+
------------
-- Is_Set --
------------
diff --git a/gcc/ada/osint-c.adb b/gcc/ada/osint-c.adb
index a93573e..8b67bef 100644
--- a/gcc/ada/osint-c.adb
+++ b/gcc/ada/osint-c.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 2001-2008, Free Software Foundation, Inc. --
+-- Copyright (C) 2001-2009, Free Software Foundation, Inc. --
-- --
-- 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- --
@@ -202,8 +202,12 @@ package body Osint.C is
--------------------------------
procedure Create_Output_Library_Info is
+ Dummy : Boolean;
+ pragma Unreferenced (Dummy);
+
begin
Set_Library_Info_Name;
+ Delete_File (Name_Buffer (1 .. Name_Len), Dummy);
Create_File_And_Check (Output_FD, Text);
end Create_Output_Library_Info;