summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrea Canciani <ranma42@gmail.com>2011-07-15 10:43:22 +0200
committerAndrea Canciani <ranma42@gmail.com>2011-08-14 16:06:31 +0200
commit4839c95fe9b203b4ee29221af69801679313d696 (patch)
treeaccb0b5e2f9cdfcbef2a0d77944a7126a5cefb61
parent4cfef8eb3f5e97c49c01a6c25957f9e2cc103b1b (diff)
Do not reference error objects directly
This makes it possible to observe the creation of error objects by breaking on the appropriate _cairo_*_create_in_error() function and makes the code cleaner by passing around the status obtained from _cairo_error() instead of throwing the error.
-rw-r--r--src/cairo-beos-surface.cpp6
-rw-r--r--src/cairo-clip.c6
-rw-r--r--src/cairo-device.c3
-rw-r--r--src/cairo-path.c15
-rw-r--r--src/cairo-pattern.c36
-rw-r--r--src/cairo-region.c11
-rw-r--r--src/cairo-scaled-font.c3
-rw-r--r--src/cairo-spans.c6
-rw-r--r--src/cairo-surface.c3
9 files changed, 31 insertions, 58 deletions
diff --git a/src/cairo-beos-surface.cpp b/src/cairo-beos-surface.cpp
index 2e0f42c6e..a345d485d 100644
--- a/src/cairo-beos-surface.cpp
+++ b/src/cairo-beos-surface.cpp
@@ -917,10 +917,8 @@ _cairo_beos_surface_create_internal (BView* view,
// Must use malloc, because cairo code will use free() on the surface
cairo_beos_surface_t *surface = static_cast<cairo_beos_surface_t*>(
malloc(sizeof(cairo_beos_surface_t)));
- if (surface == NULL) {
- _cairo_error (CAIRO_STATUS_NO_MEMORY);
- return const_cast<cairo_surface_t*>(&_cairo_surface_nil);
- }
+ if (unlikely (surface == NULL))
+ return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
cairo_content_t content = CAIRO_CONTENT_COLOR;
if (bmp && (bmp->ColorSpace() == B_RGBA32 || bmp->ColorSpace() == B_RGBA15))
diff --git a/src/cairo-clip.c b/src/cairo-clip.c
index 6355a977b..f7a7e794a 100644
--- a/src/cairo-clip.c
+++ b/src/cairo-clip.c
@@ -610,10 +610,8 @@ _cairo_rectangle_list_create_in_error (cairo_status_t status)
return (cairo_rectangle_list_t*) &_cairo_rectangles_not_representable;
list = malloc (sizeof (*list));
- if (unlikely (list == NULL)) {
- status = _cairo_error (CAIRO_STATUS_NO_MEMORY);
- return (cairo_rectangle_list_t*) &_cairo_rectangles_nil;
- }
+ if (unlikely (list == NULL))
+ return _cairo_rectangle_list_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
list->status = status;
list->rectangles = NULL;
diff --git a/src/cairo-device.c b/src/cairo-device.c
index fd1ec71de..610e57d38 100644
--- a/src/cairo-device.c
+++ b/src/cairo-device.c
@@ -159,8 +159,7 @@ _cairo_device_create_in_error (cairo_status_t status)
case CAIRO_STATUS_INVALID_MESH_CONSTRUCTION:
case CAIRO_STATUS_DEVICE_FINISHED:
default:
- _cairo_error_throw (CAIRO_STATUS_NO_MEMORY);
- return (cairo_device_t *) &_nil_device;
+ return _cairo_device_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
}
}
diff --git a/src/cairo-path.c b/src/cairo-path.c
index d3d91311f..b58e58414 100644
--- a/src/cairo-path.c
+++ b/src/cairo-path.c
@@ -294,10 +294,8 @@ _cairo_path_create_in_error (cairo_status_t status)
return (cairo_path_t*) &_cairo_path_nil;
path = malloc (sizeof (cairo_path_t));
- if (unlikely (path == NULL)) {
- _cairo_error_throw (CAIRO_STATUS_NO_MEMORY);
- return (cairo_path_t*) &_cairo_path_nil;
- }
+ if (unlikely (path == NULL))
+ return _cairo_path_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
path->num_data = 0;
path->data = NULL;
@@ -314,10 +312,8 @@ _cairo_path_create_internal (cairo_path_fixed_t *path_fixed,
cairo_path_t *path;
path = malloc (sizeof (cairo_path_t));
- if (unlikely (path == NULL)) {
- _cairo_error_throw (CAIRO_STATUS_NO_MEMORY);
- return (cairo_path_t*) &_cairo_path_nil;
- }
+ if (unlikely (path == NULL))
+ return _cairo_path_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
path->num_data = _cairo_path_count (path, path_fixed,
cairo_get_tolerance (cr),
@@ -332,8 +328,7 @@ _cairo_path_create_internal (cairo_path_fixed_t *path_fixed,
sizeof (cairo_path_data_t));
if (unlikely (path->data == NULL)) {
free (path);
- _cairo_error_throw (CAIRO_STATUS_NO_MEMORY);
- return (cairo_path_t*) &_cairo_path_nil;
+ return _cairo_path_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
}
path->status = _cairo_path_populate (path, path_fixed, cr, flatten);
diff --git a/src/cairo-pattern.c b/src/cairo-pattern.c
index cb6bba845..7a98e4f0f 100644
--- a/src/cairo-pattern.c
+++ b/src/cairo-pattern.c
@@ -549,10 +549,8 @@ _cairo_pattern_create_solid (const cairo_color_t *color)
if (unlikely (pattern == NULL)) {
/* None cached, need to create a new pattern. */
pattern = malloc (sizeof (cairo_solid_pattern_t));
- if (unlikely (pattern == NULL)) {
- _cairo_error_throw (CAIRO_STATUS_NO_MEMORY);
- return (cairo_pattern_t *) &_cairo_pattern_nil;
- }
+ if (unlikely (pattern == NULL))
+ return _cairo_pattern_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
}
_cairo_pattern_init_solid (pattern, color);
@@ -665,10 +663,8 @@ cairo_pattern_create_for_surface (cairo_surface_t *surface)
{
cairo_surface_pattern_t *pattern;
- if (surface == NULL) {
- _cairo_error_throw (CAIRO_STATUS_NULL_POINTER);
- return (cairo_pattern_t*) &_cairo_pattern_nil_null_pointer;
- }
+ if (unlikely (surface == NULL))
+ return _cairo_pattern_create_in_error (_cairo_error (CAIRO_STATUS_NULL_POINTER));
if (surface->status)
return _cairo_pattern_create_in_error (surface->status);
@@ -677,10 +673,8 @@ cairo_pattern_create_for_surface (cairo_surface_t *surface)
_freed_pool_get (&freed_pattern_pool[CAIRO_PATTERN_TYPE_SURFACE]);
if (unlikely (pattern == NULL)) {
pattern = malloc (sizeof (cairo_surface_pattern_t));
- if (unlikely (pattern == NULL)) {
- _cairo_error_throw (CAIRO_STATUS_NO_MEMORY);
- return (cairo_pattern_t *)&_cairo_pattern_nil.base;
- }
+ if (unlikely (pattern == NULL))
+ return _cairo_pattern_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
}
CAIRO_MUTEX_INITIALIZE ();
@@ -727,10 +721,8 @@ cairo_pattern_create_linear (double x0, double y0, double x1, double y1)
_freed_pool_get (&freed_pattern_pool[CAIRO_PATTERN_TYPE_LINEAR]);
if (unlikely (pattern == NULL)) {
pattern = malloc (sizeof (cairo_linear_pattern_t));
- if (unlikely (pattern == NULL)) {
- _cairo_error_throw (CAIRO_STATUS_NO_MEMORY);
- return (cairo_pattern_t *) &_cairo_pattern_nil.base;
- }
+ if (unlikely (pattern == NULL))
+ return _cairo_pattern_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
}
CAIRO_MUTEX_INITIALIZE ();
@@ -779,10 +771,8 @@ cairo_pattern_create_radial (double cx0, double cy0, double radius0,
_freed_pool_get (&freed_pattern_pool[CAIRO_PATTERN_TYPE_RADIAL]);
if (unlikely (pattern == NULL)) {
pattern = malloc (sizeof (cairo_radial_pattern_t));
- if (unlikely (pattern == NULL)) {
- _cairo_error_throw (CAIRO_STATUS_NO_MEMORY);
- return (cairo_pattern_t *) &_cairo_pattern_nil.base;
- }
+ if (unlikely (pattern == NULL))
+ return _cairo_pattern_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
}
CAIRO_MUTEX_INITIALIZE ();
@@ -957,10 +947,8 @@ cairo_pattern_create_mesh (void)
_freed_pool_get (&freed_pattern_pool[CAIRO_PATTERN_TYPE_MESH]);
if (unlikely (pattern == NULL)) {
pattern = malloc (sizeof (cairo_mesh_pattern_t));
- if (unlikely (pattern == NULL)) {
- _cairo_error_throw (CAIRO_STATUS_NO_MEMORY);
- return (cairo_pattern_t *) &_cairo_pattern_nil.base;
- }
+ if (unlikely (pattern == NULL))
+ return _cairo_pattern_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
}
CAIRO_MUTEX_INITIALIZE ();
diff --git a/src/cairo-region.c b/src/cairo-region.c
index f3ccb898a..3dced6cf2 100644
--- a/src/cairo-region.c
+++ b/src/cairo-region.c
@@ -107,8 +107,7 @@ _cairo_region_create_in_error (cairo_status_t status)
case CAIRO_STATUS_INVALID_MESH_CONSTRUCTION:
case CAIRO_STATUS_DEVICE_FINISHED:
default:
- _cairo_error_throw (CAIRO_STATUS_NO_MEMORY);
- return (cairo_region_t *) &_cairo_region_nil;
+ return _cairo_region_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
}
}
@@ -197,7 +196,7 @@ cairo_region_create (void)
region = _cairo_malloc (sizeof (cairo_region_t));
if (region == NULL)
- return (cairo_region_t *) &_cairo_region_nil;
+ return _cairo_region_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
region->status = CAIRO_STATUS_SUCCESS;
CAIRO_REFERENCE_COUNT_INIT (&region->ref_count, 1);
@@ -297,7 +296,7 @@ cairo_region_create_rectangle (const cairo_rectangle_int_t *rectangle)
region = _cairo_malloc (sizeof (cairo_region_t));
if (unlikely (region == NULL))
- return (cairo_region_t *) &_cairo_region_nil;
+ return _cairo_region_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
region->status = CAIRO_STATUS_SUCCESS;
CAIRO_REFERENCE_COUNT_INIT (&region->ref_count, 1);
@@ -330,7 +329,7 @@ cairo_region_copy (const cairo_region_t *original)
cairo_region_t *copy;
if (original != NULL && original->status)
- return (cairo_region_t *) &_cairo_region_nil;
+ return _cairo_region_create_in_error (original->status);
copy = cairo_region_create ();
if (unlikely (copy->status))
@@ -340,7 +339,7 @@ cairo_region_copy (const cairo_region_t *original)
! pixman_region32_copy (&copy->rgn, CONST_CAST &original->rgn))
{
cairo_region_destroy (copy);
- return (cairo_region_t *) &_cairo_region_nil;
+ return _cairo_region_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
}
return copy;
diff --git a/src/cairo-scaled-font.c b/src/cairo-scaled-font.c
index b0afb0995..683137496 100644
--- a/src/cairo-scaled-font.c
+++ b/src/cairo-scaled-font.c
@@ -1120,8 +1120,7 @@ _cairo_scaled_font_create_in_error (cairo_status_t status)
scaled_font = malloc (sizeof (cairo_scaled_font_t));
if (unlikely (scaled_font == NULL)) {
CAIRO_MUTEX_UNLOCK (_cairo_scaled_font_error_mutex);
- _cairo_error_throw (CAIRO_STATUS_NO_MEMORY);
- return (cairo_scaled_font_t *) &_cairo_scaled_font_nil;
+ return _cairo_scaled_font_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
}
*scaled_font = _cairo_scaled_font_nil;
diff --git a/src/cairo-spans.c b/src/cairo-spans.c
index f6586506b..c39f63e26 100644
--- a/src/cairo-spans.c
+++ b/src/cairo-spans.c
@@ -238,8 +238,7 @@ _cairo_scan_converter_create_in_error (cairo_status_t status)
default:
break;
}
- status = CAIRO_STATUS_NO_MEMORY;
- RETURN_NIL;
+ return _cairo_scan_converter_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
#undef RETURN_NIL
}
@@ -350,7 +349,6 @@ _cairo_span_renderer_create_in_error (cairo_status_t status)
default:
break;
}
- status = CAIRO_STATUS_NO_MEMORY;
- RETURN_NIL;
+ return _cairo_span_renderer_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
#undef RETURN_NIL
}
diff --git a/src/cairo-surface.c b/src/cairo-surface.c
index 2512d8dc9..6a1641afd 100644
--- a/src/cairo-surface.c
+++ b/src/cairo-surface.c
@@ -3246,8 +3246,7 @@ _cairo_surface_create_in_error (cairo_status_t status)
case CAIRO_STATUS_INVALID_MESH_CONSTRUCTION:
case CAIRO_STATUS_DEVICE_FINISHED:
default:
- _cairo_error_throw (CAIRO_STATUS_NO_MEMORY);
- return (cairo_surface_t *) &_cairo_surface_nil;
+ return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_NO_MEMORY));
}
}