diff options
author | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-06-16 08:40:05 +0000 |
---|---|---|
committer | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-06-16 08:40:05 +0000 |
commit | 32918d54aa00cacf84b1c4a9ecec29cf2ec2ccdc (patch) | |
tree | 096832949eb15d57ecc08afbc3c9bcb235fb8112 /gcc/ada/g-diopit.adb | |
parent | 698b852d49d26f2173e2e1e3be190c29bed22eaa (diff) | |
download | gcc-32918d54aa00cacf84b1c4a9ecec29cf2ec2ccdc.tar.gz |
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
"/"
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@101040 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/g-diopit.adb')
-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 a5ece7ce6b7..8fa2e4b4a6f 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; |