zsh-workers
 help / color / mirror / code / Atom feed
* 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).