diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/pacman/deptest.c | 51 | ||||
| -rw-r--r-- | src/pacman/log.c | 13 | 
2 files changed, 35 insertions, 29 deletions
| diff --git a/src/pacman/deptest.c b/src/pacman/deptest.c index a7c913d9..1d505f3b 100644 --- a/src/pacman/deptest.c +++ b/src/pacman/deptest.c @@ -38,35 +38,54 @@  extern config_t *config; +int chk_package(const char *pkgname, pmdepend_t *dep) +{ +	pmpkg_t *pkg; +	pkg = alpm_db_get_pkg(alpm_option_get_localdb(), pkgname); + +	if(!pkg || !alpm_depcmp(pkg, dep)) { +		return(1); +	} +	return(0); +} +  int pacman_deptest(alpm_list_t *targets)  {  	int retval = 0; -	pmdb_t *local; -	pmpkg_t *pkg; -	alpm_list_t *i, *provides; +	alpm_list_t *i;  	if(targets == NULL) {  		return(0);  	} -	local = alpm_option_get_localdb(); -  	for(i = targets; i; i = alpm_list_next(i)) { -		const char *pkgname; -	  -		pkgname = alpm_list_getdata(i); -		/* find this package in the local DB */ -		pkg = alpm_db_get_pkg(local, pkgname); +		int found = 0; +		pmdepend_t *dep; +		const char *target; +		alpm_list_t *j, *provides; + +		target = alpm_list_getdata(i); +		dep = alpm_splitdep(target); -		if(!pkg) { +		if(chk_package(target, dep) == 0) { +			found = 1; +		} else {  			/* not found, can we find anything that provides this in the local DB? */ -			provides = alpm_db_whatprovides(local, pkgname); -			if(!provides) { -				/* nope, must be missing */ -				MSG(NL, _("requires: %s"), pkgname); -				retval = 1; +			provides = alpm_db_whatprovides(alpm_option_get_localdb(), target); +			for(j = provides; j; j = alpm_list_next(j)) { +				const char *provide; +				provide = alpm_list_getdata(j); + +				if(chk_package(provide, dep) == 0) { +					found = 1; +				}  			}  		} + +		if(!found) { +			MSG(NL, _("requires: %s"), target); +			retval = 1; +		}  	}  	return(retval);  } diff --git a/src/pacman/log.c b/src/pacman/log.c index 1b65e28d..9d719912 100644 --- a/src/pacman/log.c +++ b/src/pacman/log.c @@ -184,19 +184,6 @@ int yesno(char *fmt, ...)  	pm_fprintf(stderr, NL, str); \  	if(fgets(response, 32, stdin)) { -		/* trim whitespace and newlines */ -		char *pch = response; -		while(isspace(*pch)) { -			pch++; -		} -		if(pch != response) { -			memmove(response, pch, strlen(pch) + 1); -		} -		pch = response + strlen(response) - 1; -		while(isspace(*pch)) { -			pch--; -		} -		*++pch = 0;  		if(strlen(response) != 0) {  			strtrim(response);  		} | 
