diff options
author | Nicolas Roche <roche@adacore.com> | 2005-06-16 10:40:05 +0200 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2005-06-16 10:40:05 +0200 |
commit | df9572726bdf0b2dac33f6fbe4248bc0f4d6062d (patch) | |
tree | 096832949eb15d57ecc08afbc3c9bcb235fb8112 /gcc | |
parent | ee936a698282bd39cd2fc1cb961a1a2d7f24de13 (diff) | |
download | gcc-df9572726bdf0b2dac33f6fbe4248bc0f4d6062d.zip gcc-df9572726bdf0b2dac33f6fbe4248bc0f4d6062d.tar.gz gcc-df9572726bdf0b2dac33f6fbe4248bc0f4d6062d.tar.bz2 |
g-diopit.adb (Wildcard_Iterator): Return directly if Path is equal to ""
2005-06-14 Nicolas Roche <roche@adacore.com>
* g-diopit.adb (Wildcard_Iterator): Return directly if Path is equal
to ""
(Next_Level): Fix minor bug in handling of ../dir case
(Read): Add dir separator to Directory name so that "" is understood as
"/"
From-SVN: r101040
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/g-diopit.adb | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/gcc/ada/g-diopit.adb b/gcc/ada/g-diopit.adb index a5ece7c..8fa2e4b 100644 --- a/gcc/ada/g-diopit.adb +++ b/gcc/ada/g-diopit.adb @@ -6,7 +6,7 @@ -- -- -- B o d y -- -- -- --- Copyright (C) 2001-2003 Ada Core Technologies, Inc. -- +-- Copyright (C) 2001-2005 Adacore, 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- -- @@ -91,8 +91,9 @@ package body GNAT.Directory_Operations.Iteration is declare Dir_Entry : constant String := Buffer (1 .. Last); - Pathname : constant String - := Make_Pathname (Directory, Dir_Entry); + Pathname : constant String := + Make_Pathname (Directory, Dir_Entry); + begin if Regexp.Match (Dir_Entry, File_Regexp) then Quit := False; @@ -203,7 +204,7 @@ package body GNAT.Directory_Operations.Iteration is -- We have "../dir" Read (Current_Path & "..", - SP (SP'First + 4 .. DS - 1), + SP (SP'First + 3 .. DS - 1), SP (DS .. SP'Last)); end if; @@ -308,7 +309,7 @@ package body GNAT.Directory_Operations.Iteration is ---------- Quit : Boolean := False; - -- Global state to be able to exit all recursive calls. + -- Global state to be able to exit all recursive calls procedure Read (Directory : String; @@ -322,8 +323,8 @@ package body GNAT.Directory_Operations.Iteration is Last : Natural; begin - if OS_Lib.Is_Directory (Directory) then - Open (Dir, Directory); + if OS_Lib.Is_Directory (Directory & Dir_Separator) then + Open (Dir, Directory & Dir_Separator); Dir_Iterator : loop Read (Dir, Buffer, Last); @@ -343,7 +344,6 @@ package body GNAT.Directory_Operations.Iteration is (Dir_Entry = ".." and then File_Pattern /= "..")) then if Regexp.Match (Dir_Entry, File_Regexp) then - if Suffix_Pattern = "" then -- No more matching needed, call user's callback @@ -352,15 +352,12 @@ package body GNAT.Directory_Operations.Iteration is begin Action (Pathname, Index, Quit); - exception when others => Close (Dir); raise; end; - exit Dir_Iterator when Quit; - else -- Down one level @@ -372,8 +369,10 @@ package body GNAT.Directory_Operations.Iteration is end if; end; - exit Dir_Iterator when Quit; + -- Exit if Quit set by call to Action, either at this level + -- or at at some lower recursive call to Next_Level. + exit Dir_Iterator when Quit; end loop Dir_Iterator; Close (Dir); @@ -381,6 +380,10 @@ package body GNAT.Directory_Operations.Iteration is end Read; begin + if Path = "" then + return; + end if; + Next_Level ("", Path); end Wildcard_Iterator; |