Use REALLOC macro for improved readability
This commit is contained in:
parent
a4026b63e6
commit
307df91fcf
15
src/common.h
15
src/common.h
@ -35,5 +35,20 @@
|
|||||||
*/
|
*/
|
||||||
#define STD_FILE_BUF 4096
|
#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 */
|
#endif /* _DROW_ENGINE_TYPES_H */
|
||||||
|
@ -82,19 +82,16 @@ char *read_file(char const * const filename)
|
|||||||
if (fd != -1) {
|
if (fd != -1) {
|
||||||
/* read and copy chunks */
|
/* read and copy chunks */
|
||||||
while ((n = read(fd, buf, STD_FILE_BUF)) != 0) {
|
while ((n = read(fd, buf, STD_FILE_BUF)) != 0) {
|
||||||
char *tmp_ptr = NULL;
|
|
||||||
|
|
||||||
if (n == -1)
|
if (n == -1)
|
||||||
ABORT("Failed while reading file descriptor %d\n", fd);
|
ABORT("Failed while reading file descriptor %d\n", fd);
|
||||||
|
|
||||||
str_size += n; /* count total bytes read */
|
str_size += n; /* count total bytes read */
|
||||||
|
|
||||||
tmp_ptr = (char*) realloc( /* allocate correct size */
|
REALLOC( /* allocate correct size */
|
||||||
string, /* pointer to realloc */
|
string, /* pointer to realloc */
|
||||||
str_size /* total bytes read */
|
str_size /* total bytes read */
|
||||||
+ 1); /* space for trailing NULL byte */
|
+ 1); /* space for trailing NULL byte */
|
||||||
CHECK_PTR_VAL(tmp_ptr);
|
|
||||||
string = tmp_ptr;
|
|
||||||
|
|
||||||
/* append buffer to string */
|
/* append buffer to string */
|
||||||
memcpy(string + (str_size - n), buf, (size_t)n);
|
memcpy(string + (str_size - n), buf, (size_t)n);
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
* @brief operations on half-edge data structs
|
* @brief operations on half-edge data structs
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
#include "err.h"
|
#include "err.h"
|
||||||
#include "filereader.h"
|
#include "filereader.h"
|
||||||
#include "half_edge.h"
|
#include "half_edge.h"
|
||||||
@ -75,7 +76,6 @@ static bool get_all_emanating_edges(HE_vert const * const vert,
|
|||||||
rc = 0; /* realloc count */
|
rc = 0; /* realloc count */
|
||||||
uint32_t const approx_ec = 20; /* allocation chunk */
|
uint32_t const approx_ec = 20; /* allocation chunk */
|
||||||
HE_edge **edge_array;
|
HE_edge **edge_array;
|
||||||
HE_edge **tmp_ptr;
|
|
||||||
|
|
||||||
if (!edge_array_out || !vert || !ec_out)
|
if (!edge_array_out || !vert || !ec_out)
|
||||||
return false;
|
return false;
|
||||||
@ -94,10 +94,8 @@ static bool get_all_emanating_edges(HE_vert const * const vert,
|
|||||||
|
|
||||||
/* allocate more chunks */
|
/* allocate more chunks */
|
||||||
if (ec >= approx_ec) {
|
if (ec >= approx_ec) {
|
||||||
tmp_ptr = realloc(edge_array, sizeof(HE_edge*)
|
REALLOC(edge_array, sizeof(HE_edge*)
|
||||||
* approx_ec * (rc + 2));
|
* approx_ec * (rc + 2));
|
||||||
CHECK_PTR_VAL(tmp_ptr);
|
|
||||||
edge_array = tmp_ptr;
|
|
||||||
rc++;
|
rc++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -308,14 +306,11 @@ HE_obj *parse_obj(char const * const obj_string)
|
|||||||
/* parse vertices and fill them */
|
/* parse vertices and fill them */
|
||||||
if (!strcmp(str_tmp_ptr, "v")) {
|
if (!strcmp(str_tmp_ptr, "v")) {
|
||||||
char *myfloat = NULL;
|
char *myfloat = NULL;
|
||||||
HE_vert *tmp_ptr;
|
|
||||||
vector *tmp_vec = malloc(sizeof(vector));
|
vector *tmp_vec = malloc(sizeof(vector));
|
||||||
CHECK_PTR_VAL(tmp_vec);
|
CHECK_PTR_VAL(tmp_vec);
|
||||||
|
|
||||||
tmp_ptr = (HE_vert*) realloc(vertices,
|
REALLOC(vertices,
|
||||||
sizeof(HE_vert) * (vc + 1));
|
sizeof(HE_vert) * (vc + 1));
|
||||||
CHECK_PTR_VAL(tmp_ptr);
|
|
||||||
vertices = tmp_ptr;
|
|
||||||
|
|
||||||
/* fill x */
|
/* fill x */
|
||||||
myfloat = strtok_r(NULL, " ", &str_ptr_space);
|
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")) {
|
} else if (!strcmp(str_tmp_ptr, "f")) {
|
||||||
char *myint = NULL;
|
char *myint = NULL;
|
||||||
uint8_t i = 0;
|
uint8_t i = 0;
|
||||||
FACE tmp_ptr = NULL;
|
|
||||||
|
|
||||||
tmp_ptr = (FACE) realloc(face_v, sizeof(FACE*) * (fc + 1));
|
REALLOC(face_v, sizeof(FACE*) * (fc + 1));
|
||||||
CHECK_PTR_VAL(tmp_ptr);
|
|
||||||
face_v = tmp_ptr;
|
|
||||||
face_v[fc] = NULL;
|
face_v[fc] = NULL;
|
||||||
while ((myint = strtok_r(NULL, " ", &str_ptr_space))) {
|
while ((myint = strtok_r(NULL, " ", &str_ptr_space))) {
|
||||||
uint32_t *tmp_ptr = NULL;
|
|
||||||
|
|
||||||
i++;
|
i++;
|
||||||
ec++;
|
ec++;
|
||||||
|
|
||||||
tmp_ptr = (uint32_t*) realloc(face_v[fc],
|
REALLOC(face_v[fc],
|
||||||
sizeof(FACE**) * (i + 1));
|
sizeof(FACE**) * (i + 1));
|
||||||
CHECK_PTR_VAL(tmp_ptr);
|
face_v[fc][i - 1] = (uint32_t) atoi(myint);
|
||||||
tmp_ptr[i - 1] = (uint32_t) atoi(myint);
|
face_v[fc][i] = 0; /* so we can iterate over it */
|
||||||
tmp_ptr[i] = 0; /* so we can iterate over it */
|
|
||||||
face_v[fc] = tmp_ptr;
|
|
||||||
}
|
}
|
||||||
fc++;
|
fc++;
|
||||||
}
|
}
|
||||||
@ -404,7 +392,6 @@ HE_obj *parse_obj(char const * const obj_string)
|
|||||||
* since we always look one edge back. The first edge
|
* since we always look one edge back. The first edge
|
||||||
* element is taken care of below as well. */
|
* element is taken care of below as well. */
|
||||||
if (j > 0 ) {
|
if (j > 0 ) {
|
||||||
HE_edge **tmp_ptr = NULL;
|
|
||||||
uint32_t *eac = &(edges[ec].vert->eac);
|
uint32_t *eac = &(edges[ec].vert->eac);
|
||||||
|
|
||||||
/* connect previous edge to current edge */
|
/* connect previous edge to current edge */
|
||||||
@ -412,10 +399,8 @@ HE_obj *parse_obj(char const * const obj_string)
|
|||||||
|
|
||||||
/* Acceleration struct:
|
/* Acceleration struct:
|
||||||
* add previous edge to edge_array of current vertice */
|
* 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));
|
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]);
|
edges[ec].vert->edge_array[*eac] = &(edges[ec - 1]);
|
||||||
(*eac)++;
|
(*eac)++;
|
||||||
|
|
||||||
@ -427,10 +412,8 @@ HE_obj *parse_obj(char const * const obj_string)
|
|||||||
|
|
||||||
/* Acceleration struct:
|
/* Acceleration struct:
|
||||||
* add last edge to edge_array element of first vertice */
|
* 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));
|
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]);
|
edges[ec].next->vert->edge_array[*eac] = &(edges[ec]);
|
||||||
(*eac)++;
|
(*eac)++;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user