Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
PATCH: 3.0.8 Re: PATCH: reverse string subscripting
- X-seq: zsh-workers 13912
- From: "Bart Schaefer" <schaefer@xxxxxxxxxxxxxxxxxxxxxxx>
- To: zsh-workers@xxxxxxxxxx
- Subject: PATCH: 3.0.8 Re: PATCH: reverse string subscripting
- Date: Thu, 5 Apr 2001 16:15:07 +0000
- In-reply-to: <200104051122.NAA06140@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>
- Mailing-list: contact zsh-workers-help@xxxxxxxxxx; run by ezmlm
- References: <200104051122.NAA06140@xxxxxxxxxxxxxxxxxxxxxxxxxxxx>
On Apr 5, 1:22pm, Sven Wischnowsky wrote:
}
} % a=abcd
} % echo $a[1,(r)d]
}
} didn't work, because it stopped one character too early trying to find
} the matching substring for `d'.
It appears that all 3.0 versions of zsh have this same bug, for both
forward and reverse pattern matches. The third hunk below is just an
optimization (avoid redoing the strlen()).
Index: Src/params.c
===================================================================
--- Src/params.c 2000/09/27 03:18:54 1.1.1.6.4.6
+++ Src/params.c 2001/04/05 16:01:19
@@ -468,12 +468,14 @@
}
return a2 ? -1 : 0;
} else {
+ char *de;
d = getstrvalue(v);
if (!d || !*d)
return 0;
+ de = d + strlen(d);
if (a2) {
if (down)
- for (r = -2, t = d + strlen(d) - 1; t >= d; r--, t--) {
+ for (r = -2, t = de; t >= d; r--, t--) {
sav = *t;
*t = '\0';
if (domatch(d, c, 0) && !--num) {
@@ -482,7 +484,7 @@
}
*t = sav;
} else
- for (r = 0, t = d; *t; r++, t++) {
+ for (r = 0, t = d; t <= de; r++, t++) {
sav = *t;
*t = '\0';
if (domatch(d, c, 0) && !--num) {
@@ -493,11 +495,11 @@
}
} else {
if (down)
- for (r = -1, t = d + strlen(d) - 1; t >= d; r--, t--) {
+ for (r = -1, t = de - 1; t >= d; r--, t--) {
if (domatch(t, c, 0) && !--num)
return r;
} else
- for (r = 1, t = d; *t; r++, t++)
+ for (r = 1, t = d; t < de; r++, t++)
if (domatch(t, c, 0) && !--num)
return r;
}
--
Bart Schaefer Brass Lantern Enterprises
http://www.well.com/user/barts http://www.brasslantern.com
Zsh: http://www.zsh.org | PHPerl Project: http://phperl.sourceforge.net
Messages sorted by:
Reverse Date,
Date,
Thread,
Author