posix file: Add procedure to query the size of a file

Change-Id: Ib3b31e90ca98dc09185463ce467a70770e0f222d
Signed-off-by: Nico Huber <nico.h@gmx.de>
Reviewed-on: https://review.coreboot.org/21095
Reviewed-by: Arthur Heymans <arthur@aheymans.xyz>
diff --git a/ada/posix/hw-file.adb b/ada/posix/hw-file.adb
index e2384be..dd9d7f3 100644
--- a/ada/posix/hw-file.adb
+++ b/ada/posix/hw-file.adb
@@ -14,6 +14,7 @@
 
 with Interfaces.C;
 with Interfaces.C.Strings;
+with Ada.Directories;
 
 with HW.Debug;
 
@@ -68,4 +69,18 @@
       pragma Debug (not Success, Debug.New_Line);
    end Map;
 
+   procedure Size (Length : out Natural; Path : String)
+   with
+      SPARK_Mode => Off
+   is
+      use type Ada.Directories.File_Size;
+      Res_Size : Ada.Directories.File_Size;
+   begin
+      Res_Size := Ada.Directories.Size (Path);
+      Length := Natural (Res_Size);
+   exception
+      when others =>
+         Length := 0;
+   end Size;
+
 end HW.File;
diff --git a/common/hw-file.ads b/common/hw-file.ads
index 9dbfcf7..bc2242c 100644
--- a/common/hw-file.ads
+++ b/common/hw-file.ads
@@ -39,4 +39,8 @@
       Pre => (Readable or Writable) and
              (if Map_Copy then Readable and not Writable);
 
+   -- Sets `Length` to the size of the file given by `Path` or 0 if an
+   -- error occurs.
+   procedure Size (Length : out Natural; Path : String);
+
 end HW.File;