]> err.no Git - dpkg/commitdiff
Dpkg::IPC: New {to,from}_string options for fork_and_exec
authorFrank Lichtenheld <djpig@debian.org>
Fri, 15 Feb 2008 20:30:15 +0000 (21:30 +0100)
committerFrank Lichtenheld <djpig@debian.org>
Fri, 15 Feb 2008 21:13:25 +0000 (22:13 +0100)
* scripts/Dpkg/IPC.pm (fork_and_exec): Add new options
{to,from}_string. For symmetry reasons both options take
a scalar reference, even though this is really only
necessary for to_string. to_string implies the
wait_child option.

scripts/Dpkg/IPC.pm

index 7f8a46aac1088f1d2dc100b823b097cf5c91a360..eb4285484424ff4d6bb661ece86b5a48aed4baa3 100644 (file)
@@ -1,4 +1,5 @@
 # Copyright 2008 RaphaĆ«l Hertzog <hertzog@debian.org>
+# Copyright 2008 Frank Lichtenheld <djpig@debian.org>
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -38,6 +39,14 @@ sub fork_and_exec {
     } else {
        error(_g("invalid exec parameter in fork_and_exec()"));
     }
+    my ($from_string_pipe, $to_string_pipe);
+    if ($opts{"to_string"}) {
+       $opts{"to_pipe"} = \$to_string_pipe;
+       $opts{"wait_child"} = 1;
+    }
+    if ($opts{"from_string"}) {
+       $opts{"from_pipe"} = \$from_string_pipe;
+    }
     # Create pipes if needed
     my ($input_pipe, $output_pipe);
     if ($opts{"from_pipe"}) {
@@ -81,6 +90,14 @@ sub fork_and_exec {
     close($opts{"from_handle"}) if exists $opts{"from_handle"};
     close($opts{"to_handle"}) if exists $opts{"to_handle"};
 
+    if ($opts{"from_string"}) {
+       print $from_string_pipe ${$opts{"from_string"}};
+       close($from_string_pipe);
+    }
+    if ($opts{"to_string"}) {
+       local $/ = undef;
+       ${$opts{"to_string"}} = readline($to_string_pipe);
+    }
     if ($opts{"wait_child"}) {
        wait_child($pid, cmdline => "@prog");
        return 1;