Re: [PATCH 2/2] grep.c: teach 'git grep --only-matching'

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Taylor Blau <me@xxxxxxxxxxxx> writes:

> -		if (sign == ':')
> -			match_color = opt->color_match_selected;
> -		else
> -			match_color = opt->color_match_context;
> -		if (sign == ':')
> -			line_color = opt->color_selected;
> -		else if (sign == '-')
> -			line_color = opt->color_context;
> -		else if (sign == '=')
> -			line_color = opt->color_function;
> +		if (opt->color) {
> +			if (sign == ':')
> +				match_color = opt->color_match_selected;
> +			else
> +				match_color = opt->color_match_context;
> +			if (sign == ':')
> +				line_color = opt->color_selected;
> +			else if (sign == '-')
> +				line_color = opt->color_context;
> +			else if (sign == '=')
> +				line_color = opt->color_function;
> +		}

The above change (specifically, the fact that this now is enclosed
in "if (opt->color) { ... }") unfortunately leaves match_color
undefined at this point in the control flow.  The next loop then
calls output_color() with an undefined match_color and tricks stupid
compiler to issue a warning and makes -Werror build to fail.

>  		*eol = '\0';
>  		while (next_match(opt, bol, eol, ctx, &match, eflags)) {
>  			if (match.rm_so == match.rm_eo)
>  				break;
>
> -			output_color(opt, bol, match.rm_so, line_color);
> +			if (opt->only_matching)
> +				show_line_header(opt, name, lno, cno, sign);
> +			else
> +				output_color(opt, bol, match.rm_so, line_color);
>  			output_color(opt, bol + match.rm_so,
>  				     match.rm_eo - match.rm_so, match_color);

output_color() does check want_color(opt->color) before using its
last parameter, and want_color() gives false for opt->color that is
0 (i.e. leaves match_color to be undefined), so in this case, the
compiler is worried too much, but still, we should work it around if
it is easy to do so.

Just initializing match_color where it is defined at the beginning of
show_line() should be sufficient, I think.




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux