Fossil SCM

Fix another bug in table handling for side-by-side diffs.

drh 2012-02-05 02:43 trunk
Commit db1365bc3bdc93d5c05afaf30dbccb63b3178af9
1 file changed +5 -4
+5 -4
--- src/diff.c
+++ src/diff.c
@@ -384,20 +384,21 @@
384384
** spaces. Add a newline if SBS_NEWLINE is set. Translate HTML characters
385385
** if SBS_HTML is set. Pad the rendering out width bytes if SBS_PAD is set.
386386
*/
387387
static void sbsWriteText(SbsLine *p, DLine *pLine, unsigned flags){
388388
int n = pLine->h & LENGTH_MASK;
389
- int i, j, k;
389
+ int i; /* Number of input characters consumed */
390
+ int j; /* Number of output characters generated */
391
+ int k; /* Cursor position */
390392
const char *zIn = pLine->z;
391393
char *z = &p->zLine[p->n];
392394
int w = p->width;
393
- if( n>w ) n = w;
394
- for(i=j=k=0; k<n; i++, k++){
395
+ for(i=j=k=0; k<w && i<n; i++, k++){
395396
char c = zIn[i];
396397
if( c=='\t' ){
397398
z[j++] = ' ';
398
- while( (k&7)!=0 && k<n ){ z[j++] = ' '; k++; }
399
+ while( (k&7)!=0 && k<w ){ z[j++] = ' '; k++; }
399400
}else if( c=='\r' || c=='\f' ){
400401
z[j++] = ' ';
401402
}else if( c=='<' && p->escHtml ){
402403
memcpy(&z[j], "&lt;", 4);
403404
j += 4;
404405
--- src/diff.c
+++ src/diff.c
@@ -384,20 +384,21 @@
384 ** spaces. Add a newline if SBS_NEWLINE is set. Translate HTML characters
385 ** if SBS_HTML is set. Pad the rendering out width bytes if SBS_PAD is set.
386 */
387 static void sbsWriteText(SbsLine *p, DLine *pLine, unsigned flags){
388 int n = pLine->h & LENGTH_MASK;
389 int i, j, k;
 
 
390 const char *zIn = pLine->z;
391 char *z = &p->zLine[p->n];
392 int w = p->width;
393 if( n>w ) n = w;
394 for(i=j=k=0; k<n; i++, k++){
395 char c = zIn[i];
396 if( c=='\t' ){
397 z[j++] = ' ';
398 while( (k&7)!=0 && k<n ){ z[j++] = ' '; k++; }
399 }else if( c=='\r' || c=='\f' ){
400 z[j++] = ' ';
401 }else if( c=='<' && p->escHtml ){
402 memcpy(&z[j], "&lt;", 4);
403 j += 4;
404
--- src/diff.c
+++ src/diff.c
@@ -384,20 +384,21 @@
384 ** spaces. Add a newline if SBS_NEWLINE is set. Translate HTML characters
385 ** if SBS_HTML is set. Pad the rendering out width bytes if SBS_PAD is set.
386 */
387 static void sbsWriteText(SbsLine *p, DLine *pLine, unsigned flags){
388 int n = pLine->h & LENGTH_MASK;
389 int i; /* Number of input characters consumed */
390 int j; /* Number of output characters generated */
391 int k; /* Cursor position */
392 const char *zIn = pLine->z;
393 char *z = &p->zLine[p->n];
394 int w = p->width;
395 for(i=j=k=0; k<w && i<n; i++, k++){
 
396 char c = zIn[i];
397 if( c=='\t' ){
398 z[j++] = ' ';
399 while( (k&7)!=0 && k<w ){ z[j++] = ' '; k++; }
400 }else if( c=='\r' || c=='\f' ){
401 z[j++] = ' ';
402 }else if( c=='<' && p->escHtml ){
403 memcpy(&z[j], "&lt;", 4);
404 j += 4;
405

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button