From 307df91fcf7fc52983081816b33480fd7e6e4673 Mon Sep 17 00:00:00 2001 From: hasufell Date: Thu, 15 May 2014 18:50:57 +0200 Subject: [PATCH] Use REALLOC macro for improved readability --- src/common.h | 15 +++++++++++++++ src/filereader.c | 5 +---- src/half_edge.c | 35 +++++++++-------------------------- 3 files changed, 25 insertions(+), 30 deletions(-) diff --git a/src/common.h b/src/common.h index 1a7a765..59fcf30 100644 --- a/src/common.h +++ b/src/common.h @@ -35,5 +35,20 @@ */ #define STD_FILE_BUF 4096 +/** + * Realloc macro which checks if reallocation + * worked via a temporary pointer. + */ +#define REALLOC(ptr, size) \ +{ \ + void *tmp_ptr = NULL; \ + tmp_ptr = realloc(ptr, size); \ + if (tmp_ptr == NULL) { \ + fprintf(stderr,"NULL Pointer in %s [%d]",__FILE__,__LINE__); \ + abort(); \ + } \ + ptr = tmp_ptr; \ +} + #endif /* _DROW_ENGINE_TYPES_H */ diff --git a/src/filereader.c b/src/filereader.c index 03ec95a..5505811 100644 --- a/src/filereader.c +++ b/src/filereader.c @@ -82,19 +82,16 @@ char *read_file(char const * const filename) if (fd != -1) { /* read and copy chunks */ while ((n = read(fd, buf, STD_FILE_BUF)) != 0) { - char *tmp_ptr = NULL; if (n == -1) ABORT("Failed while reading file descriptor %d\n", fd); str_size += n; /* count total bytes read */ - tmp_ptr = (char*) realloc( /* allocate correct size */ + REALLOC( /* allocate correct size */ string, /* pointer to realloc */ str_size /* total bytes read */ + 1); /* space for trailing NULL byte */ - CHECK_PTR_VAL(tmp_ptr); - string = tmp_ptr; /* append buffer to string */ memcpy(string + (str_size - n), buf, (size_t)n); diff --git a/src/half_edge.c b/src/half_edge.c index 19f20cf..98575d9 100644 --- a/src/half_edge.c +++ b/src/half_edge.c @@ -24,6 +24,7 @@ * @brief operations on half-edge data structs */ +#include "common.h" #include "err.h" #include "filereader.h" #include "half_edge.h" @@ -75,7 +76,6 @@ static bool get_all_emanating_edges(HE_vert const * const vert, rc = 0; /* realloc count */ uint32_t const approx_ec = 20; /* allocation chunk */ HE_edge **edge_array; - HE_edge **tmp_ptr; if (!edge_array_out || !vert || !ec_out) return false; @@ -94,10 +94,8 @@ static bool get_all_emanating_edges(HE_vert const * const vert, /* allocate more chunks */ if (ec >= approx_ec) { - tmp_ptr = realloc(edge_array, sizeof(HE_edge*) + REALLOC(edge_array, sizeof(HE_edge*) * approx_ec * (rc + 2)); - CHECK_PTR_VAL(tmp_ptr); - edge_array = tmp_ptr; rc++; } @@ -308,14 +306,11 @@ HE_obj *parse_obj(char const * const obj_string) /* parse vertices and fill them */ if (!strcmp(str_tmp_ptr, "v")) { char *myfloat = NULL; - HE_vert *tmp_ptr; vector *tmp_vec = malloc(sizeof(vector)); CHECK_PTR_VAL(tmp_vec); - tmp_ptr = (HE_vert*) realloc(vertices, + REALLOC(vertices, sizeof(HE_vert) * (vc + 1)); - CHECK_PTR_VAL(tmp_ptr); - vertices = tmp_ptr; /* fill x */ myfloat = strtok_r(NULL, " ", &str_ptr_space); @@ -355,24 +350,17 @@ HE_obj *parse_obj(char const * const obj_string) } else if (!strcmp(str_tmp_ptr, "f")) { char *myint = NULL; uint8_t i = 0; - FACE tmp_ptr = NULL; - tmp_ptr = (FACE) realloc(face_v, sizeof(FACE*) * (fc + 1)); - CHECK_PTR_VAL(tmp_ptr); - face_v = tmp_ptr; + REALLOC(face_v, sizeof(FACE*) * (fc + 1)); face_v[fc] = NULL; while ((myint = strtok_r(NULL, " ", &str_ptr_space))) { - uint32_t *tmp_ptr = NULL; - i++; ec++; - tmp_ptr = (uint32_t*) realloc(face_v[fc], + REALLOC(face_v[fc], sizeof(FACE**) * (i + 1)); - CHECK_PTR_VAL(tmp_ptr); - tmp_ptr[i - 1] = (uint32_t) atoi(myint); - tmp_ptr[i] = 0; /* so we can iterate over it */ - face_v[fc] = tmp_ptr; + face_v[fc][i - 1] = (uint32_t) atoi(myint); + face_v[fc][i] = 0; /* so we can iterate over it */ } fc++; } @@ -404,7 +392,6 @@ HE_obj *parse_obj(char const * const obj_string) * since we always look one edge back. The first edge * element is taken care of below as well. */ if (j > 0 ) { - HE_edge **tmp_ptr = NULL; uint32_t *eac = &(edges[ec].vert->eac); /* connect previous edge to current edge */ @@ -412,10 +399,8 @@ HE_obj *parse_obj(char const * const obj_string) /* Acceleration struct: * add previous edge to edge_array of current vertice */ - tmp_ptr = realloc(edges[ec].vert->edge_array, + REALLOC(edges[ec].vert->edge_array, sizeof(HE_edge*) * (*eac + 1)); - CHECK_PTR_VAL(tmp_ptr); - edges[ec].vert->edge_array = tmp_ptr; edges[ec].vert->edge_array[*eac] = &(edges[ec - 1]); (*eac)++; @@ -427,10 +412,8 @@ HE_obj *parse_obj(char const * const obj_string) /* Acceleration struct: * add last edge to edge_array element of first vertice */ - tmp_ptr = realloc(edges[ec].next->vert->edge_array, + REALLOC(edges[ec].next->vert->edge_array, sizeof(HE_edge*) * (*eac + 1)); - CHECK_PTR_VAL(tmp_ptr); - edges[ec].next->vert->edge_array = tmp_ptr; edges[ec].next->vert->edge_array[*eac] = &(edges[ec]); (*eac)++; }