続きです。
pr_sgr_startを実行している箇所を探します。
takk@deb9:~/tmp/grep-3.1/src$ grep -n pr_sgr_start grep.c 303:pr_sgr_start (char const *s) 316:pr_sgr_start_if (char const *s) 319: pr_sgr_start (s); 1055: pr_sgr_start_if (filename_color); 1064: pr_sgr_start_if (sep_color); 1073: pr_sgr_start_if (color); 1179: pr_sgr_start (line_color); 1188: pr_sgr_start_if (match_color); 1216: pr_sgr_start (line_color); 1321: pr_sgr_start_if (sep_color); takk@deb9:~/tmp/grep-3.1/src$
それほど多くないですね。pr_sgr_start_ifが混ざっているので、pr_sgr_startに限定しましょう。
takk@deb9:~/tmp/grep-3.1/src$ grep -n 'pr_sgr_start\>' grep.c 303:pr_sgr_start (char const *s) 319: pr_sgr_start (s); 1179: pr_sgr_start (line_color); 1216: pr_sgr_start (line_color); takk@deb9:~/tmp/grep-3.1/src$
各前5行を見てみましょう。各検索結果を見やすくするため空行も挿入します。
takk@deb9:~/tmp/grep-3.1/src$ grep -nB5 'pr_sgr_start\>' grep.c | perl -pe '$_.="\n\n\n" if /^\d+:/' 298-static const char *sgr_start = "\33[%sm\33[K"; 299-static const char *sgr_end = "\33[m\33[K"; 300- 301-/* SGR utility functions. */ 302-static void 303:pr_sgr_start (char const *s) -- 314-} 315-static void 316-pr_sgr_start_if (char const *s) 317-{ 318- if (color_option) 319: pr_sgr_start (s); -- 1174- if (! print_line_head (b, match_size, lim, sep)) 1175- return NULL; 1176- } 1177- else 1178- { 1179: pr_sgr_start (line_color); -- 1211- eol_size += (lim - eol_size > beg && lim[-(1 + eol_size)] == '\r'); 1212- tail_size = lim - eol_size - beg; 1213- 1214- if (tail_size > 0) 1215- { 1216: pr_sgr_start (line_color); takk@deb9:~/tmp/grep-3.1/src$
切り分けするため、1つ1つ埋め込み確認をしていきたいと思います。
まずは、上の結果の318行目。color_option次第で、pr_sgr_startの実施を決めています。
pr_sgr_start_ifにprintfを埋め込んで確認したいと思います。
315 static void 316 pr_sgr_start_if (char const *s) 317 { 318 printf("[COLOR]=%d",color_option); 319 if (color_option) 320 pr_sgr_start (s); 321 }
こんな感じにします。
では、makeして確認。
takk@deb9:~/tmp/grep-3.1/src$ make
takk@deb9:~/tmp/grep-3.1/src$ ./grep --color colorize grep.c
takk@deb9:~/tmp/grep-3.1/src$ ./grep --color colorize grep.c | tail
パイプ後は、埋め込んだ文字列は表示されていません。pr_sgr_start_ifからごっそり実行されていないんですね。
つづく
コメント