Fossil SCM
Fix another bug in table handling for side-by-side diffs.
Commit
db1365bc3bdc93d5c05afaf30dbccb63b3178af9
Parent
07a0ade926f3bd8…
1 file changed
+5
-4
+5
-4
| --- src/diff.c | ||
| +++ src/diff.c | ||
| @@ -384,20 +384,21 @@ | ||
| 384 | 384 | ** spaces. Add a newline if SBS_NEWLINE is set. Translate HTML characters |
| 385 | 385 | ** if SBS_HTML is set. Pad the rendering out width bytes if SBS_PAD is set. |
| 386 | 386 | */ |
| 387 | 387 | static void sbsWriteText(SbsLine *p, DLine *pLine, unsigned flags){ |
| 388 | 388 | 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 */ | |
| 390 | 392 | const char *zIn = pLine->z; |
| 391 | 393 | char *z = &p->zLine[p->n]; |
| 392 | 394 | 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++){ | |
| 395 | 396 | char c = zIn[i]; |
| 396 | 397 | if( c=='\t' ){ |
| 397 | 398 | z[j++] = ' '; |
| 398 | - while( (k&7)!=0 && k<n ){ z[j++] = ' '; k++; } | |
| 399 | + while( (k&7)!=0 && k<w ){ z[j++] = ' '; k++; } | |
| 399 | 400 | }else if( c=='\r' || c=='\f' ){ |
| 400 | 401 | z[j++] = ' '; |
| 401 | 402 | }else if( c=='<' && p->escHtml ){ |
| 402 | 403 | memcpy(&z[j], "<", 4); |
| 403 | 404 | j += 4; |
| 404 | 405 |
| --- 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], "<", 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], "<", 4); |
| 404 | j += 4; |
| 405 |