vc bug fix
Andrew F. Seirup
afs at bunkerb.UUCP
Sat Jan 19 06:57:02 AEST 1985
This is the first of three context diff postings. Each is on a different
file and for a different purpose, so it made sense to keep them separate.
The following context diff fixes a bug that effected the ^J command (copy
row). If a region expression was copied, the bounds of the region would get
garbage values, which might or might not cause a core dump on evaluation.
By the way, when you've got vc reasonably bug free, you might want to
remove '-g' from the CFLAGS variable in the makefile, so you're not carrying
around the debugging symbol table (big) in the final executable.
Andrew Seirup - Bunker Ramo, Trumbull CT - (203)386-2086
uucp address: {decvax|ittvax}!bunker!afs
*** interp.c Fri Jan 18 09:06:04 1985
--- interp.new Thu Jan 17 15:04:44 1985
***************
*** 362,368
if (e==0) ret = 0;
else {
ret = (struct enode *) malloc (sizeof (struct enode));
! *ret = *e;
switch (ret->op) {
case 'v':
ret->e.v = lookat (ret->e.v->row+Rdelta, ret->e.v->col+Cdelta);
--- 362,368 -----
if (e==0) ret = 0;
else {
ret = (struct enode *) malloc (sizeof (struct enode));
! ret->op = e->op;
switch (ret->op) {
case 'v':
ret->e.v = lookat (e->e.v->row+Rdelta, e->e.v->col+Cdelta);
***************
*** 365,371
*ret = *e;
switch (ret->op) {
case 'v':
! ret->e.v = lookat (ret->e.v->row+Rdelta, ret->e.v->col+Cdelta);
break;
case 'k':
break;
--- 365,371 -----
ret->op = e->op;
switch (ret->op) {
case 'v':
! ret->e.v = lookat (e->e.v->row+Rdelta, e->e.v->col+Cdelta);
break;
case 'k':
break;
***************
*** 370,376
case 'k':
break;
case 'f':
! ret->e.o.right = copye (ret->e.o.right,0,0);
break;
default:
ret->e.o.right = copye (ret->e.o.right,Rdelta,Cdelta);
--- 370,376 -----
case 'k':
break;
case 'f':
! ret->e.o.right = copye (e->e.o.right,0,0);
break;
case O_REDUCE('+'):
(struct ent *) ret->e.o.left =
***************
*** 372,377
case 'f':
ret->e.o.right = copye (ret->e.o.right,0,0);
break;
default:
ret->e.o.right = copye (ret->e.o.right,Rdelta,Cdelta);
ret->e.o.left = copye (ret->e.o.left,Rdelta,Cdelta);
--- 372,391 -----
case 'f':
ret->e.o.right = copye (e->e.o.right,0,0);
break;
+ case O_REDUCE('+'):
+ (struct ent *) ret->e.o.left =
+ (struct ent *) malloc (sizeof (struct ent));
+ (struct ent *) ret->e.o.right =
+ (struct ent *) malloc (sizeof (struct ent));
+ ((struct ent *) ret->e.o.left) -> row =
+ ((struct ent *) e->e.o.left) -> row + Rdelta;
+ ((struct ent *) ret->e.o.left) -> col =
+ ((struct ent *) e->e.o.left) -> col + Cdelta;
+ ((struct ent *) ret->e.o.right) -> row =
+ ((struct ent *) e->e.o.right) -> row + Rdelta;
+ ((struct ent *) ret->e.o.right) -> col =
+ ((struct ent *) e->e.o.right) -> col + Cdelta;
+ break;
default:
ret->e.o.right = copye (e->e.o.right,Rdelta,Cdelta);
ret->e.o.left = copye (e->e.o.left,Rdelta,Cdelta);
***************
*** 373,380
ret->e.o.right = copye (ret->e.o.right,0,0);
break;
default:
! ret->e.o.right = copye (ret->e.o.right,Rdelta,Cdelta);
! ret->e.o.left = copye (ret->e.o.left,Rdelta,Cdelta);
break;
}
}
--- 387,394 -----
((struct ent *) e->e.o.right) -> col + Cdelta;
break;
default:
! ret->e.o.right = copye (e->e.o.right,Rdelta,Cdelta);
! ret->e.o.left = copye (e->e.o.left,Rdelta,Cdelta);
break;
}
}
More information about the Comp.sources.unix
mailing list