summaryrefslogtreecommitdiff
path: root/gcc/ada/g-diopit.adb
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2005-06-16 08:40:05 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2005-06-16 08:40:05 +0000
commit32918d54aa00cacf84b1c4a9ecec29cf2ec2ccdc (patch)
tree096832949eb15d57ecc08afbc3c9bcb235fb8112 /gcc/ada/g-diopit.adb
parent698b852d49d26f2173e2e1e3be190c29bed22eaa (diff)
downloadgcc-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.adb27
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;