with System;
with Interfaces.C;
with Interfaces.C.Strings;

use Interfaces.C;

generic

   with procedure Mount (Success : out Boolean);

   with procedure Open (File_Path : String; Success : out Boolean);
   with procedure Close with Convention => C;

   with procedure Read (Buf : out Buffer_Type; Len : out Natural);

package FS.FILO.VFS is

   function C_Mount return int;

   function C_Open (File_Path : Strings.chars_ptr) return int;
   procedure C_Close renames Close;
   
   function C_Read (Buf : System.Address; Len : int) return int;

end FS.FILO.VFS;
