[Pixman] [PATCH 2/3] test: Fix tests for compilation on Windows

Andrea Canciani ranma42 at gmail.com
Wed Feb 23 09:32:25 PST 2011

On Wed, Feb 23, 2011 at 6:26 PM, Brent Fulgham <bfulgham at gmail.com> wrote:
> Thanks for making these fixes -- they look great!
> I have one small suggestion regarding your update to "composite.c";
> while MSVC does not provide an "snprintf" symbol, it does provide
> "_snprintf".

The documentation states that it is deprecated and that it does not behave
as snprintf:
"The _snprintf function formats and stores count or fewer characters
in buffer, and appends a terminating null character if the formatted
string length is strictly less than count characters."
(from http://msdn.microsoft.com/en-us/library/2ts7cx93%28v=vs.80%29.aspx )

snprintf, instead, guarantees the output sting to always be nul-terminated.

The code can be safely and easily rewritten to avoid snprintf altogether,
so I modified it this way.

If the previous snprintf-based logic is to be preserved, on WIN32 we should
define the snprintf function to _snprintf and then nul-terminate the string.

> To be consistent with other ports, I would propose the following change:
> bfulgham at bfulgham3 ~/requirements_sources/cairo/git/pixman/test
> $ git diff composite.c
> diff --git a/test/composite.c b/test/composite.c
> index e14f954..b4bde09 100644
> --- a/test/composite.c
> +++ b/test/composite.c
> @@ -36,6 +36,10 @@ typedef struct format_t format_t;
>  typedef struct image_t image_t;
>  typedef struct operator_t operator_t;
> +#ifdef _WIN32
> +#define snprintf _snprintf
> +#endif
> +
>  struct color_t
>  {
>     double r, g, b, a;
> This builds and runs properly for me.

Yes, we're not hitting problems. If we don't actually care about
the buffer overrun, we can just use sprintf.


More information about the Pixman mailing list