]> gcc.gnu.org Git - gcc.git/commitdiff
ada: Tweak internal subprogram in Ada.Directories
authorRonan Desplanques <desplanques@adacore.com>
Fri, 29 Sep 2023 10:35:05 +0000 (12:35 +0200)
committerMarc Poulhiès <poulhies@adacore.com>
Tue, 10 Oct 2023 12:12:29 +0000 (14:12 +0200)
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.

gcc/ada/libgnat/a-direct.adb

index f7a1d5dfd6d62ba5309162a42e9c604495773bce..594971c60217e5540e1f00bdd5f2e1fb4b34456d 100644 (file)
@@ -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;
This page took 0.067716 seconds and 5 git commands to generate.