diff options
Diffstat (limited to 'lib/libalpm')
| -rw-r--r-- | lib/libalpm/deps.c | 23 | ||||
| -rw-r--r-- | lib/libalpm/deps.h | 3 | 
2 files changed, 18 insertions, 8 deletions
| diff --git a/lib/libalpm/deps.c b/lib/libalpm/deps.c index e37eb02e..2ed9d30a 100644 --- a/lib/libalpm/deps.c +++ b/lib/libalpm/deps.c @@ -322,15 +322,20 @@ static int dep_vercmp(const char *version1, pmdepmod_t mod,  int _alpm_depcmp(pmpkg_t *pkg, pmdepend_t *dep)  {  	alpm_list_t *i; -	const char *pkgname = alpm_pkg_get_name(pkg); -	const char *pkgversion = alpm_pkg_get_version(pkg); +	const char *pkgname = pkg->name; +	const char *pkgversion = pkg->version;  	int satisfy = 0;  	/* check (pkg->name, pkg->version) */ -	satisfy = (strcmp(pkgname, dep->name) == 0 -			&& dep_vercmp(pkgversion, dep->mod, dep->version)); -	if(satisfy) { -		return(satisfy); +	if(pkg->name_hash && dep->name_hash +			&& pkg->name_hash != dep->name_hash) { +		/* skip more expensive checks */ +	} else { +		satisfy = (strcmp(pkgname, dep->name) == 0 +				&& dep_vercmp(pkgversion, dep->mod, dep->version)); +		if(satisfy) { +			return(satisfy); +		}  	}  	/* check provisions, format : "name=version" */ @@ -380,7 +385,8 @@ pmdepend_t *_alpm_splitdep(const char *depstring)  		depend->mod = PM_DEP_MOD_LE;  		*ptr = '\0';  		ptr += 2; -	} else if((ptr = strstr(newstr, "="))) { /* Note: we must do =,<,> checks after <=, >= checks */ +	} else if((ptr = strstr(newstr, "="))) { +		/* Note: we must do =,<,> checks after <=, >= checks */  		depend->mod = PM_DEP_MOD_EQ;  		*ptr = '\0';  		ptr += 1; @@ -396,6 +402,7 @@ pmdepend_t *_alpm_splitdep(const char *depstring)  		/* no version specified - copy the name and return it */  		depend->mod = PM_DEP_MOD_ANY;  		STRDUP(depend->name, newstr, RET_ERR(PM_ERR_MEMORY, NULL)); +		depend->name_hash = _alpm_hash_sdbm(depend->name);  		depend->version = NULL;  		free(newstr);  		return(depend); @@ -404,6 +411,7 @@ pmdepend_t *_alpm_splitdep(const char *depstring)  	/* if we get here, we have a version comparator, copy the right parts  	 * to the right places */  	STRDUP(depend->name, newstr, RET_ERR(PM_ERR_MEMORY, NULL)); +	depend->name_hash = _alpm_hash_sdbm(depend->name);  	STRDUP(depend->version, ptr, RET_ERR(PM_ERR_MEMORY, NULL));  	free(newstr); @@ -416,6 +424,7 @@ pmdepend_t *_alpm_dep_dup(const pmdepend_t *dep)  	CALLOC(newdep, 1, sizeof(pmdepend_t), RET_ERR(PM_ERR_MEMORY, NULL));  	STRDUP(newdep->name, dep->name, RET_ERR(PM_ERR_MEMORY, NULL)); +	newdep->name_hash = dep->name_hash;  	STRDUP(newdep->version, dep->version, RET_ERR(PM_ERR_MEMORY, NULL));  	newdep->mod = dep->mod; diff --git a/lib/libalpm/deps.h b/lib/libalpm/deps.h index 6fa763e1..b720b364 100644 --- a/lib/libalpm/deps.h +++ b/lib/libalpm/deps.h @@ -29,9 +29,10 @@  /* Dependency */  struct __pmdepend_t { -	pmdepmod_t mod;  	char *name;  	char *version; +	long name_hash; +	pmdepmod_t mod;  };  /* Missing dependency */ | 
