X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Frepodata.c;h=ec819f03ff2bdfb18b5c2bac5a30e5aafcedb2a7;hb=543f15768dc31ce2efa82f78f45dfe7e49973c0c;hp=60fdee53aa9dd5dae2ad352eb5a1596155246618;hpb=44c4bcad535873d0d5f6cfc3e24c71947d018eb4;p=platform%2Fupstream%2Flibsolv.git diff --git a/src/repodata.c b/src/repodata.c index 60fdee5..ec819f0 100644 --- a/src/repodata.c +++ b/src/repodata.c @@ -678,10 +678,10 @@ dataiterator_init(Dataiterator *di, Repo *repo, Id p, Id keyname, /* FIXME factor and merge with repo_matchvalue */ static int -dataiterator_match(Dataiterator *di, KeyValue *kv) +dataiterator_match_int_real(Dataiterator *di, int flags, const void *vmatch) { - int flags = di->flags; - + KeyValue *kv = &di->kv; + const char *match = vmatch; if ((flags & SEARCH_STRINGMASK) != 0) { switch (di->key->type) @@ -703,34 +703,34 @@ dataiterator_match(Dataiterator *di, KeyValue *kv) case SEARCH_SUBSTRING: if (flags & SEARCH_NOCASE) { - if (!strcasestr(kv->str, di->match)) + if (!strcasestr(kv->str, match)) return 0; } else { - if (!strstr(kv->str, di->match)) + if (!strstr(kv->str, match)) return 0; } break; case SEARCH_STRING: if (flags & SEARCH_NOCASE) { - if (strcasecmp(di->match, kv->str)) + if (strcasecmp(match, kv->str)) return 0; } else { - if (strcmp(di->match, kv->str)) + if (strcmp(match, kv->str)) return 0; } break; case SEARCH_GLOB: - if (fnmatch(di->match, kv->str, (flags & SEARCH_NOCASE) ? FNM_CASEFOLD : 0)) + if (fnmatch(match, kv->str, (flags & SEARCH_NOCASE) ? FNM_CASEFOLD : 0)) return 0; break; #if 0 case SEARCH_REGEX: - if (regexec(&di->regexp, kv->str, 0, NULL, 0)) + if (regexec((const regex_t *)vmatch, kv->str, 0, NULL, 0)) return 0; #endif default: @@ -740,6 +740,18 @@ dataiterator_match(Dataiterator *di, KeyValue *kv) return 1; } +static int +dataiterator_match_int(Dataiterator *di) +{ + return dataiterator_match_int_real(di, di->flags, di->match); +} + +int +dataiterator_match(Dataiterator *di, int flags, const void *vmatch) +{ + return dataiterator_match_int_real(di, flags, vmatch); +} + static Repokey solvablekeys[RPM_RPMDBID - SOLVABLE_NAME + 1] = { { SOLVABLE_NAME, REPOKEY_TYPE_ID, 0, KEY_STORAGE_SOLVABLE }, { SOLVABLE_ARCH, REPOKEY_TYPE_ID, 0, KEY_STORAGE_SOLVABLE }, @@ -947,7 +959,7 @@ skiprepo:; } weg2: if (!di->match - || dataiterator_match(di, &di->kv)) + || dataiterator_match_int(di)) break; } return 1;