Now, what does "matcher &&" mean there? If 'matcher' is null, we are
using grep and no matcher has been specified; as it happens (though
there's no comment to this effect) 'matcher' cannot be null in fgrep
even when a matcher has not been specified. So "matcher &&" means "(we
are not using the grep matcher) &&". This code is correct, but it's
confusing, and this caused Norihiro to propose even-more-confusing
patches like this in
<http://lists.gnu.org/archive/html/bug-grep/2014-03/msg00058.html>:
if (match_icase && MB_CUR_MAX > 1 && keycc
&& ((!matcher && STREQ (matchers[0].name, "fgrep"))
|| (matcher && STREQ (matcher, "fgrep"))))
Here the second line is unnecessary -- or perhaps I'm not understanding
things correctly, but then the code is *really* confusing.
Grep maintainers shouldn't have to worry about stuff like this. Instead,
we should separate the concerns of egrep and fgrep, so that they do not
affect the mainstream grep code.