[cairo] const-ness fixes for transform_distance and transform_point

Owen Taylor otaylor at redhat.com
Mon May 9 10:26:37 PDT 2005


On Mon, 2005-05-09 at 10:07 -0700, Keith Packard wrote:
> On Mon, 2005-05-09 at 13:06 -0400, Owen Taylor wrote:
> 
> > This does muddle the "plain structure returns are out-parameters"
> > rule that I documented in the language binding appendix.
> 
> And what about the re-entrancy issues of returning a pointer to static
> data?  

 cairo_surface_t *cairo_get_target (cairo_t *cr);

is returning a pointer to non-referenced data, so that already prevents
us from enabling simultaneous access to the same cairo_t from 
multiple threads.

Returning a pointer to *global* static data is clearly evil.

(Not to argue against myself, just to clarify the situation)

> The C library suffers greatly from this in a number of APIs.
> Passing in a pointer to thread-specific data makes this all much
> clearer.
> 
> > void
> > cairo_get_matrix (cairo_t *cr, cairo_matrix_t *matrix);
> 
> I have a strange though here -- we could mark the cairo calls which do
> not change the state of the library by annotating the cairo_t* with
> 'const'.  Would this be a good idea?  Or would it only clutter the
> headers?  I'm not certain myself, but wanted to increase list traffic
> with side discussions.

IMO, just clutter. You start getting into corner cases pretty 
quickly. (Does cairo_reference() change its argument or not?
Does cairo_set_source() change its argument or not?)

The GTK+ is that we never use const on refcounted structures.

It's more an empirical rule than a theoretical one, but it
seems to work out OK in practice.

Regards,
						Owen

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part
Url : http://lists.freedesktop.org/archives/cairo/attachments/20050509/3981b869/attachment.pgp


More information about the cairo mailing list