summaryrefslogtreecommitdiffstats
path: root/libdimension/dimension
diff options
context:
space:
mode:
authorTavian Barnes <tavianator@gmail.com>2010-04-07 14:26:15 -0400
committerTavian Barnes <tavianator@gmail.com>2010-04-07 14:34:52 -0400
commit2b087cb45ae91f90492a935625570d7d42ee3ecb (patch)
treea464213b08d04c8c91c8879a84e534f895c84378 /libdimension/dimension
parent7d6663eeb68bf9d0a3dff86128827c0c1d85df69 (diff)
downloaddimension-2b087cb45ae91f90492a935625570d7d42ee3ecb.tar.xz
New dmnsn_malloc() function, and friends.
I'm tired of checking for malloc failures everywhere, considering it never happens. So just bail out whenever it does. A lot of stuff is guaranteed to succeed if it returns now.
Diffstat (limited to 'libdimension/dimension')
-rw-r--r--libdimension/dimension/array.h32
-rw-r--r--libdimension/dimension/malloc.h31
-rw-r--r--libdimension/dimension/raytrace.h2
3 files changed, 42 insertions, 23 deletions
diff --git a/libdimension/dimension/array.h b/libdimension/dimension/array.h
index c1e28cd..a301de5 100644
--- a/libdimension/dimension/array.h
+++ b/libdimension/dimension/array.h
@@ -28,7 +28,7 @@
#define DIMENSION_ARRAY_H
#include <pthread.h> /* For pthread_rwlock_t */
-#include <stdlib.h> /* For size_t, malloc */
+#include <stdlib.h> /* For size_t */
#include <string.h> /* For memcpy */
typedef struct {
@@ -46,26 +46,17 @@ dmnsn_delete_array(dmnsn_array *array)
}
}
-/* Array allocation never returns NULL - if dmnsn_new_array returns, it
- succeeded */
+/* Array allocation */
DMNSN_INLINE dmnsn_array *
dmnsn_new_array(size_t obj_size)
{
- dmnsn_array *array = (dmnsn_array *)malloc(sizeof(dmnsn_array));
- if (array) {
- array->obj_size = obj_size;
- array->length = 0;
- array->capacity = 4; /* Start with capacity of 4 */
-
- /* Allocate the memory */
- array->ptr = malloc(array->capacity*array->obj_size);
- if (!array->ptr) {
- dmnsn_delete_array(array);
- dmnsn_error(DMNSN_SEVERITY_HIGH, "Array allocation failed.");
- }
- } else {
- dmnsn_error(DMNSN_SEVERITY_HIGH, "Array allocation failed.");
- }
+ dmnsn_array *array = (dmnsn_array *)dmnsn_malloc(sizeof(dmnsn_array));
+ array->obj_size = obj_size;
+ array->length = 0;
+ array->capacity = 4; /* Start with capacity of 4 */
+
+ /* Allocate the memory */
+ array->ptr = dmnsn_malloc(array->capacity*array->obj_size);
return array;
}
@@ -84,10 +75,7 @@ dmnsn_array_resize(dmnsn_array *array, size_t length)
if (length > array->capacity) {
/* Resize if we don't have enough capacity */
array->capacity = length*2; /* We are greedy */
- array->ptr = realloc(array->ptr, array->obj_size*array->capacity);
- if (!array->ptr) {
- dmnsn_error(DMNSN_SEVERITY_HIGH, "Resizing array failed.");
- }
+ array->ptr = dmnsn_realloc(array->ptr, array->obj_size*array->capacity);
}
array->length = length;
diff --git a/libdimension/dimension/malloc.h b/libdimension/dimension/malloc.h
new file mode 100644
index 0000000..8ca4f9d
--- /dev/null
+++ b/libdimension/dimension/malloc.h
@@ -0,0 +1,31 @@
+/*************************************************************************
+ * Copyright (C) 2010 Tavian Barnes <tavianator@gmail.com> *
+ * *
+ * This file is part of The Dimension Library. *
+ * *
+ * The Dimension Library is free software; you can redistribute it and/ *
+ * or modify it under the terms of the GNU Lesser General Public License *
+ * as published by the Free Software Foundation; either version 3 of the *
+ * License, or (at your option) any later version. *
+ * *
+ * The Dimension Library is distributed in the hope that it will be *
+ * useful, but WITHOUT ANY WARRANTY; without even the implied warranty *
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this program. If not, see *
+ * <http://www.gnu.org/licenses/>. *
+ *************************************************************************/
+
+/*
+ * Seriously, how often does malloc fail? And how often can you do something
+ * better than bail out when it does? dmnsn_malloc() is like malloc in every
+ * way except it calls dmnsn_error() on failure.
+ */
+
+#include <stdlib.h> /* For size_t */
+
+void *dmnsn_malloc(size_t size);
+void *dmnsn_realloc(void *ptr, size_t size);
+char *dmnsn_strdup(const char *s);
diff --git a/libdimension/dimension/raytrace.h b/libdimension/dimension/raytrace.h
index 1c7d875..914f944 100644
--- a/libdimension/dimension/raytrace.h
+++ b/libdimension/dimension/raytrace.h
@@ -26,7 +26,7 @@
#define DIMENSION_RAYTRACE_H
/* Render a scene by raytracing */
-int dmnsn_raytrace_scene(dmnsn_scene *scene);
+void dmnsn_raytrace_scene(dmnsn_scene *scene);
dmnsn_progress *dmnsn_raytrace_scene_async(dmnsn_scene *scene);
#endif /* DIMENSION_RAYTRACE_H */