* PATCH: reverse string subscripting @ 2001-04-05 11:22 Sven Wischnowsky 2001-04-05 16:15 ` PATCH: 3.0.8 " Bart Schaefer 2001-04-05 18:09 ` Bart Schaefer 0 siblings, 2 replies; 4+ messages in thread From: Sven Wischnowsky @ 2001-04-05 11:22 UTC (permalink / raw) To: zsh-workers This is from the debian bug list: % 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'. Bye Sven Index: Src/params.c =================================================================== RCS file: /cvsroot/zsh/zsh/Src/params.c,v retrieving revision 1.32 diff -u -r1.32 params.c --- Src/params.c 2001/02/14 23:37:39 1.32 +++ Src/params.c 2001/04/05 11:21:51 @@ -1113,6 +1113,8 @@ if (beg < 0) beg += len; if (beg >= 0 && beg < len) { + char *de = d + len; + if (a2) { if (down) { if (!hasbeg) @@ -1128,7 +1130,7 @@ *t = sav; } } else - for (r = beg, t = d + beg; *t; r++, t++) { + for (r = beg, t = d + beg; t <= de; r++, t++) { sav = *t; *t = '\0'; if (pattry(pprog, d) && @@ -1148,7 +1150,7 @@ return r; } } else - for (r = beg + 1, t = d + beg; *t; r++, t++) + for (r = beg + 1, t = d + beg; t <= de; r++, t++) if (pattry(pprog, t) && !--num) return r; -- Sven Wischnowsky wischnow@informatik.hu-berlin.de ^ permalink raw reply [flat|nested] 4+ messages in thread
* PATCH: 3.0.8 Re: PATCH: reverse string subscripting 2001-04-05 11:22 PATCH: reverse string subscripting Sven Wischnowsky @ 2001-04-05 16:15 ` Bart Schaefer 2001-04-05 18:09 ` Bart Schaefer 1 sibling, 0 replies; 4+ messages in thread From: Bart Schaefer @ 2001-04-05 16:15 UTC (permalink / raw) To: zsh-workers 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 ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: PATCH: reverse string subscripting 2001-04-05 11:22 PATCH: reverse string subscripting Sven Wischnowsky 2001-04-05 16:15 ` PATCH: 3.0.8 " Bart Schaefer @ 2001-04-05 18:09 ` Bart Schaefer 2001-04-06 7:35 ` Sven Wischnowsky 1 sibling, 1 reply; 4+ messages in thread From: Bart Schaefer @ 2001-04-05 18:09 UTC (permalink / raw) To: zsh-workers On Apr 5, 1:22pm, Sven Wischnowsky wrote: } Subject: PATCH: reverse string subscripting } } This is from the debian bug list: } } % 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'. Note the (r) is forward pattern matching, not reverse; (R) is reverse. Your patch appears to have fixed the bug only for the forward direction: zagzig% x=abcd zagzig% echo $x[(r)d] d zagzig% echo $x[1,(r)d] abcd zagzig% echo $x[(R)d] d zagzig% echo $x[1,(R)d] zagzig% echo $x[1,(R)c] abc zagzig% -- 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 ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: PATCH: reverse string subscripting 2001-04-05 18:09 ` Bart Schaefer @ 2001-04-06 7:35 ` Sven Wischnowsky 0 siblings, 0 replies; 4+ messages in thread From: Sven Wischnowsky @ 2001-04-06 7:35 UTC (permalink / raw) To: zsh-workers Bart Schaefer wrote: > ... > > Note the (r) is forward pattern matching, not reverse; (R) is reverse. > Your patch appears to have fixed the bug only for the forward direction: Ahem. Bye Sven Index: Src/params.c =================================================================== RCS file: /cvsroot/zsh/zsh/Src/params.c,v retrieving revision 1.33 diff -u -r1.33 params.c --- Src/params.c 2001/04/05 11:24:17 1.33 +++ Src/params.c 2001/04/06 07:35:07 @@ -1118,7 +1118,7 @@ if (a2) { if (down) { if (!hasbeg) - beg = len - 1; + beg = len; for (r = beg, t = d + beg; t >= d; r--, t--) { sav = *t; *t = '\0'; @@ -1143,7 +1143,7 @@ } else { if (down) { if (!hasbeg) - beg = len - 1; + beg = len; for (r = beg + 1, t = d + beg; t >= d; r--, t--) { if (pattry(pprog, t) && !--num) -- Sven Wischnowsky wischnow@informatik.hu-berlin.de ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2001-04-06 7:36 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2001-04-05 11:22 PATCH: reverse string subscripting Sven Wischnowsky 2001-04-05 16:15 ` PATCH: 3.0.8 " Bart Schaefer 2001-04-05 18:09 ` Bart Schaefer 2001-04-06 7:35 ` Sven Wischnowsky
Code repositories for project(s) associated with this public inbox https://git.vuxu.org/mirror/zsh/ This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).