diff --git a/c_src/decoder.c b/c_src/decoder.c index 19bc04b..cb2451f 100644 --- a/c_src/decoder.c +++ b/c_src/decoder.c @@ -162,22 +162,19 @@ dec_top(Decoder* d) void dec_push(Decoder* d, char val) { - char* tmp; int new_sz; int i; - if(d->st_top >= d->st_size) { + if(d->st_top == d->st_size) { new_sz = d->st_size + STACK_SIZE_INC; - tmp = (char*) enif_alloc(new_sz * sizeof(char)); - memcpy(tmp, d->st_data, d->st_size * sizeof(char)); - enif_free(d->st_data); - d->st_data = tmp; + d->st_data = (char*)enif_realloc(d->st_data, new_sz); d->st_size = new_sz; for(i = d->st_top; i < d->st_size; i++) { d->st_data[i] = st_invalid; } } + assert(d->st_top < d->st_size); d->st_data[d->st_top++] = val; }