Initialize all allocated array members for blocky arrays (when it
authorMichael Matz <matz@suse.de>
Mon, 17 Mar 2008 15:04:03 +0000 (15:04 +0000)
committerMichael Matz <matz@suse.de>
Mon, 17 Mar 2008 15:04:03 +0000 (15:04 +0000)
matters, e.g. when extending also in blocks).

src/dirpool.c
src/pool.c
src/repodata.c
src/util.h

index e843b2a..1eb4a62 100644 (file)
@@ -32,8 +32,7 @@ dirpool_make_dirtraverse(Dirpool *dp)
   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)
@@ -100,4 +99,3 @@ dirpool_add_dir(Dirpool *dp, Id parent, Id comp, int create)
   dp->dirtraverse[dp->ndirs] = 0;
   return dp->ndirs++;
 }
-
index 5abead2..802c31f 100644 (file)
@@ -124,7 +124,7 @@ pool_create(void)
 
   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));
@@ -339,10 +339,8 @@ pool_createwhatprovides(Pool *pool)
   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++)
index fe64c30..f974837 100644 (file)
@@ -872,8 +872,7 @@ repodata_extend_block(Repodata *data, Id start, Id num)
     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;
@@ -896,8 +895,8 @@ repodata_insert_keyid(Repodata *data, Id entry, Id keyid, Id val, int overwrite)
   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])
index db2415d..cb3b87f 100644 (file)
@@ -14,6 +14,7 @@
 #define SATSOLVER_UTIL_H
 
 #include <stddef.h>
+#include <string.h>
 
 extern void *sat_malloc(size_t);
 extern void *sat_malloc2(size_t, size_t);
@@ -44,4 +45,13 @@ static inline void *sat_extend_resize(void *buf, size_t len, size_t size, 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 */