From 4630cb951d5b083a6f4c06ada4a7fe4500a4707c Mon Sep 17 00:00:00 2001 From: Dietmar Maurer Date: Fri, 2 Dec 2011 06:28:43 +0100 Subject: [PATCH] correctly call errfunc inside run_command --- Makefile | 2 +- data/PVE/Tools.pm | 33 +++++++++++++++++++++++---------- debian/changelog | 6 ++++++ 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/Makefile b/Makefile index 363fdaa..1b5abad 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ RELEASE=2.0 VERSION=1.0 -PKGREL=8 +PKGREL=9 PACKAGE=libpve-common-perl diff --git a/data/PVE/Tools.pm b/data/PVE/Tools.pm index 1a8d33c..33f0de1 100644 --- a/data/PVE/Tools.pm +++ b/data/PVE/Tools.pm @@ -178,12 +178,13 @@ sub run_command { my $oldtimeout; my $pid; + my $outfunc; + my $errfunc; + my $logfunc; + my $input; + my $output; + eval { - my $input; - my $output; - my $outfunc; - my $errfunc; - my $logfunc; foreach my $p (keys %param) { if ($p eq 'timeout') { @@ -192,10 +193,6 @@ sub run_command { umask($param{$p}); } elsif ($p eq 'errmsg') { $errmsg = $param{$p}; - $errfunc = sub { - print STDERR "$laststderr\n" if $laststderr; - $laststderr = shift; - }; } elsif ($p eq 'input') { $input = $param{$p}; } elsif ($p eq 'output') { @@ -211,6 +208,20 @@ sub run_command { } } + if ($errmsg) { + my $origerrfunc = $errfunc; + $errfunc = sub { + if ($laststderr) { + if ($origerrfunc) { + &$origerrfunc("$laststderr\n"); + } else { + print STDERR "$laststderr\n" if $laststderr; + } + } + $laststderr = shift; + }; + } + my $reader = $output && $output =~ m/^>&/ ? $output : IO::File->new(); my $writer = $input && $input =~ m/^<&/ ? $input : IO::File->new(); my $error = IO::File->new(); @@ -353,7 +364,9 @@ sub run_command { alarm(0); - print STDERR "$laststderr\n" if $laststderr; + if ($errmsg && $laststderr) { + &$errfunc(undef); # flush laststderr + } umask ($old_umask) if defined($old_umask); diff --git a/debian/changelog b/debian/changelog index 5e802bf..9e66272 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +libpve-common-perl (1.0-9) unstable; urgency=low + + * bug fixes for run_command() + + -- Proxmox Support Team Fri, 02 Dec 2011 10:28:27 +0100 + libpve-common-perl (1.0-8) unstable; urgency=low * make cli argument parser more flexible -- 2.39.2