diff options
Diffstat (limited to 'libautomata_grow_automaton.c')
| -rw-r--r-- | libautomata_grow_automaton.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/libautomata_grow_automaton.c b/libautomata_grow_automaton.c new file mode 100644 index 0000000..98ce12f --- /dev/null +++ b/libautomata_grow_automaton.c @@ -0,0 +1,27 @@ +/* See LICENSE file for copyright and license details. */ +#include "common.h" + + +int +libautomata_grow_automaton(struct libautomata_automaton *automaton, size_t n) +{ + struct libautomata_node *new; + size_t size; + + if (automaton->nnodes > SIZE_MAX - n) + goto enomem; + size = automaton->nnodes + n; + if (size > SIZE_MAX / sizeof(*automaton->nodes)) + goto enomem; + size *= sizeof(*automaton->nodes); + + new = realloc(automaton->nodes, size); + if (!new) { + enomem: + errno = ENOMEM; + return -1; + } + automaton->nodes = new; + + return 0; +} |
