#include "pool.h"
#include "util.h"
+#include "dirpool.h"
#define DIR_BLOCK 127
-typedef struct _Dirpool {
- Id *dirs;
- int ndirs;
- Id *dirtraverse;
-} Dirpool;
-
void
-dirpool_create(Dirpool *dp)
+dirpool_init(Dirpool *dp)
{
memset(dp, 0, sizeof(*dp));
}
void
+dirpool_free(Dirpool *dp)
+{
+ sat_free(dp->dirs);
+ sat_free(dp->dirtraverse);
+}
+
+void
dirpool_make_dirtraverse(Dirpool *dp)
{
Id parent, i, *dirtraverse;
if (!dp->ndirs)
return;
dp->dirs = sat_extend_resize(dp->dirs, dp->ndirs, sizeof(Id), DIR_BLOCK);
- dirtraverse = sat_extend_resize(0, dp->ndirs, sizeof(Id), DIR_BLOCK);
- memset(dirtraverse, 0, dp->ndirs * sizeof(Id));
+ dirtraverse = sat_calloc_block(dp->ndirs, sizeof(Id), DIR_BLOCK);
for (parent = 0, i = 0; i < dp->ndirs; i++)
{
if (dp->dirs[i] > 0)
if (!dp->ndirs)
{
+ if (!create)
+ return 0;
dp->ndirs = 2;
dp->dirs = sat_extend_resize(dp->dirs, dp->ndirs, sizeof(Id), DIR_BLOCK);
dp->dirs[0] = 0;
dp->dirtraverse[dp->ndirs] = 0;
return dp->ndirs++;
}
-