diff -Wの関数名長制限をなくす
diffには差分文脈の関数を表示する機能があり、-W (--show-function-line)で関数とするパターンをカスタマイズできる。ただ関数名の長さに40字の制限があって長いと途中で途切れてしまう。
unix diff --show-function-line truncates outputやfunction is truncated to 40 charactersによると文字数はハードコードされているらしい。入れているMSYSですんなりコンパイルできるか不明なのでバイナリをいじってみた。
ソースに当たるまでもなく、上記情報によると、print_context_functionでputc(' ', out);
した後のfor (j = i; j < i + 40 && function[j] != '\n'; j++)
が問題の箇所。関数冒頭でputc(' '...
しているところを探す。
PUSH EBP PUSH EDI MOV EBP,EDX PUSH ESI PUSH EBX MOV EDI,EAX XOR ESI,ESI SUB ESP,1C MOV DWORD PTR SS:[LOCAL.9],EAX MOV DWORD PTR SS:[LOCAL.10],20 CALL <JMP.&msys-2_0.putc_unlocked> ; Jump to msys-2_0._putc_unlocked MOV EDX,EBP MOVZX ECX,BYTE PTR DS:[EDX] MOV EAX,EDX LEA EBX,[ECX-9] CMP BL,4 JBE SHORT _00402B00 CMP CL,20 JE SHORT _00402B00 LEA EDX,[ESI+27] ; 8D56 27 MOV ECX,ESI ; 89F1 ADD ECX,1 ; 83C1 01 CMP ECX,EDX ; 39D1 JG SHORT _00402AB4 ; 7F 07 CMP BYTE PTR SS:[ECX+EBP],0A ; 807C0D 00 0A JNE SHORT _00402AA6 ; 75 F2 CMP ESI,ECX
あった。条件分岐JG SHORT _00402AB4
をNOP
にする(1EABの7F 07を90 90とする)と、長さ制限が消えた。