Add NullFS
Signed-off-by: Thomas Heijligen <src@posteo.de>
diff --git a/src/filo-fs-nullfs.adb b/src/filo-fs-nullfs.adb
index dc0ca28..73195ba 100644
--- a/src/filo-fs-nullfs.adb
+++ b/src/filo-fs-nullfs.adb
@@ -1,59 +1,13 @@
+with FILO.Blockdev;
+
package body FILO.FS.NullFS is
- Global_NullFS : NullFS_Type := (
- State => Unmounted
- );
-
- procedure Mount
- (Item : in out NullFS_Type;
- Success : out Boolean)
- is
- begin
- Success := True;
- Item.State := Mounted;
- end Mount;
-
- procedure Open
- (Item : in out NullFS_Type;
- Path : in String;
- Success : out Boolean)
- is
- begin
- Success := True;
- Item.State := File_Open;
- end Open;
-
- procedure Read
- (Item : in out NullFS_Type;
- Buffer : in out Buffer_Type;
- Offset : in Natural;
- Success : out Boolean)
- is
- begin
- Success := True;
- null;
- end Read;
-
- procedure Close
- (Item : in out NullFS_Type;
- Success : out Boolean)
- is
- begin
- Success := True;
- Item.State := Mounted;
- end Close;
-
- ---------------------------------------------------------------------A
-
function To_Int (Success : Boolean) return Interfaces.C.int is
(if Success then 1 else 0);
- function C_Mount return Interfaces.C.int
- is
- Success : Boolean;
+ function C_Mount return Interfaces.C.int is
begin
- Mount(Global_NullFS, Success);
- return To_Int (Success);
+ return To_Int (True);
end C_Mount;
function C_Read
@@ -62,38 +16,26 @@
return Interfaces.C.int
with SPARK_Mode => Off
is
- use FILO.FS;
Buffer : Buffer_Type (0 .. Integer(len) - 1) with Address => buf;
- Offset : constant Natural := Natural(File_Pos);
+ Offset : constant Blockdev_Offset := Blockdev_Offset(File_Pos);
Success : Boolean;
begin
- Read (Global_NullFS, Buffer, Offset, Success);
- if Success then
- Set_File_Pos (File_Length (Offset + Buffer'Length));
- end if;
- return To_Int (Success);
-
+ FILO.Blockdev.Read (Buffer, Offset, Success);
+ return To_Int (Success);
end C_Read;
+
function C_Dir
- (Path : Interfaces.C.Strings.chars_ptr)
+ (Path : System.Address)
return Interfaces.C.int
with SPARK_Mode => Off
is
- use Interfaces.C.Strings;
- Success : Boolean;
+ First_Byte : Unsigned_8 with Address => Path;
begin
- Open (Global_NullFS, Value (Path), Success);
- return To_Int (Success);
+ if First_Byte = 0 then
+ return To_Int (True);
+ end if;
+ return To_Int (False);
end C_Dir;
- function C_Close return Interfaces.C.int
- with SPARK_Mode => Off
- is
- Success : Boolean;
- begin
- Close (Global_NullFS, Success);
- return To_Int (Success);
- end C_Close;
-
end FILO.FS.NullFS;