Hello Paul! The differences start earlier:
Breakpoint 1 at 0xf1ac: file diff.c, line 1633. Breakpoint 2 at 0x8e10: file context.c, line 349. Breakpoint 3 at 0x69f4: file analyze.c, line 624. Breakpoint 4 at 0x6a04: file analyze.c, line 628. Breakpoint 5 at 0x82f4: file context.c, line 123. Breakpoint 6 at 0x8fa8: file context.c, line 379. Breakpoint 7 at 0x222e4: file util.c, line 989. Breakpoint 8 at 0x2244c: file util.c, line 1028. Breakpoint 1, compare_files (parent=0x61000, detype=0x5e2b4, name0=0xbfffd8a1 "Portfile-graphite2-312", name1=0xbfffd8b8 "Portfile-graphite2") at diff.c:1633 (gdb) n, step compare_prepped_files (parent=0x61000, cmp=0xbfffd218, open_flags=1073741824) at diff.c:1167 (gdb) cont Breakpoint 4, diff_2_files (cmp=0xbfffd218) at analyze.c:628 (gdb) p *script $1 = { link = 0x0, inserted = 17, deleted = 8, line0 = -1, line1 = -10, ignore = true } This was on PPC Mac OS X 10.4.11. On macOS High Sierra, Version 10.13.6, I get in the end: (gdb) p *script $1 = { link = 0x0, inserted = 1, deleted = 1, line0 = 3, line1 = 3, ignore = true } On Tiger the computed different numbers lead to first0 = -4 and first1 = -13 and use of negative indexes in pr_unidiff_hunk(), context.c:376: 363 putc ('\n', out); # prints line numbers header/label before the actual script 364 365 struct change *next = hunk; 366 lin i = first0; 367 lin j = first1; 368 369 while (i <= last0 || j <= last1) 370 { 371 372 /* If the line isn't a difference, output the context from file 0. */ 373 374 if (!next || i < next->line0) 375 { 376 char const *const *line = &curr.file[0].linbuf[i++]; 377 if (! (suppress_blank_empty && **line == '\n')) 378 putc (initial_tab ? '\t' : ' ', out); 379 print_1_line (nullptr, line); 380 j++; 381 } 382 else Why are the values negative? Does this lead to defective struct curr or line? When does it start? -- Greetings Pete With Capitalism man exploits man. With communism it's the exact opposite.