From 2e66cbaee2efc4a8eb2117f945d68e2816349cfe Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Mon, 5 Jul 2010 23:10:12 +0200 Subject: [PATCH] ps: Allow specifying if errors on extract_surface should be set Getters should not set errors on passed in input. So we don't. Caught by api-special-cases test --- src/cairo-ps-surface.c | 39 ++++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/src/cairo-ps-surface.c b/src/cairo-ps-surface.c index 3e854d811..092a2dfae 100644 --- a/src/cairo-ps-surface.c +++ b/src/cairo-ps-surface.c @@ -1097,6 +1097,7 @@ _cairo_surface_is_ps (cairo_surface_t *surface) */ static cairo_bool_t _extract_ps_surface (cairo_surface_t *surface, + cairo_bool_t set_error_on_failure, cairo_ps_surface_t **ps_surface) { cairo_surface_t *target; @@ -1105,31 +1106,36 @@ _extract_ps_surface (cairo_surface_t *surface, if (surface->status) return FALSE; if (surface->finished) { - status_ignored = _cairo_surface_set_error (surface, - _cairo_error (CAIRO_STATUS_SURFACE_FINISHED)); + if (set_error_on_failure) + status_ignored = _cairo_surface_set_error (surface, + _cairo_error (CAIRO_STATUS_SURFACE_FINISHED)); return FALSE; } if (! _cairo_surface_is_paginated (surface)) { - status_ignored = _cairo_surface_set_error (surface, - _cairo_error (CAIRO_STATUS_SURFACE_TYPE_MISMATCH)); + if (set_error_on_failure) + status_ignored = _cairo_surface_set_error (surface, + _cairo_error (CAIRO_STATUS_SURFACE_TYPE_MISMATCH)); return FALSE; } target = _cairo_paginated_surface_get_target (surface); if (target->status) { - status_ignored = _cairo_surface_set_error (surface, target->status); + if (set_error_on_failure) + status_ignored = _cairo_surface_set_error (surface, target->status); return FALSE; } if (target->finished) { - status_ignored = _cairo_surface_set_error (surface, - _cairo_error (CAIRO_STATUS_SURFACE_FINISHED)); + if (set_error_on_failure) + status_ignored = _cairo_surface_set_error (surface, + _cairo_error (CAIRO_STATUS_SURFACE_FINISHED)); return FALSE; } if (! _cairo_surface_is_ps (target)) { - status_ignored = _cairo_surface_set_error (surface, - _cairo_error (CAIRO_STATUS_SURFACE_TYPE_MISMATCH)); + if (set_error_on_failure) + status_ignored = _cairo_surface_set_error (surface, + _cairo_error (CAIRO_STATUS_SURFACE_TYPE_MISMATCH)); return FALSE; } @@ -1159,7 +1165,7 @@ cairo_ps_surface_restrict_to_level (cairo_surface_t *surface, { cairo_ps_surface_t *ps_surface = NULL; - if (! _extract_ps_surface (surface, &ps_surface)) + if (! _extract_ps_surface (surface, TRUE, &ps_surface)) return; if (level < CAIRO_PS_LEVEL_LAST) @@ -1230,7 +1236,7 @@ cairo_ps_surface_set_eps (cairo_surface_t *surface, { cairo_ps_surface_t *ps_surface = NULL; - if (! _extract_ps_surface (surface, &ps_surface)) + if (! _extract_ps_surface (surface, TRUE, &ps_surface)) return; ps_surface->eps = eps; @@ -1251,8 +1257,7 @@ cairo_ps_surface_get_eps (cairo_surface_t *surface) { cairo_ps_surface_t *ps_surface = NULL; - /* XXX this should not call _cairo_surface_set_error on error */ - if (! _extract_ps_surface (surface, &ps_surface)) + if (! _extract_ps_surface (surface, FALSE, &ps_surface)) return FALSE; return ps_surface->eps; @@ -1282,7 +1287,7 @@ cairo_ps_surface_set_size (cairo_surface_t *surface, { cairo_ps_surface_t *ps_surface = NULL; - if (! _extract_ps_surface (surface, &ps_surface)) + if (! _extract_ps_surface (surface, TRUE, &ps_surface)) return; ps_surface->width = width_in_points; @@ -1388,7 +1393,7 @@ cairo_ps_surface_dsc_comment (cairo_surface_t *surface, cairo_status_t status; char *comment_copy; - if (! _extract_ps_surface (surface, &ps_surface)) + if (! _extract_ps_surface (surface, TRUE, &ps_surface)) return; /* A couple of sanity checks on the comment value. */ @@ -1438,7 +1443,7 @@ cairo_ps_surface_dsc_begin_setup (cairo_surface_t *surface) { cairo_ps_surface_t *ps_surface = NULL; - if (! _extract_ps_surface (surface, &ps_surface)) + if (! _extract_ps_surface (surface, TRUE, &ps_surface)) return; if (ps_surface->dsc_comment_target == &ps_surface->dsc_header_comments) @@ -1467,7 +1472,7 @@ cairo_ps_surface_dsc_begin_page_setup (cairo_surface_t *surface) { cairo_ps_surface_t *ps_surface = NULL; - if (! _extract_ps_surface (surface, &ps_surface)) + if (! _extract_ps_surface (surface, TRUE, &ps_surface)) return; if (ps_surface->dsc_comment_target == &ps_surface->dsc_header_comments ||