X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Frepo.c;h=4fc38b7557e5dcd2b3ee5120499589e97685807f;hb=db67f9cb45157f2d4660a8fc2f24dcf3957d4b7c;hp=32ed1928da618b025058357106e73aaf293ccf06;hpb=b2fa614d08f9841a65c70c65250915be59550663;p=platform%2Fupstream%2Flibsolv.git diff --git a/src/repo.c b/src/repo.c index 32ed192..4fc38b7 100644 --- a/src/repo.c +++ b/src/repo.c @@ -275,6 +275,8 @@ repo_free(Repo *repo, int reuseids) int i; pool_freewhatprovides(pool); + if (repo == pool->installed) + pool->installed = 0; if (reuseids && repo->end == pool->nsolvables) { @@ -332,7 +334,7 @@ repo_sidedata_extend(Repo *repo, void *b, size_t size, Id p, int count) { int d = repo->start - p; b = sat_extend(b, n, d, size, REPO_SIDEDATA_BLOCK); - memmove(b + d * size, b, n * size); + memmove((char*)b + d * size, b, n * size); memset(b, 0, d * size); n += d; } @@ -340,7 +342,7 @@ repo_sidedata_extend(Repo *repo, void *b, size_t size, Id p, int count) { int d = p + count - repo->end; b = sat_extend(b, n, d, size, REPO_SIDEDATA_BLOCK); - memset(b + n * size, 0, d * size); + memset((char*)b + n * size, 0, d * size); } return b; } @@ -569,11 +571,8 @@ repo_fix_conflicts(Repo *repo, Offset conflicts) struct matchdata { Pool *pool; - const char *match; int flags; -#if 0 - regex_t regex; -#endif + Datamatcher matcher; int stop; int (*callback)(void *cbdata, Solvable *s, Repodata *data, Repokey *key, KeyValue *kv); void *callback_data; @@ -583,62 +582,13 @@ int repo_matchvalue(void *cbdata, Solvable *s, Repodata *data, Repokey *key, KeyValue *kv) { struct matchdata *md = cbdata; - int flags = md->flags; - if ((flags & SEARCH_STRINGMASK) != 0) + if (md->matcher.match) { - switch (key->type) - { - case REPOKEY_TYPE_ID: - case REPOKEY_TYPE_IDARRAY: - if (data && data->localpool) - kv->str = stringpool_id2str(&data->spool, kv->id); - else - kv->str = id2str(s->repo->pool, kv->id); - break; - case REPOKEY_TYPE_STR: - break; - default: - return 0; - } - switch ((flags & SEARCH_STRINGMASK)) - { - case SEARCH_SUBSTRING: - if (flags & SEARCH_NOCASE) - { - if (!strcasestr(kv->str, md->match)) - return 0; - } - else - { - if (!strstr(kv->str, md->match)) - return 0; - } - break; - case SEARCH_STRING: - if (flags & SEARCH_NOCASE) - { - if (strcasecmp(md->match, kv->str)) - return 0; - } - else - { - if (strcmp(md->match, kv->str)) - return 0; - } - break; - case SEARCH_GLOB: - if (fnmatch(md->match, kv->str, (flags & SEARCH_NOCASE) ? FNM_CASEFOLD : 0)) - return 0; - break; -#if 0 - case SEARCH_REGEX: - if (regexec(&md->regexp, kv->str, 0, NULL, 0)) - return 0; -#endif - default: - return 0; - } + if (!repodata_stringify(md->pool, data, key, kv, md->flags)) + return 0; + if (!datamatcher_match(&md->matcher, kv->str)) + return 0; } md->stop = md->callback(md->callback_data, s, data, key, kv); return md->stop; @@ -819,7 +769,7 @@ repo_search_md(Repo *repo, Id p, Id keyname, struct matchdata *md) } if (data->state == REPODATA_ERROR) continue; - repodata_search(data, p, keyname, repo_matchvalue, md); + repodata_search(data, p, keyname, md->flags, repo_matchvalue, md); if (md->stop > SEARCH_NEXT_KEY) break; } @@ -832,11 +782,14 @@ repo_search(Repo *repo, Id p, Id keyname, const char *match, int flags, int (*ca memset(&md, 0, sizeof(md)); md.pool = repo->pool; - md.match = match; md.flags = flags; md.callback = callback; md.callback_data = cbdata; + if (match) + datamatcher_init(&md.matcher, match, flags); repo_search_md(repo, p, keyname, &md); + if (match) + datamatcher_free(&md.matcher); } const char * @@ -859,7 +812,7 @@ repo_lookup_str(Repo *repo, Id entry, Id keyname) } for (i = 0, data = repo->repodata; i < repo->nrepodata; i++, data++) { - if (entry && (entry < data->start || entry >= data->end)) + if (entry != SOLVID_META && (entry < data->start || entry >= data->end)) continue; if (!repodata_precheck_keyname(data, keyname)) continue; @@ -881,13 +834,13 @@ repo_lookup_num(Repo *repo, Id entry, Id keyname, unsigned int notfound) if (keyname == RPM_RPMDBID) { - if (repo->rpmdbid && entry && entry >= repo->start && entry < repo->end) + if (repo->rpmdbid && entry >= repo->start && entry < repo->end) return repo->rpmdbid[entry - repo->start]; return notfound; } for (i = 0, data = repo->repodata; i < repo->nrepodata; i++, data++) { - if (entry && (entry < data->start || entry >= data->end)) + if (entry != SOLVID_META && (entry < data->start || entry >= data->end)) continue; if (!repodata_precheck_keyname(data, keyname)) continue; @@ -926,7 +879,7 @@ repo_lookup_id(Repo *repo, Id entry, Id keyname) } for (i = 0, data = repo->repodata; i < repo->nrepodata; i++, data++) { - if (entry && (entry < data->start || entry >= data->end)) + if (entry != SOLVID_META && (entry < data->start || entry >= data->end)) continue; if (!repodata_precheck_keyname(data, keyname)) continue; @@ -954,7 +907,7 @@ repo_lookup_bin_checksum(Repo *repo, Id entry, Id keyname, Id *typep) int i, j; for (i = 0, data = repo->repodata; i < repo->nrepodata; i++, data++) { - if (entry && (entry < data->start || entry >= data->end)) + if (entry != SOLVID_META && (entry < data->start || entry >= data->end)) continue; if (!repodata_precheck_keyname(data, keyname)) continue; @@ -979,7 +932,7 @@ repo_lookup_void(Repo *repo, Id entry, Id keyname) int i, j; for (i = 0, data = repo->repodata; i < repo->nrepodata; i++, data++) { - if (entry && (entry < data->start || entry >= data->end)) + if (entry != SOLVID_META && (entry < data->start || entry >= data->end)) continue; if (!repodata_precheck_keyname(data, keyname)) continue;