with Agpl.Strings.Fields;
with Ada.Streams.Stream_Io;
package body Agpl.Filesystem is
------------------
-- Ensure_Slash --
------------------
function Ensure_Slash (This : in String; Separator : in Character := '/')
return String is
begin
if This (This'Last) /= Separator then
return This & Separator;
else
return This;
end if;
end Ensure_Slash;
-----------------------
-- Replace_Extension --
-----------------------
function Replace_Extension (This : in String; New_Ext : in String)
return String
is
begin
return Strings.Fields.String_Tail_Reverse (This, '.') & '.' & New_Ext;
end Replace_Extension;
---------------
-- Read_File --
---------------
function Read_File (Name : String) return Ustring is
Result : Ustring;
use Ada.Streams.Stream_Io;
F : File_Type;
begin
Open (F, In_File, Name);
declare
Length : constant Natural := Natural (Size (F));
Remain : Natural := Length;
Stream : constant Stream_Access := Ada.Streams.Stream_Io.Stream (F);
begin
while Remain > 0 loop
declare
Chunk : String (1 .. Natural'Min (Remain, 1000));
begin
String'Read (Stream, Chunk);
Asu.Append (Result, Chunk);
Remain := Remain - Chunk'Length;
end;
end loop;
end;
Close (F);
return Result;
exception
when others =>
Close (F);
raise;
end Read_File;
end Agpl.Filesystem;