- cleanup repo handlin API
[platform/upstream/libsolv.git] / tools / repo_helix.c
index b8c58de..0f2fdb2 100644 (file)
@@ -1,4 +1,10 @@
-/*  -*- mode: C; c-file-style: "gnu"; fill-column: 78 -*- */
+/*
+ * Copyright (c) 2007, Novell Inc.
+ *
+ * This program is licensed under the BSD license, read LICENSE.BSD
+ * for further information
+ */
+
 /*
  * repo_helix.c
  * 
@@ -437,7 +443,7 @@ startElement(void *userData, const char *name, const char **atts)
       if ((pd->pack & PACK_BLOCK) == 0)  /* alloc new block ? */
        {
          pool->solvables = (Solvable *)realloc(pool->solvables, (pool->nsolvables + pd->pack + PACK_BLOCK + 1) * sizeof(Solvable));
-         pd->start = pool->solvables + pd->repo->start;
+         pd->start = pool->solvables + pool->nsolvables;
           memset(pd->start + pd->pack, 0, (PACK_BLOCK + 1) * sizeof(Solvable));
        }
 
@@ -811,19 +817,21 @@ characterData(void *userData, const XML_Char *s, int len)
  * 
  */
 
-Repo *
-pool_addrepo_helix(Pool *pool, FILE *fp)
+void
+repo_add_helix(Repo *repo, FILE *fp)
 {
+  Pool *pool = repo->pool;
   Parsedata pd;
   char buf[BUFF_SIZE];
   int i, l;
-  Repo *repo;
   struct stateswitch *sw;
 
-  // create empty repo
-  repo = pool_addrepo_empty(pool);
+  if (repo->start && repo->start + repo->nsolvables != pool->nsolvables)
+    abort();
+  if (!repo->start)
+    repo->start = pool->nsolvables;
 
-  // prepare parsedata
+  /* prepare parsedata */
   memset(&pd, 0, sizeof(pd));
   for (i = 0, sw = stateswitches; sw->from != NUMSTATES; i++, sw++)
     {
@@ -866,10 +874,8 @@ pool_addrepo_helix(Pool *pool, FILE *fp)
 
   // adapt package count
   pool->nsolvables += pd.pack;
-  repo->nsolvables = pd.pack;
+  repo->nsolvables += pd.pack;
 
   free(pd.content);
   free(pd.evrspace);
-
-  return repo;
 }