[cairo] [API] cairo_set_error() and friends

Behdad Esfahbod behdad at behdad.org
Fri Oct 17 10:55:38 PDT 2008


Hi Chris,

I don't have a strong opinion either way.  Call it cairo_set_status() please.
 And a surface one will be useful too, and a pattern one I guess, and font
options one too...  Anyway, I'll let Carl turn it down ;).

behdad

Chris Wilson wrote:
> Often I've need to raise an error on an object in application code. To
> date, I've used variations on cairo_path_append(cr, {.status = ERROR})
> and then used that context as a source of the desired error object.
> 
> I'm currently in the process of running 1.8 through memfault and I'm
> trying to find clean ways of propagating the error status. (So that this
> time I'll need fewer alterations to the test code and it'll be
> acceptable to commit to master.) An example of the problem is
> test/clip-nesting.c:
> 
>   cr2 = cairo_create (target);
>   ... do stuff under a clip...
>   cr3 = cairo_create (target);
>   ... do stuff under a different clip...
>   cairo_destroy (cr3);
>   cairo_destroy (cr2);
>   ... do stuff to the test context...
> 
> Last time, I added a status check and an explicit CAIRO_TEST_NO_MEMORY.
> However, this feels like an anathema to the inert error object system.
> In the past, we have proposed to infect the target object with the error
> from the context. That failed to gain wide acceptance due to the
> differing lifetimes of different objects and that the semantics never
> quite worked.
> 
> So I'm currently considering a simple:
>   cairo_set_error (cr, cairo_get_status (cr3));
>   cairo_destroy (cr3);
>   cairo_set_error (cr, cairo_get_status (cr2));
>   cairo_destroy (cr2);
> 
> (Wouldn't it be easier if I could just do
>   cairo_set_error(cr, cairo_destroy (cr2)?)
> 
> Thoughts, suggestions, opinions?


More information about the cairo mailing list