mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-01-25 01:00:27 +01:00
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:
parent
f5dfc3ce6e
commit
2e66cbaee2
1 changed files with 22 additions and 17 deletions
|
|
@ -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 ||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue