summaryrefslogtreecommitdiff
path: root/sv.c
diff options
context:
space:
mode:
authorGurusamy Sarathy <gsar@cpan.org>2000-07-12 21:33:46 +0000
committerGurusamy Sarathy <gsar@cpan.org>2000-07-12 21:33:46 +0000
commitbb2899ba824e18be66f3ca9d67696457ff235d98 (patch)
tree89a0cca3a709b17714db1baa56507ac81cc5e2c2 /sv.c
parent6a5ada239eeaf83e6f47b65aa763561ee128221a (diff)
downloadperl-bb2899ba824e18be66f3ca9d67696457ff235d98.tar.gz
fix bugs in processing %v-*d and similar format specs (from
Avi Finkel <avi@finkel.org>) p4raw-id: //depot/perl@6385
Diffstat (limited to 'sv.c')
-rw-r--r--sv.c28
1 files changed, 17 insertions, 11 deletions
diff --git a/sv.c b/sv.c
index 6ee91be32f..5f5d2819e4 100644
--- a/sv.c
+++ b/sv.c
@@ -5963,17 +5963,6 @@ Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV
case 'v':
vectorize = TRUE;
q++;
- if (args)
- vecsv = va_arg(*args, SV*);
- else if (svix < svmax)
- vecsv = svargs[svix++];
- else {
- vecstr = (U8*)"";
- veclen = 0;
- continue;
- }
- vecstr = (U8*)SvPVx(vecsv,veclen);
- utf = DO_UTF8(vecsv);
continue;
default:
@@ -6024,6 +6013,23 @@ Perl_sv_vcatpvfn(pTHX_ SV *sv, const char *pat, STRLEN patlen, va_list *args, SV
has_precis = TRUE;
}
+ if (vectorize) {
+ if (args) {
+ vecsv = va_arg(*args, SV*);
+ vecstr = (U8*)SvPVx(vecsv,veclen);
+ utf = DO_UTF8(vecsv);
+ }
+ else if (svix < svmax) {
+ vecsv = svargs[svix++];
+ vecstr = (U8*)SvPVx(vecsv,veclen);
+ utf = DO_UTF8(vecsv);
+ }
+ else {
+ vecstr = (U8*)"";
+ veclen = 0;
+ }
+ }
+
/* SIZE */
switch (*q) {