前回はprint_line_middleにprintfを埋め込んで確認しました。
今回はprtextにprintfを埋め込みます。
takk@deb9:~/tmp/grep-3.1/src$ cat -n grep.c | sed -ne '1299,1374p' 1299 static void 1300 prtext (char *beg, char *lim) 1301 { 1302 static bool used; /* Avoid printing SEP_STR_GROUP before any output. */ 1303 char eol = eolbyte; 1304 1305 printf("[pr 1]"); 1306 if (!out_quiet && pending > 0) 1307 prpending (beg); 1308 1309 char *p = beg; 1310 1311 if (!out_quiet) 1312 { 1313 printf("[pr 2]"); 1314 /* Deal with leading context. */ 1315 char const *bp = lastout ? lastout : bufbeg; 1316 intmax_t i; 1317 for (i = 0; i < out_before; ++i) 1318 if (p > bp) 1319 do 1320 --p; 1321 while (p[-1] != eol); 1322 1323 /* Print the group separator unless the output is adjacent to 1324 the previous output in the file. */ 1325 if ((0 <= out_before || 0 <= out_after) && used 1326 && p != lastout && group_separator) 1327 { 1328 printf("[pr 3]"); 1329 pr_sgr_start_if (sep_color); 1330 fputs_errno (group_separator); 1331 pr_sgr_end_if (sep_color); 1332 putchar_errno ('\n'); 1333 } 1334 1335 while (p < beg) 1336 { 1337 printf("[pr 4]"); 1338 char *nl = memchr (p, eol, beg - p); 1339 nl++; 1340 prline (p, nl, SEP_CHAR_REJECTED); 1341 p = nl; 1342 } 1343 } 1344 1345 intmax_t n; 1346 if (out_invert) 1347 { 1348 printf("[pr 5]"); 1349 /* One or more lines are output. */ 1350 for (n = 0; p < lim && n < outleft; n++) 1351 { 1352 char *nl = memchr (p, eol, lim - p); 1353 nl++; 1354 if (!out_quiet) 1355 prline (p, nl, SEP_CHAR_SELECTED); 1356 p = nl; 1357 } 1358 } 1359 else 1360 { 1361 printf("[pr 6]"); 1362 /* Just one line is output. */ 1363 if (!out_quiet) 1364 prline (beg, lim, SEP_CHAR_SELECTED); 1365 n = 1; 1366 p = lim; 1367 } 1368 printf("[pr 7]"); 1369 1370 after_last_match = bufoffset - (buflim - p); 1371 pending = out_quiet ? 0 : MAX (0, out_after); 1372 used = true; 1373 outleft -= n; 1374 } takk@deb9:~/tmp/grep-3.1/src$
7つのprintf([pr 1]~パス[pr 7])を埋め込みました。
takk@deb9:~/tmp/grep-3.1/src$ make CC grep.o CCLD grep takk@deb9:~/tmp/grep-3.1/src$
確認します。
[pr 1]、[pr 2]、[pr 6]、[pr 7]のパスを通るようです。
つまり、通らないパス[pr 3]、[pr 4]、[pr 5]が色をつける処理であると言えます。
つづく
コメント