/usr/share/ada/adainclude/aws/aws-resources-streams-pipe.adb is in libaws3.2.0-dev 3.2.0-3.
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 117 118 119 120 121 122 123 124 | ------------------------------------------------------------------------------
-- Ada Web Server --
-- --
-- Copyright (C) 2007-2012, AdaCore --
-- --
-- This library is free software; you can redistribute it and/or modify --
-- it under terms of the GNU General Public License as published by the --
-- Free Software Foundation; either version 3, 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. --
-- --
-- --
-- --
-- --
-- --
-- You should have received a copy of the GNU General Public License and --
-- a copy of the GCC Runtime Library Exception along with this program; --
-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
-- <http://www.gnu.org/licenses/>. --
-- --
-- --
-- --
-- --
-- --
-- --
-- --
------------------------------------------------------------------------------
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;
|