X-Git-Url: https://git.danieliu.xyz/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcstack.c;h=31611c21f6c3df18dc7f5981f1c8e5bd839e136d;hb=b1e0c986d6e531f71d0a3ecc01551ab2d9cd8929;hp=a5ecc0695fd770bfc3d246dccf8320d0fdf6499d;hpb=be20bc40619598a5c9af8234ae81ce0a6899651f;p=smdp.git diff --git a/src/cstack.c b/src/cstack.c index a5ecc06..31611c2 100644 --- a/src/cstack.c +++ b/src/cstack.c @@ -19,27 +19,36 @@ * */ +#include // fprintf #include // malloc, realloc #include "cstack.h" cstack_t *cstack_init() { - cstack_t *stack = malloc(sizeof(cstack_t)); - stack->content = NULL; - stack->alloc = stack->size = 0; - stack->head = -1; - stack->push = cstack_push; - stack->pop = cstack_pop; - stack->top = cstack_top; - stack->empty = cstack_empty; - stack->delete = cstack_delete; + cstack_t *stack = NULL; + if((stack = malloc(sizeof(cstack_t))) != NULL) { + stack->content = NULL; + stack->alloc = stack->size = 0; + stack->head = -1; + stack->push = cstack_push; + stack->pop = cstack_pop; + stack->top = cstack_top; + stack->empty = cstack_empty; + stack->delete = cstack_delete; + } else { + fprintf(stderr, "%s\n", "cstack_init() failed to allocate memory."); + exit(EXIT_FAILURE); + } return stack; } void cstack_push(cstack_t *self, char c) { if(self->size + sizeof(c) > self->alloc) { self->alloc += (sizeof(char)); - self->content = realloc(self->content, self->alloc); + if((self->content = realloc(self->content, self->alloc)) == NULL) { + fprintf(stderr, "%s\n", "cstack_push() failed to reallocate memory."); + exit(EXIT_FAILURE); + } } self->content[++self->head] = c; self->size += (sizeof(char));