+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,
-- --
-- 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- --
-- 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
-- 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.
+
---------
-- "+" --
---------
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;
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;
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;
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;
-- 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;
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;
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 --
------------
-- --
-- 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- --
--------------------------------
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;