/usr/share/ada/adainclude/aws/aws-resources-streams-pipe.adb is in libaws2.10.2-dev 2.10.2-4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | ------------------------------------------------------------------------------
-- Ada Web Server --
-- --
-- Copyright (C) 2007-2009, AdaCore --
-- --
-- This library is free software; you can redistribute it and/or modify --
-- it under the terms of the GNU General Public License as published by --
-- the Free Software Foundation; either version 2 of the License, or (at --
-- your option) any later version. --
-- --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY; without even the implied warranty of --
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU --
-- General Public License for more details. --
-- --
-- You should have received a copy of the GNU General Public License --
-- along with this library; if not, write to the Free Software Foundation, --
-- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --
-- --
------------------------------------------------------------------------------
with GNAT.Regpat;
with AWS.Translator;
package body AWS.Resources.Streams.Pipe is
-----------
-- Close --
-----------
overriding procedure Close (Resource : in out Stream_Type) is
begin
Expect.Close (Resource.Pid);
end Close;
-----------------
-- End_Of_File --
-----------------
overriding function End_Of_File
(Resource : Stream_Type) return Boolean is
begin
return Resource.EOF;
end End_Of_File;
----------
-- Open --
----------
procedure Open
(Pipe : out Stream_Type;
Command : String;
Args : OS_Lib.Argument_List;
Timeout : Integer := 10_000) is
begin
Expect.Non_Blocking_Spawn (Pipe.Pid, Command, Args);
Pipe.EOF := False;
Pipe.Timeout := Timeout;
end Open;
----------
-- Read --
----------
overriding procedure Read
(Resource : in out Stream_Type;
Buffer : out Stream_Element_Array;
Last : out Stream_Element_Offset)
is
Regexp : constant Regpat.Pattern_Matcher :=
Regpat.Compile (".+", Flags => Regpat.Single_Line);
Result : Expect.Expect_Match;
begin
while Length (Resource.Buffer) < Buffer'Length loop
begin
Expect.Expect (Resource.Pid, Result, Regexp, Resource.Timeout);
exception
when Expect.Process_Died =>
Resource.EOF := True;
exit;
end;
case Result is
when 1 =>
Append (Resource.Buffer, Expect.Expect_Out (Resource.Pid));
when Expect.Expect_Timeout =>
Last := Buffer'First - 1;
return;
when others =>
Last := Buffer'First - 1;
return;
end case;
end loop;
declare
L : constant Natural := Length (Resource.Buffer);
begin
if Buffer'Length >= L then
Last := Buffer'First + Stream_Element_Offset (L) - 1;
Buffer (Buffer'First .. Last) :=
Translator.To_Stream_Element_Array (To_String (Resource.Buffer));
Resource.Buffer := Null_Unbounded_String;
else
Buffer := Translator.To_Stream_Element_Array
(Slice (Resource.Buffer, 1, Buffer'Length));
Last := Buffer'Last;
Delete (Resource.Buffer, 1, Buffer'Length);
end if;
end;
end Read;
end AWS.Resources.Streams.Pipe;
|