From 723b28e19e730918e91f7d3246de13a6b609bd9c Mon Sep 17 00:00:00 2001 From: "Mirar (Pontus Hagland)" <pike@sort.mirar.org> Date: Thu, 19 Feb 1998 00:34:11 +0100 Subject: [PATCH] bugfix in diff3 Rev: lib/modules/Array.pmod:1.13 --- lib/modules/Array.pmod | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/lib/modules/Array.pmod b/lib/modules/Array.pmod index b96bd314f6..0b6d2c81a9 100644 --- a/lib/modules/Array.pmod +++ b/lib/modules/Array.pmod @@ -197,22 +197,24 @@ array(array(array(mixed))) diff3(array mid,array left,array right) [lmid,ldst]=diff(mid,left); [rmid,rdst]=diff(mid,right); + werror(sprintf("%O\n",({rmid,rdst}))); + array res=({}); int lpos=0,rpos=0; int l=0,r=0,n; array eq=({}); int x; - for (n=0; n<sizeof(mid);) + for (n=0; ;) { - while (lpos>=sizeof(lmid[l])) + while (l<sizeof(lmid) && lpos>=sizeof(lmid[l])) { if (sizeof(ldst[l])>lpos) res+=({({({}),ldst[l][lpos..],({})})}); l++; lpos=0; } - while (rpos>=sizeof(rmid[r])) + while (r<sizeof(rmid) && rpos>=sizeof(rmid[r])) { if (sizeof(rdst[r])>rpos) res+=({({({}),({}),rdst[r][rpos..]})}); @@ -220,6 +222,8 @@ array(array(array(mixed))) diff3(array mid,array left,array right) rpos=0; } + if (n==sizeof(mid)) break; + x=min(sizeof(lmid[l])-lpos,sizeof(rmid[r])-rpos); if (lmid[l]==ldst[l] && rmid[r]==rdst[r]) @@ -244,8 +248,8 @@ array(array(array(mixed))) diff3(array mid,array left,array right) rdst[r][rpos..rpos+x-1]})}); } -// werror(sprintf("-> %-5{%O%} %-5{%O%} %-5{%O%}" -// " x=%d l=%d:%d r=%d:%d \n",@res[-1],x,l,lpos,r,rpos)); +// werror(sprintf("-> %-5{%O%} %-5{%O%} %-5{%O%}" +// " x=%d l=%d:%d r=%d:%d \n",@res[-1],x,l,lpos,r,rpos)); rpos+=x; lpos+=x; -- GitLab