use of %n in genmodes.c causes trouble on Vista

Simon Brenner olsner@gmail.com
Wed Jun 6 11:04:00 GMT 2007


In this case, you don't have to look far to see that you can't use the
return value of printf.

According to my manpage, printf returns 0 on success, 1 on failure. No
mention of the number of characters written. This is different with
sprintf/snprintf (see e.g
http://www.opengroup.org/onlinepubs/000095399/functions/snprintf.html),
but IIRC a number of platforms don't implement those according to the
standard anyway.

I suppose that the most portable way to achieve what you want here is
to write to a temporary string, then compare the lengths of the
temporary strings... Or just add a call to _set_printf_count_output in
the relevant place, since AFAIK %n is still a standard-mandated printf
format flag.

[Shameless *nix zealot plug] Or use a Real Operating System ;-)

// Simon

On 6/6/07, Olivier Hainque <hainque@adacore.com> wrote:
> Hello,
>
> genmodes.c uses the %n capabilities of printf to compute the width of
> pieces it outputs. This causes troubles on Windows Vista, because ...
>
>    << Because of security reasons, support for the %n format specifier is
>       disabled by default in printf and all its variants. ... the default
>       behavior is to invoke the invalid parameter handler ...
>    >>
>    [http://msdn2.microsoft.com/en-us/library/ms175782%28VS.80%29.aspx]
>
> It seems to me that we could replace the uses of %n by uses of printf
> return values. I'm not clear whether this would be considered portable
> enough, however.
>
> Opinions ?
>
> Thanks in advance,
>
> Olivier
>
>
>
>
>
>



More information about the Gcc mailing list