grepを読む(その4)

牛歩のごとく、遅いソース読みですが、続きです。

1335   intmax_t n;
1336   if (out_invert)
1337     {
1338       /* One or more lines are output.  */
1339       for (n = 0; p < lim && n < outleft; n++)
1340         {
1341           char *nl = memchr (p, eol, lim - p);
1342           nl++;
1343           if (!out_quiet)
1344             prline (p, nl, SEP_CHAR_SELECTED);
1345           p = nl;
1346         }
1347     }
1348   else

invertとついているので反転ですね。しかし、out_invert、出力を反転するとは、どういうことなのでしょう。

定義を見てみます。

1006 static bool out_invert;         /* Print nonmatching stuff. */

分かりました。マッチしていない文字列を出力するフラグですね。

さらに、オプション処理しているcase文を読めば理解できます。

2658       case 'v':
2659         out_invert = true;
2660         break;

-vオプションを使った時のフラグですね。

つづく