From eaec1caa94ac871eb881ac354c4442ddd2a308ea Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Thu, 16 Oct 2008 16:20:28 +0100 Subject: [PATCH] [test/ft-text-*] Check for errors from fontconfig. If a match cannot be found, or if any other error occured, then fontconfig will return NULL. Check and propagate. --- test/ft-text-antialias-none.c | 31 +++++++++++++++++++++++----- test/ft-text-vertical-layout-type1.c | 31 +++++++++++++++++++++++----- test/ft-text-vertical-layout-type3.c | 31 +++++++++++++++++++++++----- 3 files changed, 78 insertions(+), 15 deletions(-) diff --git a/test/ft-text-antialias-none.c b/test/ft-text-antialias-none.c index 5d0326919..e139b2f6b 100644 --- a/test/ft-text-antialias-none.c +++ b/test/ft-text-antialias-none.c @@ -42,8 +42,9 @@ static const cairo_test_t test = { draw }; -static cairo_scaled_font_t * -create_scaled_font (cairo_t * cr) +static cairo_status_t +create_scaled_font (cairo_t * cr, + cairo_scaled_font_t **out) { FcPattern *pattern, *resolved; FcResult result; @@ -51,6 +52,7 @@ create_scaled_font (cairo_t * cr) cairo_scaled_font_t *scaled_font; cairo_font_options_t *font_options; cairo_matrix_t font_matrix, ctm; + cairo_status_t status; double pixel_size; font_options = cairo_font_options_create (); @@ -58,6 +60,8 @@ create_scaled_font (cairo_t * cr) cairo_get_font_options (cr, font_options); pattern = FcPatternCreate (); + if (pattern == NULL) + return CAIRO_STATUS_NO_MEMORY; FcPatternAddString (pattern, FC_FAMILY, (FcChar8 *)"Bitstream vera sans"); FcPatternAddDouble (pattern, FC_SIZE, TEXT_SIZE); @@ -67,6 +71,10 @@ create_scaled_font (cairo_t * cr) FcDefaultSubstitute (pattern); resolved = FcFontMatch (NULL, pattern, &result); + if (resolved == NULL) { + FcPatternDestroy (pattern); + return CAIRO_STATUS_NO_MEMORY; + } /* turn antialiasing off */ FcPatternDel (resolved, FC_ANTIALIAS); @@ -91,14 +99,22 @@ create_scaled_font (cairo_t * cr) FcPatternDestroy (pattern); FcPatternDestroy (resolved); - return scaled_font; + status = cairo_scaled_font_status (scaled_font); + if (status) { + cairo_scaled_font_destroy (scaled_font); + return status; + } + + *out = scaled_font; + return CAIRO_STATUS_SUCCESS; } static cairo_test_status_t draw (cairo_t *cr, int width, int height) { cairo_text_extents_t extents; - cairo_scaled_font_t * scaled_font; + cairo_scaled_font_t *scaled_font; + cairo_status_t status; const char black[] = "black", blue[] = "blue"; /* We draw in the default black, so paint white first. */ @@ -107,7 +123,12 @@ draw (cairo_t *cr, int width, int height) cairo_paint (cr); cairo_restore (cr); - scaled_font = create_scaled_font (cr); + status = create_scaled_font (cr, &scaled_font); + if (status) { + return cairo_test_status_from_status (cairo_test_get_context (cr), + status); + } + cairo_set_scaled_font (cr, scaled_font); cairo_set_source_rgb (cr, 0, 0, 0); /* black */ diff --git a/test/ft-text-vertical-layout-type1.c b/test/ft-text-vertical-layout-type1.c index 3cfb15302..1dbe31d83 100644 --- a/test/ft-text-vertical-layout-type1.c +++ b/test/ft-text-vertical-layout-type1.c @@ -43,8 +43,9 @@ static const cairo_test_t test = { draw }; -static cairo_scaled_font_t * -create_scaled_font (cairo_t * cr) +static cairo_status_t +create_scaled_font (cairo_t * cr, + cairo_scaled_font_t **out) { FcPattern *pattern, *resolved; FcResult result; @@ -52,6 +53,7 @@ create_scaled_font (cairo_t * cr) cairo_scaled_font_t *scaled_font; cairo_font_options_t *font_options; cairo_matrix_t font_matrix, ctm; + cairo_status_t status; double pixel_size; font_options = cairo_font_options_create (); @@ -59,6 +61,8 @@ create_scaled_font (cairo_t * cr) cairo_get_font_options (cr, font_options); pattern = FcPatternCreate (); + if (pattern == NULL) + return CAIRO_STATUS_NO_MEMORY; FcPatternAddString (pattern, FC_FAMILY, (FcChar8 *)"Nimbus Sans L"); FcPatternAddDouble (pattern, FC_PIXEL_SIZE, TEXT_SIZE); @@ -68,6 +72,10 @@ create_scaled_font (cairo_t * cr) FcDefaultSubstitute (pattern); resolved = FcFontMatch (NULL, pattern, &result); + if (resolved == NULL) { + FcPatternDestroy (pattern); + return CAIRO_STATUS_NO_MEMORY; + } /* set layout to vertical */ FcPatternDel (resolved, FC_VERTICAL_LAYOUT); @@ -93,14 +101,22 @@ create_scaled_font (cairo_t * cr) FcPatternDestroy (pattern); FcPatternDestroy (resolved); - return scaled_font; + status = cairo_scaled_font_status (scaled_font); + if (status) { + cairo_scaled_font_destroy (scaled_font); + return status; + } + + *out = scaled_font; + return CAIRO_STATUS_SUCCESS; } static cairo_test_status_t draw (cairo_t *cr, int width, int height) { cairo_text_extents_t extents; - cairo_scaled_font_t * scaled_font; + cairo_scaled_font_t *scaled_font; + cairo_status_t status; const char text[] = "i-W"; double line_width, x, y; @@ -112,7 +128,12 @@ draw (cairo_t *cr, int width, int height) cairo_paint (cr); cairo_restore (cr); - scaled_font = create_scaled_font (cr); + status = create_scaled_font (cr, &scaled_font); + if (status) { + return cairo_test_status_from_status (cairo_test_get_context (cr), + status); + } + cairo_set_scaled_font (cr, scaled_font); cairo_set_line_width (cr, 1.0); diff --git a/test/ft-text-vertical-layout-type3.c b/test/ft-text-vertical-layout-type3.c index c1a8bbf31..0f85d73b7 100644 --- a/test/ft-text-vertical-layout-type3.c +++ b/test/ft-text-vertical-layout-type3.c @@ -42,8 +42,9 @@ static const cairo_test_t test = { draw }; -static cairo_scaled_font_t * -create_scaled_font (cairo_t * cr) +static cairo_status_t +create_scaled_font (cairo_t * cr, + cairo_scaled_font_t **out) { FcPattern *pattern, *resolved; FcResult result; @@ -51,6 +52,7 @@ create_scaled_font (cairo_t * cr) cairo_scaled_font_t *scaled_font; cairo_font_options_t *font_options; cairo_matrix_t font_matrix, ctm; + cairo_status_t status; double pixel_size; font_options = cairo_font_options_create (); @@ -58,6 +60,8 @@ create_scaled_font (cairo_t * cr) cairo_get_font_options (cr, font_options); pattern = FcPatternCreate (); + if (pattern == NULL) + return CAIRO_STATUS_NO_MEMORY; FcPatternAddString (pattern, FC_FAMILY, (FcChar8 *)"Bitstream Vera Sans"); FcPatternAddDouble (pattern, FC_PIXEL_SIZE, TEXT_SIZE); @@ -67,6 +71,10 @@ create_scaled_font (cairo_t * cr) FcDefaultSubstitute (pattern); resolved = FcFontMatch (NULL, pattern, &result); + if (resolved == NULL) { + FcPatternDestroy (pattern); + return CAIRO_STATUS_NO_MEMORY; + } /* set layout to vertical */ FcPatternDel (resolved, FC_VERTICAL_LAYOUT); @@ -92,14 +100,22 @@ create_scaled_font (cairo_t * cr) FcPatternDestroy (pattern); FcPatternDestroy (resolved); - return scaled_font; + status = cairo_scaled_font_status (scaled_font); + if (status) { + cairo_scaled_font_destroy (scaled_font); + return status; + } + + *out = scaled_font; + return CAIRO_STATUS_SUCCESS; } static cairo_test_status_t draw (cairo_t *cr, int width, int height) { cairo_text_extents_t extents; - cairo_scaled_font_t * scaled_font; + cairo_scaled_font_t *scaled_font; + cairo_status_t status; const char text[] = "i-W"; double line_width, x, y; @@ -111,7 +127,12 @@ draw (cairo_t *cr, int width, int height) cairo_paint (cr); cairo_restore (cr); - scaled_font = create_scaled_font (cr); + status = create_scaled_font (cr, &scaled_font); + if (status) { + return cairo_test_status_from_status (cairo_test_get_context (cr), + status); + } + cairo_set_scaled_font (cr, scaled_font); cairo_set_line_width (cr, 1.0);