From 6dfce36ce6d2a0ac83585048b02f1c4a13c832fc Mon Sep 17 00:00:00 2001 From: Calvin Buckley Date: Tue, 2 Jun 2026 00:37:50 -0300 Subject: [PATCH] Handle error strerror values in bless One annoyance with bless is its tendency to hardcode OS-specific errors in expect output, especially when the test was already making it to begin with, and bless instead hardcodes it again. Build a list of strerror values, scan the output for them, and replace them with '%s'. Perhaps this may be overzealous, but it does seem to work to keep bless output reasonable with less post-processing. --- scripts/dev/bless_tests.php | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/scripts/dev/bless_tests.php b/scripts/dev/bless_tests.php index 7493a504729c..ccbc8002e34f 100755 --- a/scripts/dev/bless_tests.php +++ b/scripts/dev/bless_tests.php @@ -5,6 +5,20 @@ die("Usage: php bless_tests.php dir/\n"); } +// Build a list of known errors on this platform, so we can avoid hardcoding +// platform-specific errors in expect output, as the errno/strerror differs +// between platforms. +$strerrors = []; +if (function_exists("posix_strerror")) { + for ($i = -1; $i < 255; $i++) { + $str = posix_strerror($i); + if (str_contains($str, "Unknown error") && $i > 0 && strlen($str) > 0) { + break; + } + $strerrors[] = $str; + } +} + $files = getFiles(array_slice($argv, 1)); foreach ($files as $path) { if (!preg_match('/^(.*)\.phpt$/', $path, $matches)) { @@ -74,6 +88,10 @@ function normalizeOutput(string $out): string { 'Resource ID#%d used as offset, casting to integer (%d)', $out); $out = preg_replace('/string\(\d+\) "([^"]*%d)/', 'string(%d) "$1', $out); + global $strerrors; + foreach ($strerrors as $strerror) { + $out = str_replace($strerror, "%s", $out); + } $out = str_replace("\0", '%0', $out); return $out; }