summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMatthew Horsfall (alh) <wolfsage@gmail.com>2011-07-31 22:42:22 -0400
committerFather Chrysostomos <sprout@cpan.org>2011-08-02 14:32:10 -0700
commite958e573604ab75ea497030026663063af7f21a6 (patch)
tree99fd8d43881b71c5c6593ff449331e1ea42be9d1 /lib
parent706c19b7f8e3507cf277370f033ddc7c57499fdf (diff)
downloadperl-e958e573604ab75ea497030026663063af7f21a6.tar.gz
RT #94988 - Support for %u in diagnostics.pm's printf()-format parser
Diffstat (limited to 'lib')
-rw-r--r--lib/diagnostics.pm8
-rw-r--r--lib/diagnostics.t9
2 files changed, 12 insertions, 5 deletions
diff --git a/lib/diagnostics.pm b/lib/diagnostics.pm
index f2d542927a..60c96ea3ce 100644
--- a/lib/diagnostics.pm
+++ b/lib/diagnostics.pm
@@ -410,22 +410,22 @@ my %msg;
# Since we strip "\.\n" when we search a warning, strip it here as well
$header =~ s/\.?$//;
- my @toks = split( /(%l?[dx]|%c|%(?:\.\d+)?[fs])/, $header );
+ my @toks = split( /(%l?[dx]|%u|%c|%(?:\.\d+)?[fs])/, $header );
if (@toks > 1) {
my $conlen = 0;
for my $i (0..$#toks){
if( $i % 2 ){
if( $toks[$i] eq '%c' ){
$toks[$i] = '.';
- } elsif( $toks[$i] eq '%d' ){
+ } elsif( $toks[$i] =~ /^%(?:d|u)$/ ){
$toks[$i] = '\d+';
} elsif( $toks[$i] =~ '^%(?:s|.*f)$' ){
$toks[$i] = $i == $#toks ? '.*' : '.*?';
} elsif( $toks[$i] =~ '%.(\d+)s' ){
$toks[$i] = ".{$1}";
- } elsif( $toks[$i] =~ '^%l*x$' ){
+ } elsif( $toks[$i] =~ '^%l*x$' ){
$toks[$i] = '[\da-f]+';
- }
+ }
} elsif( length( $toks[$i] ) ){
$toks[$i] = quotemeta $toks[$i];
$conlen += length( $toks[$i] );
diff --git a/lib/diagnostics.t b/lib/diagnostics.t
index b5db34de74..31a5802c2b 100644
--- a/lib/diagnostics.t
+++ b/lib/diagnostics.t
@@ -5,7 +5,7 @@ BEGIN {
@INC = 'lib';
}
-use Test::More tests => 8;
+use Test::More tests => 9;
BEGIN {
my $w;
@@ -54,3 +54,10 @@ seek STDERR, 0,0;
$warning = '';
warn "Execution of -e aborted due to compilation errors.\n";
like $warning, qr/The final summary message/, 'Periods at end of line';
+
+
+# Test for %d/%u
+seek STDERR, 0,0;
+$warning = '';
+warn "Bad arg length for us, is 4, should be 42";
+like $warning, qr/In C parlance/, '%u works';