sacc

sacc(omys), simple console gopher client (mirror)
git clone https://git.parazyd.org/sacc
Log | Files | Refs | LICENSE

commit da486e90d17187e1fe8d8ed26982840059aaf968
parent 97eaeb752ee3fd28ac14199692a5082e257ef10e
Author: Quentin Rameau <quinq@fifth.space>
Date:   Tue, 11 Jul 2017 10:31:38 +0200

Add clearitem() to recursively free a dir item

Diffstat:
Mcommon.h | 2++
Msacc.c | 23++++++++++++++++++++++-
2 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/common.h b/common.h @@ -1,3 +1,5 @@ +#define clear(p) do { void **_p = (void **)(p); free(*_p); *_p = NULL; } while (0); + typedef struct item Item; typedef struct dir Dir; diff --git a/sacc.c b/sacc.c @@ -91,6 +91,26 @@ usage(void) die("usage: sacc URL"); } +static void +clearitem(Item *item) +{ + Dir *dir = item->dir; + Item **items; + size_t i; + + if (dir) { + items = dir->items; + for (i = 0; i < dir->nitems; ++i) { + clearitem(items[i]); + free(items[i]); + } + free(items); + clear(&item->dir); + } + + clear(&item->raw); +} + const char * typedisplay(char t) { @@ -559,7 +579,8 @@ moldentry(char *url) static void cleanup(void) { - free(mainentry); /* TODO free all tree recursively */ + clearitem(mainentry); + free(mainentry); free(mainurl); uicleanup(); }