kv->num = 0; /* not stringified */
kv->str = (const char *)data->attrdata + value;
return;
+ case REPOKEY_TYPE_BINARY:
+ kv->str = (const char *)data_read_id(data->attrdata + value, (Id *)&kv->num);
+ return;
case REPOKEY_TYPE_IDARRAY:
array = data->attriddata + (value + kv->entry);
kv->id = array[0];
void
repodata_search_arrayelement(Repodata *data, Id solvid, Id keyname, int flags, KeyValue *kv, int (*callback)(void *cbdata, Solvable *s, Repodata *data, Repokey *key, KeyValue *kv), void *cbdata)
{
- struct subschema_data subd;
- subd.solvid = solvid;
- subd.cbdata = cbdata;
- subd.parent = kv;
- repodata_search_keyskip(data, SOLVID_SUBSCHEMA, keyname, flags, 0, callback, &subd);
+ repodata_search_keyskip(data, solvid, keyname, flags | SEARCH_SUBSCHEMA, (Id *)kv, callback, cbdata);
}
static int
repodata_search_array(Repodata *data, Id solvid, Id keyname, int flags, Repokey *key, KeyValue *kv, int (*callback)(void *cbdata, Solvable *s, Repodata *data, Repokey *key, KeyValue *kv), void *cbdata)
{
- struct subschema_data subd;
Solvable *s = solvid > 0 ? data->repo->pool->solvables + solvid : 0;
unsigned char *dp = (unsigned char *)kv->str;
int stop;
if (!dp || kv->entry != -1)
return 0;
- subd.solvid = solvid;
- subd.cbdata = cbdata;
- subd.parent = kv;
while (++kv->entry < kv->num)
{
if (kv->entry)
if (stop && stop != SEARCH_ENTERSUB)
return stop;
if ((flags & SEARCH_SUB) != 0 || stop == SEARCH_ENTERSUB)
- repodata_search_keyskip(data, SOLVID_SUBSCHEMA, keyname, flags, 0, callback, &subd);
+ repodata_search_keyskip(data, solvid, keyname, flags | SEARCH_SUBSCHEMA, (Id *)kv, callback, cbdata);
}
if ((flags & SEARCH_ARRAYSENTINEL) != 0)
{
if (!maybe_load_repodata(data, keyname))
return;
- if (solvid == SOLVID_SUBSCHEMA)
- {
- struct subschema_data *subd = cbdata;
- cbdata = subd->cbdata;
- solvid = subd->solvid;
- schema = subd->parent->id;
- dp = (unsigned char *)subd->parent->str;
- kv.parent = subd->parent;
+ if ((flags & SEARCH_SUBSCHEMA) != 0)
+ {
+ flags ^= SEARCH_SUBSCHEMA;
+ kv.parent = (KeyValue *)keyskip;
+ keyskip = 0;
+ schema = kv.parent->id;
+ dp = (unsigned char *)kv.parent->str;
}
else
{