15 #include "source_solv.h"
16 #include "source_write.h"
19 adjust (Id **val, Id * new_id, Source *source)
23 assert (source->idarraydata <= *val);
24 assert (*val < source->idarraydata + source->idarraysize);
25 *val = new_id + (*val - source->idarraydata);
29 main(int argc, char **argv)
31 Pool *pool = pool_create();
40 if ((fp = fopen(*argv, "r")) == NULL)
45 pool_addsource_solv(pool, fp, "");
52 for (i = 0; i < pool->nsources; i++)
53 new_id_size += pool->sources[i]->idarraysize;
54 new_id = (Id*) malloc (sizeof (Id) * new_id_size);
56 for (i = 0; i < pool->nsources; i++)
58 Source *source = pool->sources[i];
60 memcpy (new_id + new_id_size, source->idarraydata,
61 source->idarraysize * sizeof (new_id[0]));
62 for (si = source->start; si < source->start + source->nsolvables; si++)
64 Solvable *s = pool->solvables + si;
65 adjust (&s->provides, new_id + new_id_size, source);
66 adjust (&s->obsoletes, new_id + new_id_size, source);
67 adjust (&s->conflicts, new_id + new_id_size, source);
68 adjust (&s->requires, new_id + new_id_size, source);
69 adjust (&s->recommends, new_id + new_id_size, source);
70 adjust (&s->suggests, new_id + new_id_size, source);
71 adjust (&s->supplements, new_id + new_id_size, source);
72 adjust (&s->enhances, new_id + new_id_size, source);
73 adjust (&s->freshens, new_id + new_id_size, source);
75 new_id_size += source->idarraysize;
78 pool->sources[0]->nsolvables += source->nsolvables;
79 source->nsolvables = 0;
80 source->start = pool->nsolvables;
81 free (source->idarraydata);
82 source->idarraydata = 0;
85 while (pool->nsources > 1)
87 pool_freesource (pool, pool->sources[1]);
89 free (pool->sources[0]->idarraydata);
90 pool->sources[0]->idarraydata = new_id;
91 pool->sources[0]->idarraysize = new_id_size;
93 pool_writesource(pool, pool->sources[0], stdout);