diff options
author | Larry Wall <lwall@netlabs.com> | 1992-06-22 23:34:36 +0000 |
---|---|---|
committer | Larry Wall <lwall@netlabs.com> | 1992-06-22 23:34:36 +0000 |
commit | 514dae0dba791ec01681adb3b3946a7646e146b3 (patch) | |
tree | 95280cdcdd307611323bb1b859147eeccfd8c23d | |
parent | faf8582f0c418b57fd71e105da84edbb3177fa0c (diff) | |
download | perl-514dae0dba791ec01681adb3b3946a7646e146b3.tar.gz |
perl 4.0 patch 35: (combined patch)
Subject: bad interaction between backslash and hyphen in tr///
Among other things, tr/\040-\126/ / was not doing a character range,
due to a earlier botched fix to make \- work right.
Subject: Configure test for presence of nroff was wrong
If Loc doesn't find nroff, it sets $nroff to 'nroff'. The man
page test was tesing against the null string.
Subject: installperl error message printed file mode in decimal, not octal
A real, honest-to-goodnes nit.
Subject: fixed up some filenames in MANIFEST
Erroneously contained "pstruct", omitted hints/isc_3_2_3.sh.
-rwxr-xr-x | Configure | 4 | ||||
-rw-r--r-- | MANIFEST | 2 | ||||
-rw-r--r-- | installperl | 2 | ||||
-rw-r--r-- | patchlevel.h | 2 | ||||
-rw-r--r-- | toke.c | 27 |
5 files changed, 27 insertions, 10 deletions
@@ -8,7 +8,7 @@ # and edit it to reflect your system. Some packages may include samples # of config.h for certain machines, so you might look for one of those.) # -# $RCSfile: Configure,v $$Revision: 4.0.1.8 $$Date: 92/06/11 21:04:45 $ +# $RCSfile: Configure,v $$Revision: 4.0.1.9 $$Date: 92/06/23 12:28:33 $ # # Yes, you may rip this off to use in other distribution packages. # (Note: this Configure script was generated automatically. Rather than @@ -877,7 +877,7 @@ $cat <<EOM $package has manual pages available in source form. EOM case "$nroff" in -'') +'nroff') echo "However, you don't have nroff, so they're probably useless to you." case "$mansrc" in '') @@ -146,6 +146,7 @@ hints/hp9000_800.sh hints/hpux.sh hints/i386.sh hints/isc_3_2_2.sh +hints/isc_3_2_3.sh hints/mc6000.sh hints/mips.sh hints/mpc.sh @@ -264,7 +265,6 @@ perl.man The manual page(s) perlsh A poor man's perl shell perly.fixer A program to remove yacc stack limitations perly.y Yacc grammar for perl -pstruct regcomp.c Regular expression compiler regcomp.h Private declarations for above regexec.c Regular expression evaluator diff --git a/installperl b/installperl index b5ef496f91..4f3fc0004d 100644 --- a/installperl +++ b/installperl @@ -198,7 +198,7 @@ sub chmod { local($mode,$name) = @_; printf STDERR " chmod %o %s\n", $mode, $name; - chmod($mode,$name) || warn "Couldn't chmod $mode $name: $!\n" + chmod($mode,$name) || warn sprintf("Couldn't chmod %o %s: $!\n",$mode,$name) unless $nonono; } diff --git a/patchlevel.h b/patchlevel.h index 3b47b479b6..68fcfefec9 100644 --- a/patchlevel.h +++ b/patchlevel.h @@ -1 +1 @@ -#define PATCHLEVEL 34 +#define PATCHLEVEL 35 @@ -1,4 +1,4 @@ -/* $RCSfile: toke.c,v $$Revision: 4.0.1.7 $$Date: 92/06/11 21:16:30 $ +/* $RCSfile: toke.c,v $$Revision: 4.0.1.8 $$Date: 92/06/23 12:33:45 $ * * Copyright (c) 1991, Larry Wall * @@ -6,6 +6,9 @@ * License or the Artistic License, as specified in the README file. * * $Log: toke.c,v $ + * Revision 4.0.1.8 92/06/23 12:33:45 lwall + * patch35: bad interaction between backslash and hyphen in tr/// + * * Revision 4.0.1.7 92/06/11 21:16:30 lwall * patch34: expectterm incorrectly set to indicate start of program or block * @@ -2297,6 +2300,7 @@ int in_what; STR *tmpstr; STR *tmpstr2 = Nullstr; char *tmps; + bool dorange = FALSE; CLINE; multi_start = curcmd->c_line; @@ -2394,10 +2398,11 @@ int in_what; s++; } s = d = tmpstr->str_ptr; /* assuming shrinkage only */ - while (s < send) { + while (s < send || dorange) { if (in_what & SCAN_TR) { - if (*s != '\\' && s[1] == '-' && s+2 < send) { + if (dorange) { int i; + int max; if (!tmpstr2) { /* oops, have to grow */ tmpstr2 = str_smake(tmpstr); s = tmpstr2->str_ptr + (s - tmpstr->str_ptr); @@ -2406,11 +2411,17 @@ int in_what; i = d - tmpstr->str_ptr; STR_GROW(tmpstr, tmpstr->str_len + 256); d = tmpstr->str_ptr + i; - for (i = (s[0] & 0377); i <= (s[2] & 0377); i++) + d -= 2; + max = d[1] & 0377; + for (i = (*d & 0377); i <= max; i++) *d++ = i; - s += 3; + dorange = FALSE; continue; } + else if (*s == '-' && s+1 < send && d != tmpstr->str_ptr) { + dorange = TRUE; + s++; + } } else { if ((*s == '$' && s+1 < send && @@ -2432,6 +2443,12 @@ int in_what; if (*s == '\\' && s+1 < send) { s++; switch (*s) { + case '-': + if (in_what & SCAN_TR) { + *d++ = *s++; + continue; + } + /* FALL THROUGH */ default: if (!makesingle && (!leave || (*s && index(leave,*s)))) *d++ = '\\'; |