diff --git a/src/cairo-pdf-interchange.c b/src/cairo-pdf-interchange.c index 5cc10eb0b..ad4072e63 100644 --- a/src/cairo-pdf-interchange.c +++ b/src/cairo-pdf-interchange.c @@ -1515,7 +1515,7 @@ _cairo_pdf_interchange_free_outlines (cairo_pdf_surface_t *surface) _cairo_array_fini (&ic->outline); } -cairo_int_status_t +void _cairo_pdf_interchange_fini (cairo_pdf_surface_t *surface) { cairo_pdf_interchange_t *ic = &surface->interchange; @@ -1539,8 +1539,6 @@ _cairo_pdf_interchange_fini (cairo_pdf_surface_t *surface) free (ic->docinfo.creator); free (ic->docinfo.create_date); free (ic->docinfo.mod_date); - - return CAIRO_STATUS_SUCCESS; } cairo_int_status_t diff --git a/src/cairo-pdf-surface-private.h b/src/cairo-pdf-surface-private.h index 3793332ce..49776b90f 100644 --- a/src/cairo-pdf-surface-private.h +++ b/src/cairo-pdf-surface-private.h @@ -355,7 +355,7 @@ _cairo_utf8_to_pdf_string (const char *utf8, char **str_out); cairo_private cairo_int_status_t _cairo_pdf_interchange_init (cairo_pdf_surface_t *surface); -cairo_private cairo_int_status_t +cairo_private void _cairo_pdf_interchange_fini (cairo_pdf_surface_t *surface); cairo_private cairo_int_status_t diff --git a/src/cairo-pdf-surface.c b/src/cairo-pdf-surface.c index b033fdf07..f2463a8c3 100644 --- a/src/cairo-pdf-surface.c +++ b/src/cairo-pdf-surface.c @@ -2329,7 +2329,9 @@ _cairo_pdf_surface_finish (void *abstract_surface) _cairo_surface_clipper_reset (&surface->clipper); - return _cairo_pdf_interchange_fini (surface); + _cairo_pdf_interchange_fini (surface); + + return status; } static cairo_int_status_t diff --git a/test/create-for-stream.c b/test/create-for-stream.c index af1632f14..06f2db2b0 100644 --- a/test/create-for-stream.c +++ b/test/create-for-stream.c @@ -29,6 +29,10 @@ #include #include +#ifndef _WIN32 +#include +#endif + #if CAIRO_HAS_PS_SURFACE #include #endif @@ -165,11 +169,31 @@ test_surface (const cairo_test_context_t *ctx, if (status != CAIRO_STATUS_WRITE_ERROR) { cairo_test_log (ctx, - "%s: Error: expected \"write error\", but received \"%s\".\n", + "%s: Error: expected \"write error\" from bad_write(), but received \"%s\".\n", backend, cairo_status_to_string (status)); return CAIRO_TEST_FAILURE; } + /* test propagation of file errors - for now this is unix-only */ +#ifndef _WIN32 + if (access("/dev/full", W_OK) == 0) { + surface = file_constructor ("/dev/full", WIDTH_IN_POINTS, HEIGHT_IN_POINTS); + cairo_surface_finish (surface); + status = cairo_surface_status (surface); + cairo_surface_destroy (surface); + + if (status != CAIRO_STATUS_WRITE_ERROR) { + cairo_test_log (ctx, + "%s: Error: expected \"write error\" from /dev/full, but received \"%s\".\n", + backend, cairo_status_to_string (status)); + return CAIRO_TEST_FAILURE; + } + } else { + cairo_test_log (ctx, + "/dev/full does not exist; skipping write test.\n"); + } +#endif + /* construct the real surface */ wc.ctx = ctx; wc.status = CAIRO_TEST_SUCCESS;