/src/libcbor/src/cbor/internal/stack.c
Line | Count | Source |
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 | 128k | struct _cbor_stack _cbor_stack_init(void) { |
11 | 128k | return (struct _cbor_stack){.top = NULL, .size = 0}; |
12 | 128k | } |
13 | | |
14 | 1.88M | void _cbor_stack_pop(struct _cbor_stack *stack) { |
15 | 1.88M | struct _cbor_stack_record *top = stack->top; |
16 | 1.88M | stack->top = stack->top->lower; |
17 | 1.88M | _cbor_free(top); |
18 | 1.88M | stack->size--; |
19 | 1.88M | } |
20 | | |
21 | | struct _cbor_stack_record *_cbor_stack_push(struct _cbor_stack *stack, |
22 | | cbor_item_t *item, |
23 | 1.88M | size_t subitems) { |
24 | 1.88M | if (stack->size == CBOR_MAX_STACK_SIZE) return NULL; |
25 | 1.88M | struct _cbor_stack_record *new_top = |
26 | 1.88M | _cbor_malloc(sizeof(struct _cbor_stack_record)); |
27 | 1.88M | if (new_top == NULL) return NULL; |
28 | | |
29 | 1.88M | *new_top = (struct _cbor_stack_record){stack->top, item, subitems}; |
30 | 1.88M | stack->top = new_top; |
31 | 1.88M | stack->size++; |
32 | 1.88M | return new_top; |
33 | 1.88M | } |