summaryrefslogtreecommitdiff
path: root/sv.c
diff options
context:
space:
mode:
authorRobin Barker <RMBarker@cpan.org>2005-01-05 11:55:09 +0000
committerRafael Garcia-Suarez <rgarciasuarez@gmail.com>2005-01-07 13:41:47 +0000
commit5df617be18e4372550725f3369e8e3fd641cce19 (patch)
tree172282af6bdb14d16cc4b3478ec7bb6ea532dc14 /sv.c
parent7a5fd60d4ce737f71e7a689eaa2061a36dd225dc (diff)
downloadperl-5df617be18e4372550725f3369e8e3fd641cce19.tar.gz
to improve -DCHECK_FORMAT
Message-ID: <533D273D4014D411AB1D00062938C4D90849C55A@hotel.npl.co.uk> p4raw-id: //depot/perl@23767
Diffstat (limited to 'sv.c')
-rw-r--r--sv.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/sv.c b/sv.c
index a009dfcb5e..d750f10944 100644
--- a/sv.c
+++ b/sv.c
@@ -9392,6 +9392,11 @@ Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV
fill = *q++;
EXPECT_NUMBER(q, width);
+#ifdef CHECK_FORMAT
+ if ((*q == 'p') && left) {
+ vectorize = (width == 1);
+ }
+#endif
if (vectorize) {
if (vectorarg) {
if (args)
@@ -9583,6 +9588,9 @@ Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV
goto string;
case '_':
+#ifdef CHECK_FORMAT
+ format_sv:
+#endif
/*
* The "%_" hack might have to be changed someday,
* if ISO or ANSI decide to use '_' for something.
@@ -9604,6 +9612,19 @@ Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV
/* INTEGERS */
case 'p':
+#ifdef CHECK_FORMAT
+ if (left) {
+ left = FALSE;
+ if (width > 0) {
+ width = 0;
+ if (vectorize)
+ goto format_d;
+ precis = width;
+ has_precis = TRUE;
+ }
+ goto format_sv;
+ }
+#endif
if (alt || vectorize)
goto unknown;
uv = PTR2UV(args ? va_arg(*args, void*) : argsv);
@@ -9616,6 +9637,9 @@ Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV
#else
intsize = 'l';
#endif
+#ifdef CHECK_FORMAT
+ format_d:
+#endif
/* FALL THROUGH */
case 'd':
case 'i':