diff options
Diffstat (limited to 'src/cairo-pdf-surface.c')
-rwxr-xr-x | src/cairo-pdf-surface.c | 130 |
1 files changed, 57 insertions, 73 deletions
diff --git a/src/cairo-pdf-surface.c b/src/cairo-pdf-surface.c index 525923113..1fe6c87e4 100755 --- a/src/cairo-pdf-surface.c +++ b/src/cairo-pdf-surface.c @@ -6100,10 +6100,8 @@ _cairo_pdf_surface_write_mask_group (cairo_pdf_surface_t *surface, } status = _cairo_pdf_surface_add_smask (surface, gstate_res); - if (unlikely (status)){ - free(smask_group); + if (unlikely (status)) return status; - } status = _cairo_pdf_surface_add_xobject (surface, smask_group->group_res); if (unlikely (status)) @@ -6176,16 +6174,12 @@ _cairo_pdf_surface_write_mask_group (cairo_pdf_surface_t *surface, } status = _cairo_pdf_surface_add_smask (surface, gstate_res); - if (unlikely (status)){ - free(smask_group); + if (unlikely (status)) return status; - } status = _cairo_pdf_surface_add_xobject (surface, smask_group->group_res); - if (unlikely (status)){ - free(smask_group); + if (unlikely (status)) return status; - } _cairo_output_stream_printf (surface->output, "q /s%d gs /x%d Do Q\n", @@ -7039,22 +7033,22 @@ _cairo_pdf_surface_paint (void *abstract_surface, status = _cairo_pattern_create_copy (&group->source, source); if (unlikely (status)) { _cairo_pdf_smask_group_destroy (group); - goto cleanup_all; + goto cleanup; } group->source_res = pattern_res; status = _cairo_pdf_surface_add_smask_group (surface, group); if (unlikely (status)) { _cairo_pdf_smask_group_destroy (group); - goto cleanup_all; + goto cleanup; } status = _cairo_pdf_surface_add_smask (surface, gstate_res); if (unlikely (status)) - goto cleanup_all; + goto cleanup; status = _cairo_pdf_surface_add_xobject (surface, group->group_res); if (unlikely (status)) - goto cleanup_all; + goto cleanup; _cairo_output_stream_printf (surface->output, "q /s%d gs /x%d Do Q\n", @@ -7064,7 +7058,7 @@ _cairo_pdf_surface_paint (void *abstract_surface, status = _cairo_pdf_surface_select_pattern (surface, source, pattern_res, FALSE); if (unlikely (status)) - goto cleanup_all; + goto cleanup; _cairo_output_stream_printf (surface->output, "0 0 %f %f re f\n", @@ -7072,16 +7066,14 @@ _cairo_pdf_surface_paint (void *abstract_surface, status = _cairo_pdf_surface_unselect_pattern (surface); if (unlikely (status)) - goto cleanup_all; + goto cleanup; } - status = _cairo_output_stream_get_status (surface->output); + _cairo_composite_rectangles_fini (&extents); + return _cairo_output_stream_get_status (surface->output); -cleanup_all: - free (group); cleanup: _cairo_composite_rectangles_fini (&extents); - return status; } @@ -7184,47 +7176,46 @@ _cairo_pdf_surface_mask (void *abstract_surface, status = _cairo_pattern_create_copy (&group->source, source); if (unlikely (status)) { _cairo_pdf_smask_group_destroy (group); - goto cleanup_all; + goto cleanup; } status = _cairo_pattern_create_copy (&group->mask, mask); if (unlikely (status)) { _cairo_pdf_smask_group_destroy (group); - goto cleanup_all; + goto cleanup; } group->source_res = _cairo_pdf_surface_new_object (surface); if (group->source_res.id == 0) { _cairo_pdf_smask_group_destroy (group); status = _cairo_error (CAIRO_STATUS_NO_MEMORY); - goto cleanup_all; + goto cleanup; } status = _cairo_pdf_surface_add_smask_group (surface, group); if (unlikely (status)) { _cairo_pdf_smask_group_destroy (group); - goto cleanup_all; + goto cleanup; } status = _cairo_pdf_surface_add_smask (surface, group->group_res); if (unlikely (status)) - goto cleanup_all; + goto cleanup; status = _cairo_pdf_surface_add_xobject (surface, group->source_res); if (unlikely (status)) - goto cleanup_all; + goto cleanup; status = _cairo_pdf_operators_flush (&surface->pdf_operators); if (unlikely (status)) - goto cleanup_all; + goto cleanup; _cairo_output_stream_printf (surface->output, "q /s%d gs /x%d Do Q\n", group->group_res.id, group->source_res.id); - status = _cairo_output_stream_get_status (surface->output); + _cairo_composite_rectangles_fini (&extents); + return _cairo_output_stream_get_status (surface->output); -cleanup_all: - free (group); cleanup: _cairo_composite_rectangles_fini (&extents); return status; @@ -7309,13 +7300,13 @@ _cairo_pdf_surface_stroke (void *abstract_surface, status = _cairo_pattern_create_copy (&group->source, source); if (unlikely (status)) { _cairo_pdf_smask_group_destroy (group); - goto cleanup_all; + goto cleanup; } group->source_res = pattern_res; status = _cairo_path_fixed_init_copy (&group->path, path); if (unlikely (status)) { _cairo_pdf_smask_group_destroy (group); - goto cleanup_all; + goto cleanup; } group->style = *style; @@ -7324,20 +7315,20 @@ _cairo_pdf_surface_stroke (void *abstract_surface, status = _cairo_pdf_surface_add_smask_group (surface, group); if (unlikely (status)) { _cairo_pdf_smask_group_destroy (group); - goto cleanup_all; + goto cleanup; } status = _cairo_pdf_surface_add_smask (surface, gstate_res); if (unlikely (status)) - goto cleanup_all; + goto cleanup; status = _cairo_pdf_surface_add_xobject (surface, group->group_res); if (unlikely (status)) - goto cleanup_all; + goto cleanup; status = _cairo_pdf_operators_flush (&surface->pdf_operators); if (unlikely (status)) - goto cleanup_all; + goto cleanup; _cairo_output_stream_printf (surface->output, "q /s%d gs /x%d Do Q\n", @@ -7346,7 +7337,7 @@ _cairo_pdf_surface_stroke (void *abstract_surface, } else { status = _cairo_pdf_surface_select_pattern (surface, source, pattern_res, TRUE); if (unlikely (status)) - goto cleanup_all; + goto cleanup; status = _cairo_pdf_operators_stroke (&surface->pdf_operators, path, @@ -7354,17 +7345,16 @@ _cairo_pdf_surface_stroke (void *abstract_surface, ctm, ctm_inverse); if (unlikely (status)) - goto cleanup_all; + goto cleanup; status = _cairo_pdf_surface_unselect_pattern (surface); if (unlikely (status)) - goto cleanup_all; + goto cleanup; } - status = _cairo_output_stream_get_status (surface->output); + _cairo_composite_rectangles_fini (&extents); + return _cairo_output_stream_get_status (surface->output); -cleanup_all: - free (group); cleanup: _cairo_composite_rectangles_fini (&extents); return status; @@ -7473,33 +7463,33 @@ _cairo_pdf_surface_fill (void *abstract_surface, status = _cairo_pattern_create_copy (&group->source, source); if (unlikely (status)) { _cairo_pdf_smask_group_destroy (group); - goto cleanup_all; + goto cleanup; } group->source_res = pattern_res; status = _cairo_path_fixed_init_copy (&group->path, path); if (unlikely (status)) { _cairo_pdf_smask_group_destroy (group); - goto cleanup_all; + goto cleanup; } group->fill_rule = fill_rule; status = _cairo_pdf_surface_add_smask_group (surface, group); if (unlikely (status)) { _cairo_pdf_smask_group_destroy (group); - goto cleanup_all; + goto cleanup; } status = _cairo_pdf_surface_add_smask (surface, gstate_res); if (unlikely (status)) - goto cleanup_all; + goto cleanup; status = _cairo_pdf_surface_add_xobject (surface, group->group_res); if (unlikely (status)) - goto cleanup_all; + goto cleanup; status = _cairo_pdf_operators_flush (&surface->pdf_operators); if (unlikely (status)) - goto cleanup_all; + goto cleanup; _cairo_output_stream_printf (surface->output, "q /s%d gs /x%d Do Q\n", @@ -7508,23 +7498,22 @@ _cairo_pdf_surface_fill (void *abstract_surface, } else { status = _cairo_pdf_surface_select_pattern (surface, source, pattern_res, FALSE); if (unlikely (status)) - goto cleanup_all; + goto cleanup; status = _cairo_pdf_operators_fill (&surface->pdf_operators, path, fill_rule); if (unlikely (status)) - goto cleanup_all; + goto cleanup; status = _cairo_pdf_surface_unselect_pattern (surface); if (unlikely (status)) - goto cleanup_all; + goto cleanup; } - status = _cairo_output_stream_get_status (surface->output); + _cairo_composite_rectangles_fini (&extents); + return _cairo_output_stream_get_status (surface->output); -cleanup_all: - free (group); cleanup: _cairo_composite_rectangles_fini (&extents); return status; @@ -7758,7 +7747,7 @@ _cairo_pdf_surface_show_text_glyphs (void *abstract_surface, status = _cairo_pattern_create_copy (&group->source, source); if (unlikely (status)) { _cairo_pdf_smask_group_destroy (group); - goto cleanup_group; + goto cleanup; } group->source_res = pattern_res; @@ -7767,7 +7756,7 @@ _cairo_pdf_surface_show_text_glyphs (void *abstract_surface, if (unlikely (group->utf8 == NULL)) { _cairo_pdf_smask_group_destroy (group); status = _cairo_error (CAIRO_STATUS_NO_MEMORY); - goto cleanup_group; + goto cleanup; } memcpy (group->utf8, utf8, utf8_len); } @@ -7778,7 +7767,7 @@ _cairo_pdf_surface_show_text_glyphs (void *abstract_surface, if (unlikely (group->glyphs == NULL)) { _cairo_pdf_smask_group_destroy (group); status = _cairo_error (CAIRO_STATUS_NO_MEMORY); - goto cleanup_utf8; + goto cleanup; } memcpy (group->glyphs, glyphs, sizeof (cairo_glyph_t) * num_glyphs); } @@ -7789,7 +7778,7 @@ _cairo_pdf_surface_show_text_glyphs (void *abstract_surface, if (unlikely (group->clusters == NULL)) { _cairo_pdf_smask_group_destroy (group); status = _cairo_error (CAIRO_STATUS_NO_MEMORY); - goto cleanup_glyphs; + goto cleanup; } memcpy (group->clusters, clusters, sizeof (cairo_text_cluster_t) * num_clusters); } @@ -7799,20 +7788,20 @@ _cairo_pdf_surface_show_text_glyphs (void *abstract_surface, status = _cairo_pdf_surface_add_smask_group (surface, group); if (unlikely (status)) { _cairo_pdf_smask_group_destroy (group); - goto cleanup_all; + goto cleanup; } status = _cairo_pdf_surface_add_smask (surface, gstate_res); if (unlikely (status)) - goto cleanup_all; + goto cleanup; status = _cairo_pdf_surface_add_xobject (surface, group->group_res); if (unlikely (status)) - goto cleanup_all; + goto cleanup; status = _cairo_pdf_operators_flush (&surface->pdf_operators); if (unlikely (status)) - goto cleanup_all; + goto cleanup; _cairo_output_stream_printf (surface->output, "q /s%d gs /x%d Do Q\n", @@ -7821,7 +7810,7 @@ _cairo_pdf_surface_show_text_glyphs (void *abstract_surface, } else { status = _cairo_pdf_surface_select_pattern (surface, source, pattern_res, FALSE); if (unlikely (status)) - goto cleanup_all; + goto cleanup; /* Each call to show_glyphs() with a transclucent pattern must * be in a separate text object otherwise overlapping text @@ -7830,7 +7819,7 @@ _cairo_pdf_surface_show_text_glyphs (void *abstract_surface, if (! _cairo_pattern_is_opaque (source, &extents.bounded)) { status = _cairo_pdf_operators_flush (&surface->pdf_operators); if (unlikely (status)) - goto cleanup_all; + goto cleanup; } status = _cairo_pdf_operators_show_text_glyphs (&surface->pdf_operators, @@ -7840,21 +7829,16 @@ _cairo_pdf_surface_show_text_glyphs (void *abstract_surface, cluster_flags, scaled_font); if (unlikely (status)) - goto cleanup_all; + goto cleanup; status = _cairo_pdf_surface_unselect_pattern (surface); if (unlikely (status)) - goto cleanup_all; + goto cleanup; } -cleanup_all: - free(group->clusters); -cleanup_glyphs: - free(group->glyphs); -cleanup_utf8: - free(group->utf8); -cleanup_group: - free(group); + _cairo_composite_rectangles_fini (&extents); + return _cairo_output_stream_get_status (surface->output); + cleanup: _cairo_composite_rectangles_fini (&extents); return status; |