From adb76d07cfd5fb25e3502d13523f1e808976d679 Mon Sep 17 00:00:00 2001
From: Robert Dewar <dewar@adacore.com>
Date: Tue, 29 Mar 2005 18:22:32 +0200
Subject: [PATCH] a-direct.ads, [...] (Start_Search): Free allocated search
 buffer if an exception is raised.

2005-03-29  Robert Dewar  <dewar@adacore.com>

	* a-direct.ads, a-direct.adb (Start_Search): Free allocated search
	buffer if an exception is raised.

From-SVN: r97188
---
 gcc/ada/a-direct.adb | 17 +++++++++--------
 gcc/ada/a-direct.ads | 15 +++++++++------
 2 files changed, 18 insertions(+), 14 deletions(-)

diff --git a/gcc/ada/a-direct.adb b/gcc/ada/a-direct.adb
index 33562f11fb89..810455941ebe 100644
--- a/gcc/ada/a-direct.adb
+++ b/gcc/ada/a-direct.adb
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---          Copyright (C) 2004 Free Software Foundation, Inc.               --
+--          Copyright (C) 2004-2005 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- --
@@ -31,15 +31,15 @@
 --                                                                          --
 ------------------------------------------------------------------------------
 
-with Ada.Directories.Validity; use Ada.Directories.Validity;
-with Ada.Strings.Unbounded;    use Ada.Strings.Unbounded;
+with Ada.Directories.Validity;   use Ada.Directories.Validity;
+with Ada.Strings.Unbounded;      use Ada.Strings.Unbounded;
 with Ada.Unchecked_Deallocation;
-with Ada.Characters.Handling;  use Ada.Characters.Handling;
+with Ada.Characters.Handling;    use Ada.Characters.Handling;
 
-with GNAT.Directory_Operations; use GNAT.Directory_Operations;
-with GNAT.OS_Lib;               use GNAT.OS_Lib;
-with GNAT.Regexp;               use GNAT.Regexp;
---  ??? Ada units cannot depend on GNAT units
+with GNAT.Directory_Operations;  use GNAT.Directory_Operations;
+with GNAT.OS_Lib;                use GNAT.OS_Lib;
+with GNAT.Regexp;                use GNAT.Regexp;
+--  ??? Ada units should not depend on GNAT units
 
 with System;
 
@@ -938,6 +938,7 @@ package body Ada.Directories is
 
       exception
          when Error_In_Regexp =>
+            Free (Search.Value);
             raise Name_Error;
       end;
 
diff --git a/gcc/ada/a-direct.ads b/gcc/ada/a-direct.ads
index 4cd2340a79c8..5047cc76bd51 100644
--- a/gcc/ada/a-direct.ads
+++ b/gcc/ada/a-direct.ads
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 2004 Free Software Foundation, Inc.               --
+--          Copyright (C) 2004-2005 Free Software Foundation, Inc.          --
 --                                                                          --
 -- This specification is derived for use with GNAT from AI-00248,  which is --
 -- expected to be a part of a future expected revised Ada Reference Manual. --
@@ -304,10 +304,10 @@ package Ada.Directories is
    --  Starts a search in the directory entry in the directory named by
    --  Directory for entries matching Pattern. Pattern represents a file name
    --  matching pattern. If Pattern is null, all items in the directory are
-   --  matched; otherwise, the interpretation of Pattern is
-   --  implementation-defined. Only items which match Filter will be returned.
-   --  After a successful call on Start_Search, the object Search may have
-   --  entries available, but it may have no entries available if no files or
+   --  matched; otherwise, the interpretation of Pattern is implementation-
+   --  defined. Only items which match Filter will be returned. After a
+   --  successful call on Start_Search, the object Search may have entries
+   --  available, but it may have no entries available if no files or
    --  directories match Pattern and Filter. The exception Name_Error is
    --  propagated if the string given by Directory does not identify an
    --  existing directory, or if Pattern does not allow the identification of
@@ -317,7 +317,10 @@ package Ada.Directories is
 
    procedure End_Search (Search : in out Search_Type);
    --  Ends the search represented by Search. After a successful call on
-   --  End_Search, the object Search will have no entries available.
+   --  End_Search, the object Search will have no entries available. Note
+   --  that is is not necessary to call End_Search if the call to Start_Search
+   --  was unsuccessful and raised an exception (but it is harmless to make
+   --  the call in this case)>
 
    function More_Entries (Search : Search_Type) return Boolean;
    --  Returns True if more entries are available to be returned by a call
-- 
GitLab