summaryrefslogtreecommitdiff
path: root/gcc/ada/g-expect.ads
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2010-06-21 14:17:34 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2010-06-21 14:17:34 +0000
commitc63cfa9671f37b7b9f74243e1a6c91cdd45929d9 (patch)
treefcdc07ccbc094a2af953364160e0ab8df6859827 /gcc/ada/g-expect.ads
parentb3c3927c05d8ad190b76c56ae6020e1650b85a97 (diff)
downloadgcc-c63cfa9671f37b7b9f74243e1a6c91cdd45929d9.tar.gz
2010-06-21 Thomas Quinot <quinot@adacore.com>
* bindgen.ads: Update comments. 2010-06-21 Vincent Celier <celier@adacore.com> * gnatbind.adb: Suppress dupicates when listing the sources in the closure (switch -R). 2010-06-21 Emmanuel Briot <briot@adacore.com> * s-regpat.adb (Link_Tail): Fix error when size of the pattern matcher is too small. 2010-06-21 Emmanuel Briot <briot@adacore.com> * g-expect.adb, g-expect.ads (First_Dead_Process, Free, Has_Process): New subprograms. (Expect_Internal): No longer raises an exception, so that it can set out parameters as well. When a process has died, reset its Input_Fd to Invalid_Fd, so that when using multiple processes we can find out which process has died. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@161081 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/g-expect.ads')
-rw-r--r--gcc/ada/g-expect.ads42
1 files changed, 39 insertions, 3 deletions
diff --git a/gcc/ada/g-expect.ads b/gcc/ada/g-expect.ads
index 1e50852522a..5c535831e98 100644
--- a/gcc/ada/g-expect.ads
+++ b/gcc/ada/g-expect.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 2000-2009, AdaCore --
+-- Copyright (C) 2000-2010, 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- --
@@ -466,7 +466,22 @@ package GNAT.Expect is
Regexp : Pattern_Matcher_Access;
end record;
type Multiprocess_Regexp_Array is array (Positive range <>)
- of Multiprocess_Regexp;
+ of Multiprocess_Regexp;
+
+ procedure Free (Regexp : in out Multiprocess_Regexp);
+ -- Free the memory occupied by Regexp
+
+ function Has_Process (Regexp : Multiprocess_Regexp_Array) return Boolean;
+ -- Return True if at least one entry in Regexp is non-null, ie there is
+ -- still at least one process to monitor
+
+ function First_Dead_Process
+ (Regexp : Multiprocess_Regexp_Array) return Natural;
+ -- Find the first entry in Regexp that corresponds to a dead process that
+ -- wasn't Free-d yet.
+ -- This function is called in general when Expect (below) raises the
+ -- exception Process_Died.
+ -- This returns 0 if no process has died yet.
procedure Expect
(Result : out Expect_Match;
@@ -474,7 +489,28 @@ package GNAT.Expect is
Matched : out GNAT.Regpat.Match_Array;
Timeout : Integer := 10_000;
Full_Buffer : Boolean := False);
- -- Same as above, but for multi processes
+ -- Same as above, but for multi processes. Any of the entries in
+ -- Regexps can have a null Descriptor or Regexp. Such entries will
+ -- simply be ignored. Therefore when a process terminates, you can
+ -- simply reset its entry.
+ -- The expect loop would therefore look like:
+ --
+ -- Processes : Multiprocess_Regexp_Array (...) := ...;
+ -- R : Natural;
+ --
+ -- while Has_Process (Processes) loop
+ -- begin
+ -- Expect (Result, Processes, Timeout => -1);
+ -- ... process output of process Result (output, full buffer,...)
+ --
+ -- exception
+ -- when Process_Died =>
+ -- -- Free memory
+ -- R := First_Dead_Process (Processes);
+ -- Close (Processes (R).Descriptor.all, Status);
+ -- Free (Processes (R));
+ -- end;
+ -- end loop;
procedure Expect
(Result : out Expect_Match;