matters, e.g. when extending also in blocks).
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)
dp->dirtraverse[dp->ndirs] = 0;
return dp->ndirs++;
}
-
stringpool_init (&pool->ss, initpool_data);
- /* alloc space for ReDep 0 */
+ /* alloc space for RelDep 0 */
pool->rels = sat_extend_resize(0, 1, sizeof(Reldep), REL_BLOCK);
pool->nrels = 1;
memset(pool->rels, 0, sizeof(Reldep));
pool_freeidhashes(pool); /* XXX: should not be here! */
pool_freewhatprovides(pool);
num = pool->ss.nstrings;
- pool->whatprovides = whatprovides = sat_extend_resize(0, num, sizeof(Offset), WHATPROVIDES_BLOCK);
- memset(whatprovides, 0, num * sizeof(Offset));
- pool->whatprovides_rel = sat_extend_resize(0, pool->nrels, sizeof(Offset), WHATPROVIDES_BLOCK);
- memset(pool->whatprovides_rel, 0, pool->nrels * sizeof(Offset));
+ pool->whatprovides = whatprovides = sat_calloc_block(num, sizeof(Offset), WHATPROVIDES_BLOCK);
+ pool->whatprovides_rel = sat_calloc_block(pool->nrels, sizeof(Offset), WHATPROVIDES_BLOCK);
/* count providers for each name */
for (i = 1; i < pool->nsolvables; i++)
return;
if (!data->incoreoffset)
{
- data->incoreoffset = sat_extend_resize(data->incoreoffset, num, sizeof(Id), REPODATA_BLOCK);
- memset(data->incoreoffset, 0, num * sizeof(Id));
+ data->incoreoffset = sat_calloc_block(num, sizeof(Id), REPODATA_BLOCK);
data->start = start;
data->end = start + num;
return;
int i;
if (!data->attrs)
{
- data->attrs = sat_extend_resize(0, data->end - data->start, sizeof(Id *), REPODATA_BLOCK);
- memset(data->attrs, 0, (data->end - data->start) * sizeof(Id *));
+ data->attrs = sat_calloc_block(data->end - data->start, sizeof(Id *),
+ REPODATA_BLOCK);
}
i = 0;
if (data->attrs[entry])
#define SATSOLVER_UTIL_H
#include <stddef.h>
+#include <string.h>
extern void *sat_malloc(size_t);
extern void *sat_malloc2(size_t, size_t);
return buf;
}
+static inline void *sat_calloc_block(size_t len, size_t size, size_t block)
+{
+ void *buf;
+ if (!len)
+ return 0;
+ buf = sat_malloc2((len + block) & ~block, size);
+ memset(buf, 0, ((len + block) & ~block) * size);
+ return buf;
+}
#endif /* SATSOLVER_UTIL_H */