From: Perl 5 Porters Date: Sat, 26 Apr 1997 12:00:00 +0000 (+1200) Subject: [inseparable changes from match from perl-5.003_97i to perl-5.003_97j] X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=c635e13b3766789d3a0231f6ee93b7f5c9f4b423;p=p5sagit%2Fp5-mst-13.2.git [inseparable changes from match from perl-5.003_97i to perl-5.003_97j] CORE PORTABILITY Subject: Return to favoring memset(,0,) over bzero() From: Chip Salzenberg Files: perl.h OTHER CORE CHANGES Subject: Update sprintf: '%hn'; '%s',NULL; panic on frexp() failure From: Chip Salzenberg Files: perl.h pod/perldiag.pod sv.c --- diff --git a/Changes b/Changes index ab86e21..2b91f84 100644 --- a/Changes +++ b/Changes @@ -46,6 +46,108 @@ And the Keepers of the Patch Pumpkin: ----------------- +Version 5.003_97j +----------------- + +This patch should be _98, unless it's egregiously broken somehow. + + CORE LANGUAGE CHANGES + + (no changes) + + CORE PORTABILITY + + Title: "Return to favoring memset(,0,) over bzero()" + From: Chip Salzenberg + Files: perl.h + + Title: "NetBSD hint update" + From: matthew green + Msg-ID: <199704251021.EAA22570@jhereg.perl.com> + Date: Fri, 25 Apr 1997 20:18:02 +1000 + Files: hints/netbsd.sh + + Title: "HP-UX hint update" + From: Chuck D. Phillips + Msg-ID: <199704280535.WAA22441@palrel1.hp.com> + Date: Sun, 27 Apr 1997 23:35:07 -0600 + Files: hints/hpux.sh + + Title: "Win32 update (three patches)" + From: Gurusamy Sarathy and Nick Ing-Simmons + Files: win32/makedef.pl win32/perllib.c win32/win32.c + + OTHER CORE CHANGES + + Title: "Update sprintf: '%hn'; '%s',NULL; panic on frexp() failure" + From: Chip Salzenberg + Files: perl.h pod/perldiag.pod sv.c + + Title: "Fix lingering '%S' in XS_VERSION_BOOTCHECK" + From: Chip Salzenberg + Files: XSUB.h + + Title: "Eliminate Alpha warnings" + From: Hallvard B Furuseth and Chip Salzenberg + Files: perlsdio.h pp_sys.c + + Title: "Fix typo in NeXT dynaloader" + From: Chip Salzenberg + Files: ext/DynaLoader/dl_next.xs + + Title: "Fix possible buffer overflow under VMS" + From: Chip Salzenberg + Files: taint.c + + BUILD PROCESS + + (no changes) + + LIBRARY AND EXTENSIONS + + Title: "Refresh CGI.pm to 2.35" + From: Lincoln Stein + Files: lib/CGI.pm + + Title: "Refresh DB_File to 1.13" + From: Paul Marquess + Msg-ID: <9704271413.AA08876@claudius.bfsec.bt.co.uk> + Date: Sun, 27 Apr 1997 15:12:59 +0100 (BST) + Files: ext/DB_File/DB_File.pm ext/DB_File/DB_File.xs + + Title: "SelfLoader: fix prototype pattern, rename intrusive lexical" + From: Jesse Glick and Chip Salzenberg + Files: lib/SelfLoader.pm + + TESTS + + (no changes) + + UTILITIES + + (no changes) + + DOCUMENTATION + + Title: "Split perlmod" + From: Tom Christiansen + Msg-ID: <199704260050.RAA02468@toy.perl.com> + Date: Fri, 25 Apr 1997 20:50:09 -0400 + Files: MANIFEST pod/Makefile pod/buildtoc pod/perl.pod + pod/perldsc.pod pod/perlfaq3.pod pod/perlipc.pod + pod/perlmod.pod pod/perlmodlib.pod pod/perlobj.pod + pod/perltie.pod pod/roffitall + + Title: "Describe __PACKAGE__ in perldelta" + From: Chip Salzenberg + Files: pod/perldelta.pod + + Title: "Doc fix for close of pipe handle" + From: Chip Salzenberg + Files: pod/perlfunc.pod + + +----------------- Version 5.003_97i ----------------- diff --git a/patchlevel.h b/patchlevel.h index 38de854..cdc7186 100644 --- a/patchlevel.h +++ b/patchlevel.h @@ -38,7 +38,7 @@ */ static char *local_patches[] = { NULL - ,"Dev97A-I - Nine development patches to 5.003_97" + ,"Dev97A-J - Ten development patches to 5.003_97" ,NULL }; diff --git a/perl.h b/perl.h index ac87be0..77ffb53 100644 --- a/perl.h +++ b/perl.h @@ -340,11 +340,11 @@ #endif /* HAS_MEMCMP && HAS_SANE_MEMCMP */ #ifndef memzero -# ifdef HAS_BZERO -# define memzero(d,l) bzero(d,l) +# ifdef HAS_MEMSET +# define memzero(d,l) memset(d,0,l) # else -# ifdef HAS_MEMSET -# define memzero(d,l) memset(d,0,l) +# ifdef HAS_BZERO +# define memzero(d,l) bzero(d,l) # else # define memzero(d,l) my_bzero(d,l) # endif @@ -1210,7 +1210,10 @@ char *strcpy(), *strcat(); # endif double exp _((double)); double log _((double)); + double log10 _((double)); double sqrt _((double)); + double frexp _((double,int*)); + double ldexp _((double,int)); double modf _((double,double*)); double sin _((double)); double cos _((double)); diff --git a/pod/perldiag.pod b/pod/perldiag.pod index 5ee141e..16fd451 100644 --- a/pod/perldiag.pod +++ b/pod/perldiag.pod @@ -1249,6 +1249,11 @@ C<./Configure -S> and rebuild Perl. (F) The range specified in a character class had a minimum character greater than the maximum character. See L. +=item Invalid conversion in %s: "%s" + +(F) Perl does not understand the given format conversion. +See L. + =item Invalid type in pack: '%s' (F) The given character is not a valid pack type. See L. @@ -1699,6 +1704,10 @@ it wasn't an eval context. (P) The internal do_trans() routine was called with invalid operational data. +=item panic: frexp + +(P) The library function frexp() failed, making printf("%f") impossible. + =item panic: goto (P) We popped the context stack to a context with the specified label, diff --git a/pod/perltoc.pod b/pod/perltoc.pod index b699e7f..8000468 100644 --- a/pod/perltoc.pod +++ b/pod/perltoc.pod @@ -924,6 +924,10 @@ CGI script to do bad things? =item Internal change: PerlIO abstraction interface +=item New and changed builtin constants + +__PACKAGE__ + =item New and changed builtin variables $^E, $^H, $^M @@ -1364,7 +1368,7 @@ $ARGV, @ARGV, @INC, %INC, $ENV{expr}, $SIG{expr}, $^M =item SEE ALSO -=head2 perlmod - Perl modules (packages) +=head2 perlmod - Perl modules (packages and symbol tables) =item DESCRIPTION @@ -1382,7 +1386,11 @@ $ARGV, @ARGV, @INC, %INC, $ENV{expr}, $SIG{expr}, $^M =back -=item NOTE +=item SEE ALSO + +=head2 perlmodlib - constructing new Perl modules and finding existing ones + +=item DESCRIPTION =item THE PERL MODULE LIBRARY @@ -1390,8 +1398,8 @@ $ARGV, @ARGV, @INC, %INC, $ENV{expr}, $SIG{expr}, $^M =item Pragmatic Modules -blib, diagnostics, integer, less, lib, locale, ops, overload, sigtrap, -strict, subs, vmsish, vars +use autouse MODULE => qw(sub1 sub2 sub3), blib, diagnostics, integer, less, +lib, locale, ops, overload, sigtrap, strict, subs, vmsish, vars =item Standard Modules @@ -1470,6 +1478,8 @@ can then be reduced to a small =back +=item NOTE + =head2 perlform - Perl formats =item DESCRIPTION @@ -2850,7 +2860,7 @@ clearcache ( COUNT ), clearallcache ( ), disablecache ( ), enablecache ( ) =item ABSTRACT -=item INSTALLATION: +=item INSTALLATION =item DESCRIPTION @@ -2896,7 +2906,7 @@ B, 4, 5, 6.. =back -=item CREATING FORMS: +=item CREATING FORMS =over @@ -2986,7 +2996,7 @@ scripts, B, B, B, B, B, B, B, B -=item CREATING HTML ELEMENTS: +=item CREATING HTML ELEMENTS =over diff --git a/sv.c b/sv.c index 45fb77f..d4bc47e 100644 --- a/sv.c +++ b/sv.c @@ -1121,7 +1121,7 @@ IV i; case SVt_PVFM: case SVt_PVIO: croak("Can't coerce %s to integer in %s", sv_reftype(sv,0), - op_name[op->op_type]); + op_desc[op->op_type]); } (void)SvIOK_only(sv); /* validate number */ SvIVX(sv) = i; @@ -4163,6 +4163,7 @@ sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, used_locale) char *patend; STRLEN origlen; I32 svix = 0; + static char nullstr[] = "(null)"; /* no matter what, this is a string now */ (void)SvPV_force(sv, origlen); @@ -4173,8 +4174,10 @@ sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, used_locale) if (patlen == 2 && pat[0] == '%') { switch (pat[1]) { case 's': - if (args) - sv_catpv(sv, va_arg(*args, char*)); + if (args) { + char *s = va_arg(*args, char*); + sv_catpv(sv, s ? s : nullstr); + } else if (svix < svmax) sv_catsv(sv, *svargs); return; @@ -4340,7 +4343,12 @@ sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, used_locale) case 's': if (args) { eptr = va_arg(*args, char*); - elen = strlen(eptr); + if (eptr) + elen = strlen(eptr); + else { + eptr = nullstr; + elen = sizeof nullstr - 1; + } } else if (svix < svmax) eptr = SvPVx(svargs[svix++], elen); @@ -4498,8 +4506,8 @@ sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, used_locale) i = PERL_INT_MIN; (void)frexp(nv, &i); if (i == PERL_INT_MIN) - need = 400; /* busted -- be safe */ - else if (i > 0) + die("panic: frexp"); + if (i > 0) need = BIT_DIGITS(i); } need += has_precis ? precis : 6; /* known default */ @@ -4555,8 +4563,12 @@ sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, used_locale) case 'n': i = SvCUR(sv) - origlen; if (args) { - int *ip = va_arg(*args, int*); - *ip = i; + switch (intsize) { + case 'h': *(va_arg(*args, short*)) = i; break; + default: *(va_arg(*args, int*)) = i; break; + case 'l': *(va_arg(*args, long*)) = i; break; + case 'V': *(va_arg(*args, IV*)) = i; break; + } } else if (svix < svmax) sv_setuv(svargs[svix++], (UV)i); @@ -4566,7 +4578,19 @@ sv_vcatpvfn(sv, pat, patlen, args, svargs, svmax, used_locale) default: unknown: - /* output mangled stuff without comment */ + if (!args && dowarn && + (op->op_type == OP_PRTF || op->op_type == OP_SPRINTF)) { + SV *msg = sv_newmortal(); + sv_setpvf(msg, "Invalid conversion in %s: ", + (op->op_type == OP_PRTF) ? "printf" : "sprintf"); + if (c) + sv_catpvf(msg, isPRINT(c) ? "\"%%%c\"" : "\"%%\\%03o\"", + c & 0xFF); + else + sv_catpv(msg, "end of string"); + warn("%_", msg); /* yes, this is reentrant */ + } + /* output mangled stuff */ eptr = p; elen = q - p; break;