diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2012-05-26 15:20:56 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2012-05-26 15:21:23 +0100 |
commit | 11e276753f0d335027a7727bf17006d612b4e4c2 (patch) | |
tree | 25520305995cecdf162284a0228cf5a0125847e0 | |
parent | fc33cc3c3af1fc616ae445a15d2b146a29090b0f (diff) |
image: Propagate errors from clone_subimage
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r-- | src/cairo-image-surface.c | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/src/cairo-image-surface.c b/src/cairo-image-surface.c index 13e1d038..33170cd3 100644 --- a/src/cairo-image-surface.c +++ b/src/cairo-image-surface.c @@ -1214,12 +1214,15 @@ _cairo_image_surface_clone_subimage (cairo_surface_t *surface, { cairo_surface_t *image; cairo_surface_pattern_t pattern; - cairo_status_t ignored; + cairo_status_t status; image = cairo_surface_create_similar_image (surface, _cairo_format_from_content (surface->content), extents->width, extents->height); + if (image->status) + return to_image_surface (image); + /* TODO: check me with non-identity device_transform. Should we * clone the scaling, too? */ cairo_surface_set_device_offset (image, @@ -1229,16 +1232,25 @@ _cairo_image_surface_clone_subimage (cairo_surface_t *surface, _cairo_pattern_init_for_surface (&pattern, surface); pattern.base.filter = CAIRO_FILTER_NEAREST; - ignored = _cairo_surface_paint (image, - CAIRO_OPERATOR_SOURCE, - &pattern.base, - NULL); + status = _cairo_surface_paint (image, + CAIRO_OPERATOR_SOURCE, + &pattern.base, + NULL); _cairo_pattern_fini (&pattern.base); - cairo_surface_set_user_data (image, &clone_key, surface, NULL); + if (unlikely (status)) + goto error; + + status = cairo_surface_set_user_data (image, &clone_key, surface, NULL); + if (unlikely (status)) + goto error; + + return to_image_surface (image); - return (cairo_image_surface_t *) image; +error: + cairo_surface_destroy (image); + return to_image_surface (_cairo_surface_create_in_error (status)); } cairo_bool_t |