[cairo] float-to-string conversion vs locale

Alexander Larsson alexl at redhat.com
Sat Apr 29 02:03:23 PDT 2006

I just took a look at the float-to-string conversions in the postscript

_cairo_output_stream_printf (output_stream,
			 "%f %f moveto ",
			 _cairo_fixed_to_double (point->x),
			 _cairo_fixed_to_double (point->y));

This is not locale-safe. In a locale with a decimal separator other than
"." it will not produce valid postscript. Changing the locale to "C"
while doing this is instead not threadsafe.

For an approach to do this in a thread-safe way (the only good way I
know of) see g_ascii_formatd() in glib (glib/gstrfuncs.c).

 Alexander Larsson                                            Red Hat, Inc 
                   alexl at redhat.com    alla at lysator.liu.se 
He's a short-sighted one-eyed waffle chef with acid for blood. She's a 
manipulative out-of-work museum curator from beyond the grave. They fight 

More information about the cairo mailing list