[gcc r14-4535] ada: Tweak internal subprogram in Ada.Directories
Marc Poulhi?s
dkm@gcc.gnu.org
Tue Oct 10 12:14:55 GMT 2023
https://gcc.gnu.org/g:42c46cfe8c6d626c7a8b2530e0da6e150a6f9a2a
commit r14-4535-g42c46cfe8c6d626c7a8b2530e0da6e150a6f9a2a
Author: Ronan Desplanques <desplanques@adacore.com>
Date: Fri Sep 29 12:35:05 2023 +0200
ada: Tweak internal subprogram in Ada.Directories
The purpose of this patch is to work around false-positive warnings
emitted by GNAT SAS (also known as CodePeer). It does not change
the behavior of the modified subprogram.
gcc/ada/
* libgnat/a-direct.adb (Start_Search_Internal): Tweak subprogram
body.
Diff:
---
gcc/ada/libgnat/a-direct.adb | 46 ++++++++++++++++++++++++--------------------
1 file changed, 25 insertions(+), 21 deletions(-)
diff --git a/gcc/ada/libgnat/a-direct.adb b/gcc/ada/libgnat/a-direct.adb
index f7a1d5dfd6d..594971c6021 100644
--- a/gcc/ada/libgnat/a-direct.adb
+++ b/gcc/ada/libgnat/a-direct.adb
@@ -1379,13 +1379,21 @@ package body Ada.Directories is
Compose (Directory, File_Name) & ASCII.NUL;
Path : String renames
Path_C (Path_C'First .. Path_C'Last - 1);
- Found : Boolean := False;
Attr : aliased File_Attributes;
Exists : Integer;
Error : Integer;
- Kind : File_Kind;
- Size : File_Size;
+ type Result (Found : Boolean := False) is record
+ case Found is
+ when True =>
+ Kind : File_Kind;
+ Size : File_Size;
+ when False =>
+ null;
+ end case;
+ end record;
+
+ Res : Result := (Found => False);
begin
-- Get the file attributes for the directory item
@@ -1416,32 +1424,28 @@ package body Ada.Directories is
if Is_Regular_File_Attr (Path_C'Address, Attr'Access) = 1
then
if Filter (Ordinary_File) then
- Found := True;
- Kind := Ordinary_File;
- Size :=
- File_Size
- (File_Length_Attr
- (-1, Path_C'Address, Attr'Access));
+ Res := (Found => True,
+ Kind => Ordinary_File,
+ Size => File_Size
+ (File_Length_Attr
+ (-1, Path_C'Address, Attr'Access)));
end if;
elsif Is_Directory_Attr (Path_C'Address, Attr'Access) = 1
then
if Filter (File_Kind'First) then
- Found := True;
- Kind := File_Kind'First;
- -- File_Kind'First is used instead of Directory due
- -- to a name overload issue with the procedure
- -- parameter Directory.
- Size := 0;
+ Res := (Found => True,
+ Kind => File_Kind'First,
+ Size => 0);
end if;
elsif Filter (Special_File) then
- Found := True;
- Kind := Special_File;
- Size := 0;
+ Res := (Found => True,
+ Kind => Special_File,
+ Size => 0);
end if;
- if Found then
+ if Res.Found then
Search.State.Dir_Contents.Append
(Directory_Entry_Type'
(Valid => True,
@@ -1449,9 +1453,9 @@ package body Ada.Directories is
To_Unbounded_String (File_Name),
Full_Name => To_Unbounded_String (Path),
Attr_Error_Code => 0,
- Kind => Kind,
+ Kind => Res.Kind,
Modification_Time => Modification_Time (Path),
- Size => Size));
+ Size => Res.Size));
end if;
end if;
end;
More information about the Gcc-cvs
mailing list