/**************************************************************/ /* tpax: a topological pax implementation */ /* Copyright (C) 2020--2024 SysDeer Technologies, LLC */ /* Released under GPLv2 and GPLv3; see COPYING.TPAX. */ /**************************************************************/ #include #include #include #include #include "tpax_driver_impl.h" /**********************************************/ /* release and reset the following objects: */ /* */ /* - item queue */ /* - queue vector */ /* - cached prefixes */ /* - prefix vector */ /* */ /**********************************************/ int tpax_archive_reset(const struct tpax_driver_ctx * dctx) { struct tpax_driver_ctx_impl * ictx; void * next; size_t size; char ** ppref; ictx = tpax_get_driver_ictx(dctx); for (; ictx->dirents; ) { next = ictx->dirents->next; size = ictx->dirents->size; munmap(ictx->dirents,size); ictx->dirents = (struct tpax_dirent_buffer *)next; } for (ppref=ictx->prefixv; *ppref; ppref++) free(*ppref); for (ppref=ictx->prefptr; pprefprefcap; ppref++) *ppref = 0; if (ictx->prefixv != ictx->prefptr) free(ictx->prefixv); if (ictx->direntv) free(ictx->direntv); ictx->nqueued = 0; ictx->dirents = 0; ictx->direntv = 0; ictx->prefixv = ictx->prefptr; return 0; }