diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2009-08-10 17:42:05 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2009-08-10 17:44:25 +0100 |
commit | 2a2a19457bb934f9585bfdb97730fab99c8e386c (patch) | |
tree | e563ff6e518a7b060498b9184feb6d39c121816f /src | |
parent | 2e8ce34454a4d93986f590b1d2b024d1a1eb6bde (diff) |
[surface] Check for a NULL snapshot
The backend is permitted to return a NULL surface when snapshotting to
indicate that it cannot (or choses not to) implement the method.
Diffstat (limited to 'src')
-rw-r--r-- | src/cairo-surface.c | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/src/cairo-surface.c b/src/cairo-surface.c index 8c8b8677c..84a301216 100644 --- a/src/cairo-surface.c +++ b/src/cairo-surface.c @@ -1633,19 +1633,21 @@ _cairo_surface_snapshot (cairo_surface_t *surface) if (surface->backend->snapshot != NULL) { snapshot = surface->backend->snapshot (surface); - if (unlikely (snapshot->status)) - return snapshot; - - /* Is this surface just a proxy - e.g. paginated surfaces? */ - if (snapshot->backend != surface->backend) { - cairo_surface_t *previous; - - previous = _cairo_surface_has_snapshot (surface, - snapshot->backend, - snapshot->content); - if (previous != NULL) { - cairo_surface_destroy (snapshot); - return cairo_surface_reference (previous); + if (snapshot != NULL) { + if (unlikely (snapshot->status)) + return snapshot; + + /* Is this surface just a proxy - e.g. paginated surfaces? */ + if (snapshot->backend != surface->backend) { + cairo_surface_t *previous; + + previous = _cairo_surface_has_snapshot (surface, + snapshot->backend, + snapshot->content); + if (previous != NULL) { + cairo_surface_destroy (snapshot); + return cairo_surface_reference (previous); + } } } } |