silc_stack_pop

SYNOPSIS

    SilcUInt32 silc_stack_pop(SilcStack stack);

DESCRIPTION

Pop the top of the stack to remove the previous stack frame and use previous frame as top of the stack. After popping, memory allocated in the old frame is freed. For each silc_stack_push call there must be silc_stack_pop call to free all memory (in reality any memory is not freed but within the stack it is). This returns the stack pointer of old frame after popping and caller may check that it is same as returned by the silc_stack_push. If it they differ, some routine has called silc_stack_push but has not called silc_stack_pop, or silc_stack_pop has been called too many times. Application should treat this as a fatal error, as it is a bug in the application code.

If `stack' is NULL this call has no effect. This function does not allocate any memory.

EXAMPLE

    This example saves the stack pointer which is checked when popping
    the current stack frame.  If the stack pointer differs then someone
    has pushed the stack frame but forgot to pop it (or has called it
    too many times).

    sp = silc_stack_push(stack, NULL);
    silc_foo_parse_packet(packet, stack);
    if (silc_stack_pop(stack) != sp)
      fatal("corrupted stack");