From 84ebf8231985ff285f7995cd7ecaceb750a3c78b Mon Sep 17 00:00:00 2001 From: Nagy Gabor Date: Fri, 16 Nov 2007 22:37:57 +0100 Subject: Versioned provisions. This patch introduces versioned provisions in "provision 1.0-1" format. _alpm_db_whatprovides was modified accordingly (added sync500.py), alpm_depcmp was modified accordingly (add043.py passes now; added add044.py and add045.py). Notes: alpm_db_search now uses the whole versioned %PROVIDES% string in its search. debug logging was simplified in alpm_depcmp. Signed-off-by: Nagy Gabor [Xavier: fixed a few typos, duplicate const strings with strdup before modifying them, put some debugging back in alpm_depcmp, minor code cleanups (var/function renaming), added a note in PKGBUILD man page.] Signed-off-by: Chantry Xavier [Dan: made strcmp checks clearer, added a comment] Signed-off-by: Dan McGee --- lib/libalpm/db.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'lib/libalpm/db.c') diff --git a/lib/libalpm/db.c b/lib/libalpm/db.c index 2cff1df3..23b28d27 100644 --- a/lib/libalpm/db.c +++ b/lib/libalpm/db.c @@ -783,6 +783,25 @@ pmdb_t *_alpm_db_register_sync(const char *treename) return(db); } +/* helper function for alpm_list_find and _alpm_db_whatprovides + * + * @return "provision.name" == needle (as string) + */ +int _alpm_prov_cmp(const void *provision, const void *needle) +{ + char *tmpptr; + char *provname = strdup(provision); + int retval = 0; + tmpptr = strchr(provname, ' '); + + if(tmpptr != NULL) { /* provision-version */ + *tmpptr='\0'; + } + retval = strcmp(provname, needle); + free(provname); + return(retval); +} + /* return a alpm_list_t of packages in "db" that provide "package" */ alpm_list_t *_alpm_db_whatprovides(pmdb_t *db, const char *package) @@ -799,7 +818,7 @@ alpm_list_t *_alpm_db_whatprovides(pmdb_t *db, const char *package) for(lp = _alpm_db_get_pkgcache(db); lp; lp = lp->next) { pmpkg_t *info = lp->data; - if(alpm_list_find_str(alpm_pkg_get_provides(info), package)) { + if(alpm_list_find(alpm_pkg_get_provides(info), (const void *)package, _alpm_prov_cmp)) { pkgs = alpm_list_add(pkgs, info); } } -- cgit v1.2.3-24-g4f1b