[pacman-dev] CVS update of pacman-lib/lib/libalpm (db.c)
Dan McGee
dan at archlinux.org
Mon Feb 26 18:32:08 EST 2007
Date: Monday, February 26, 2007 @ 18:32:08
Author: dan
Path: /home/cvs-pacman/pacman-lib/lib/libalpm
Modified: db.c (1.61 -> 1.62)
* db search optimization- why don't we compile the regex once instead of once
per package.
------+
db.c | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
Index: pacman-lib/lib/libalpm/db.c
diff -u pacman-lib/lib/libalpm/db.c:1.61 pacman-lib/lib/libalpm/db.c:1.62
--- pacman-lib/lib/libalpm/db.c:1.61 Mon Feb 26 03:38:48 2007
+++ pacman-lib/lib/libalpm/db.c Mon Feb 26 18:32:08 2007
@@ -105,21 +105,21 @@
for(i = needles; i; i = i->next) {
char *targ;
+ regex_t reg;
if(i->data == NULL) {
continue;
}
targ = i->data;
_alpm_log(PM_LOG_DEBUG, "searching for target '%s'", targ);
+
+ if(regcomp(®, targ, REG_EXTENDED | REG_NOSUB | REG_ICASE | REG_NEWLINE) != 0) {
+ RET_ERR(PM_ERR_INVALID_REGEX, NULL);
+ }
for(j = _alpm_db_get_pkgcache(db, INFRQ_DESC|INFRQ_DEPENDS); j; j = j->next) {
pmpkg_t *pkg = j->data;
char *matched = NULL;
- regex_t reg;
-
- if(regcomp(®, targ, REG_EXTENDED | REG_NOSUB | REG_ICASE | REG_NEWLINE) != 0) {
- RET_ERR(PM_ERR_INVALID_REGEX, NULL);
- }
/* check name */
if (regexec(®, pkg->name, 0, 0, 0) == 0) {
@@ -130,6 +130,8 @@
matched = pkg->desc;
}
/* check provides */
+ /* TODO: should we be doing this, and should we print something
+ * differently when we do match it since it isn't currently printed? */
else {
for(k = pkg->provides; k; k = k->next) {
if (regexec(®, k->data, 0, 0, 0) == 0) {
@@ -138,13 +140,15 @@
}
}
}
- regfree(®);
if(matched != NULL) {
- _alpm_log(PM_LOG_DEBUG, " search target '%s' matched '%s'", targ, matched);
+ _alpm_log(PM_LOG_DEBUG, " search target '%s' matched '%s'",
+ targ, matched);
ret = alpm_list_add(ret, pkg);
}
}
+
+ regfree(®);
}
return(ret);
More information about the pacman-dev
mailing list