From 417130506798627a70d5a82df51a91326d2738e0 Mon Sep 17 00:00:00 2001 From: Jordi Boggiano Date: Tue, 24 Apr 2012 18:59:33 +0200 Subject: [PATCH] [Console] Use proc_open instead of exec to suppress errors when run on windows and stty is not present --- src/Symfony/Component/Console/Application.php | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/Symfony/Component/Console/Application.php b/src/Symfony/Component/Console/Application.php index 38b3c54d3c..69c36ffc9e 100644 --- a/src/Symfony/Component/Console/Application.php +++ b/src/Symfony/Component/Console/Application.php @@ -838,7 +838,7 @@ class Application return preg_replace('{^(\d+)x.*$}', '$1', $ansicon); } - if (preg_match("{rows.(\d+);.columns.(\d+);}i", exec('stty -a | grep columns'), $match)) { + if (preg_match("{rows.(\d+);.columns.(\d+);}i", $this->getSttyColumns(), $match)) { return $match[1]; } } @@ -854,7 +854,7 @@ class Application return preg_replace('{^\d+x\d+ \(\d+x(\d+)\)$}', '$1', trim($ansicon)); } - if (preg_match("{rows.(\d+);.columns.(\d+);}i", exec('stty -a | grep columns'), $match)) { + if (preg_match("{rows.(\d+);.columns.(\d+);}i", $this->getSttyColumns(), $match)) { return $match[2]; } } @@ -914,6 +914,25 @@ class Application )); } + /** + * Runs and parses stty -a if it's available, suppressing any error output + * + * @return string + */ + private function getSttyColumns() + { + $descriptorspec = array(1 => array('pipe', 'w'), 2 => array('pipe', 'w')); + $process = proc_open('stty -a | grep columns', $descriptorspec, $pipes, null, null, array('suppress_errors' => true)); + if (is_resource($process)) { + $info = stream_get_contents($pipes[1]); + fclose($pipes[1]); + fclose($pipes[2]); + proc_close($process); + + return $info; + } + } + /** * Sorts commands in alphabetical order. *