int push(stack_t *stack, node_t *node) - Pushes a node into the top of the stack, fails on NULL input.
.br
int push_data(stack_t *stack, void *data) - Pushes a node into the top of the stack, fails on NULL stack or allocation error.
.br
int stack_size(stack_t *stack) - This function returns the stack's size, returns INVALID_SIZE on error or NULL stack.
.br
void free_stack(stack_t **stack) - This function frees a stack and sets the pointer (*stack) to NULL, doesn't touch the data.
.br
void free_stack_data(stack_t **stack, void (*free_function)(const void*)) - This function frees a stack and sets the pointer (*stack) to NULL, frees the data too, if free_function is NULL will use standard free() instead.