[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Fri, 18 Sep 2009 13:50:26 +0000 (15:50 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Fri, 18 Sep 2009 13:50:26 +0000 (15:50 +0200)
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

gcc/ada/ChangeLog
gcc/ada/bindgen.adb
gcc/ada/g-socket.adb
gcc/ada/osint-c.adb

index f763a28b7f70c7525879c54b8b5837d3604f05de..647ff0746dbf728badadbe085e747f2b21e4ad91 100644 (file)
@@ -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,
index ce81c7ae0058ac8a6cb0f420e1238a60971bb112..182586133ae2cf97af92d9833ff629f1a3a3213f 100644 (file)
@@ -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
index 8afde3beec3cb90a070d4851edbb4a853c56c253..7741dc0c76d32bb7730f801cf29da698b7f1774f 100644 (file)
@@ -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 --
    ------------
index a93573e775408595fbf02997a20a4e3ff2fbc1f5..8b67befc6c69fc2012677cf6f1b3e4fc8edca5f9 100644 (file)
@@ -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;