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
This commit is contained in:
Benjamin Otte 2010-07-05 23:10:12 +02:00
parent f5dfc3ce6e
commit 2e66cbaee2

View file

@ -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 ||