diff options
| author | Xavier Del Campo Romero <xavi92@disroot.org> | 2026-05-09 02:56:07 +0200 |
|---|---|---|
| committer | Xavier Del Campo Romero <xavi92@disroot.org> | 2026-05-31 20:43:27 +0200 |
| commit | 8c4f46dca6a1bb02082886beac46cbb8e4cf2bbb (patch) | |
| tree | 2fa198377214bac01713fcfd6004eb7ca3515dfe /pop.c | |
| download | slcob-8c4f46dca6a1bb02082886beac46cbb8e4cf2bbb.tar.gz | |
Add project skeleton
Diffstat (limited to 'pop.c')
| -rw-r--r-- | pop.c | 37 |
1 files changed, 37 insertions, 0 deletions
@@ -0,0 +1,37 @@ +#include "prv.h" +#include <stdlib.h> + +int pop(const struct lex *l, struct prv *p) +{ + size_t n; + struct pos *pos = NULL; + + if (!p->n) + { + fprintf(stderr, "%s: underflow\n", __func__); + return -1; + } + else if (!(n = p->n - 1)) + { + free(p->pos); + p->pos = NULL; + } + else if (!(pos = realloc(p->pos, n * sizeof *pos))) + { + perror("realloc(3)"); + return -1; + } + + p->pos = pos; + p->n = n; + + if (p->n) + { + const struct pos *old = &p->pos[--p->i]; + + if (old->seq->end && old->seq->end(l, p)) + return -1; + } + + return 0; +} |
