Author: mlschroe Date: Mon Oct 13 12:09:47 2008 New Revision: 11310 URL: http://svn.opensuse.org/viewcvs/zypp?rev=11310&view=rev Log: - also use matcher in repo_solv Modified: trunk/sat-solver/src/repo.c trunk/sat-solver/src/repo.h trunk/sat-solver/src/repodata.c trunk/sat-solver/src/repopage.c Modified: trunk/sat-solver/src/repo.c URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/src/repo.c?rev=11310&a... ============================================================================== --- trunk/sat-solver/src/repo.c (original) +++ trunk/sat-solver/src/repo.c Mon Oct 13 12:09:47 2008 @@ -569,11 +569,8 @@ 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,63 +580,9 @@ 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) - { - 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 (md->matcher.match && !datamatcher_match(&md->matcher, data, key, kv)) + return 0; md->stop = md->callback(md->callback_data, s, data, key, kv); return md->stop; } @@ -832,11 +775,14 @@ 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, md.pool, match, flags); repo_search_md(repo, p, keyname, &md); + if (match) + datamatcher_free(&md.matcher); } const char * Modified: trunk/sat-solver/src/repo.h URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/src/repo.h?rev=11310&a... ============================================================================== --- trunk/sat-solver/src/repo.h (original) +++ trunk/sat-solver/src/repo.h Mon Oct 13 12:09:47 2008 @@ -13,8 +13,6 @@ #ifndef SATSOLVER_REPO_H #define SATSOLVER_REPO_H -#include <regex.h> - #include "pooltypes.h" #include "pool.h" #include "repodata.h" @@ -270,11 +268,16 @@ #endif +void datamatcher_init(Datamatcher *ma, Pool *pool, const char *match, int flags); +void datamatcher_free(Datamatcher *ma); +int datamatcher_match(Datamatcher *ma, Repodata *data, Repokey *key, KeyValue *kv); + /* Use these like: Dataiterator di; dataiterator_init(&di, repo, 0, 0, "bla", SEARCH_SUBSTRING); while (dataiterator_step(&di)) - dosomething(di.solvid, di.key, di.kv); */ + dosomething(di.solvid, di.key, di.kv); + dataiterator_free(&di); */ void dataiterator_init(Dataiterator *di, Repo *repo, Id p, Id keyname, const char *match, int flags); void dataiterator_free(Dataiterator *di); Modified: trunk/sat-solver/src/repodata.c URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/src/repodata.c?rev=113... ============================================================================== --- trunk/sat-solver/src/repodata.c (original) +++ trunk/sat-solver/src/repodata.c Mon Oct 13 12:09:47 2008 @@ -20,6 +20,7 @@ #include <stdlib.h> #include <unistd.h> #include <assert.h> +#include <regex.h> #include "repo.h" #include "pool.h" Modified: trunk/sat-solver/src/repopage.c URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/src/repopage.c?rev=113... ============================================================================== --- trunk/sat-solver/src/repopage.c (original) +++ trunk/sat-solver/src/repopage.c Mon Oct 13 12:09:47 2008 @@ -782,7 +782,7 @@ /* If we can't seek on our input we have to slurp in everything. */ if (!can_seek) - store->blob_store = sat_malloc(npages * BLOB_PAGESIZE); + store->blob_store = sat_malloc2(npages, BLOB_PAGESIZE); for (i = 0; i < npages; i++) { unsigned int in_len = read_u32(fp); -- To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org For additional commands, e-mail: zypp-commit+help@opensuse.org