1 /* 2 * Copyright (c) 2014-2020 Pavel Kalvoda <me@pavelkalvoda.com> 3 * 4 * libcbor is free software; you can redistribute it and/or modify 5 * it under the terms of the MIT license. See LICENSE for details. 6 */ 7 8 #include "stack.h" 9 10 struct _cbor_stack _cbor_stack_init() { 11 return (struct _cbor_stack){.top = NULL, .size = 0}; 12 } 13 14 void _cbor_stack_pop(struct _cbor_stack *stack) { 15 struct _cbor_stack_record *top = stack->top; 16 stack->top = stack->top->lower; 17 _CBOR_FREE(top); 18 stack->size--; 19 } 20 21 struct _cbor_stack_record *_cbor_stack_push(struct _cbor_stack *stack, 22 cbor_item_t *item, 23 size_t subitems) { 24 if (stack->size == CBOR_MAX_STACK_SIZE) return NULL; 25 struct _cbor_stack_record *new_top = 26 _CBOR_MALLOC(sizeof(struct _cbor_stack_record)); 27 if (new_top == NULL) return NULL; 28 29 *new_top = (struct _cbor_stack_record){stack->top, item, subitems}; 30 stack->top = new_top; 31 stack->size++; 32 return new_top; 33 } 34