return a->map - b->map;
}
-static Pool *cmp_pool;
+static Stringpool *cmp_spool;
static int
needid_cmp_need_s(const void *ap, const void *bp)
r = b->need - a->need;
if (r)
return r;
- const char *as = cmp_pool->ss.stringspace + cmp_pool->ss.strings[a->map];
- const char *bs = cmp_pool->ss.stringspace + cmp_pool->ss.strings[b->map];
+ const char *as = cmp_spool->stringspace + cmp_spool->strings[a->map];
+ const char *bs = cmp_spool->stringspace + cmp_spool->strings[b->map];
return strcmp(as, bs);
}
idused = 1;
if (key->type == REPOKEY_TYPE_DIR || key->type == REPOKEY_TYPE_DIRNUMNUMARRAY || key->type == REPOKEY_TYPE_DIRSTRARRAY)
dirused = 1;
+ /* make sure we know that key */
+ if (data->localpool)
+ {
+ stringpool_str2id(&data->spool, id2str(pool, key->name), 1);
+ stringpool_str2id(&data->spool, id2str(pool, key->type), 1);
+ if (key->type == REPOKEY_TYPE_CONSTANTID)
+ stringpool_str2id(&data->spool, id2str(pool, key->size), 1);
+ }
}
if (idused)
{
else
stringpool_init_empty(spool);
cbdata.ownspool = spool;
+ if (dirpoolusage)
+ dirpoolusage = 3; /* hmm, maybe not needed */
}
else if (poolusage == 0 || poolusage == 1)
{
for (i = 1; i < reloff + pool->nrels; i++)
needid[i].map = i;
- cmp_pool = pool;
+ cmp_spool = spool;
#if 0
- qsort(needid + 1, reloff - 1, sizeof(*needid), needid_cmp_need_s);
+ qsort(needid + 1, spool->nstrings - 1, sizeof(*needid), needid_cmp_need_s);
#else
/* make first entry '' */
needid[1].need = 1;
- qsort(needid + 2, reloff - 2, sizeof(*needid), needid_cmp_need_s);
+ qsort(needid + 2, spool->nstrings - 2, sizeof(*needid), needid_cmp_need_s);
#endif
qsort(needid + reloff, pool->nrels, sizeof(*needid), needid_cmp_need);
if (!needid[i].need)
break;
needid[i].need = 0;
- sizeid += strlen(pool->ss.stringspace + pool->ss.strings[needid[i].map]) + 1;
+ sizeid += strlen(spool->stringspace + spool->strings[needid[i].map]) + 1;
}
nstrings = i;
if (!old_str[same] || !str[same] || old_str[same] != str[same])
break;
*pp++ = same;
- len = strlen (str + same) + 1;
+ len = strlen(str + same) + 1;
memcpy (pp, str + same, len);
pp += len;
old_str = str;
*/
for (i = 0; i < nrels; i++)
{
- ran = pool->rels + (needid[reloff + i].map - pool->ss.nstrings);
+ ran = pool->rels + (needid[reloff + i].map - reloff);
write_id(fp, needid[ISRELDEP(ran->name) ? RELOFF(ran->name) : ran->name].need);
write_id(fp, needid[ISRELDEP(ran->evr) ? RELOFF(ran->evr) : ran->evr].need);
write_u8(fp, ran->flags);