pkg: rework pkg_verify_dependency() to treat dependencies as bytecode
parent
ac2f99f6af
commit
ef1f1a3a14
87
pkg.c
87
pkg.c
|
@ -613,6 +613,63 @@ static pkg_comparator_name_t pkg_comparator_names[PKG_CMP_SIZE + 1] = {
|
||||||
{"???", PKG_CMP_SIZE},
|
{"???", PKG_CMP_SIZE},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static bool pkg_comparator_lt(pkg_t *pkg, pkg_dependency_t *pkgdep)
|
||||||
|
{
|
||||||
|
return (pkg_compare_version(pkg->version, pkgdep->version) < 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool pkg_comparator_gt(pkg_t *pkg, pkg_dependency_t *pkgdep)
|
||||||
|
{
|
||||||
|
return (pkg_compare_version(pkg->version, pkgdep->version) > 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool pkg_comparator_lte(pkg_t *pkg, pkg_dependency_t *pkgdep)
|
||||||
|
{
|
||||||
|
return (pkg_compare_version(pkg->version, pkgdep->version) <= 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool pkg_comparator_gte(pkg_t *pkg, pkg_dependency_t *pkgdep)
|
||||||
|
{
|
||||||
|
return (pkg_compare_version(pkg->version, pkgdep->version) >= 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool pkg_comparator_eq(pkg_t *pkg, pkg_dependency_t *pkgdep)
|
||||||
|
{
|
||||||
|
return (pkg_compare_version(pkg->version, pkgdep->version) == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool pkg_comparator_ne(pkg_t *pkg, pkg_dependency_t *pkgdep)
|
||||||
|
{
|
||||||
|
return (pkg_compare_version(pkg->version, pkgdep->version) != 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool pkg_comparator_any(pkg_t *pkg, pkg_dependency_t *pkgdep)
|
||||||
|
{
|
||||||
|
(void) pkg;
|
||||||
|
(void) pkgdep;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool pkg_comparator_unimplemented(pkg_t *pkg, pkg_dependency_t *pkgdep)
|
||||||
|
{
|
||||||
|
(void) pkg;
|
||||||
|
(void) pkgdep;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static pkg_vercmp_res_func_t pkg_comparator_impls[PKG_CMP_SIZE + 1] = {
|
||||||
|
[PKG_ANY] = pkg_comparator_any,
|
||||||
|
[PKG_LESS_THAN] = pkg_comparator_lt,
|
||||||
|
[PKG_GREATER_THAN] = pkg_comparator_gt,
|
||||||
|
[PKG_LESS_THAN_EQUAL] = pkg_comparator_lte,
|
||||||
|
[PKG_GREATER_THAN_EQUAL] = pkg_comparator_gte,
|
||||||
|
[PKG_EQUAL] = pkg_comparator_eq,
|
||||||
|
[PKG_NOT_EQUAL] = pkg_comparator_ne,
|
||||||
|
[PKG_CMP_SIZE] = pkg_comparator_unimplemented,
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* pkg_get_comparator(pkgdep)
|
* pkg_get_comparator(pkgdep)
|
||||||
*
|
*
|
||||||
|
@ -662,36 +719,8 @@ pkg_verify_dependency(pkg_dependency_t *pkgdep, unsigned int flags, unsigned int
|
||||||
if (pkg->id == NULL)
|
if (pkg->id == NULL)
|
||||||
pkg->id = strdup(pkgdep->package);
|
pkg->id = strdup(pkgdep->package);
|
||||||
|
|
||||||
switch(pkgdep->compare)
|
if (pkg_comparator_impls[pkgdep->compare](pkg, pkgdep) == true)
|
||||||
{
|
|
||||||
case PKG_LESS_THAN:
|
|
||||||
if (pkg_compare_version(pkg->version, pkgdep->version) < 0)
|
|
||||||
return pkg;
|
return pkg;
|
||||||
break;
|
|
||||||
case PKG_GREATER_THAN:
|
|
||||||
if (pkg_compare_version(pkg->version, pkgdep->version) > 0)
|
|
||||||
return pkg;
|
|
||||||
break;
|
|
||||||
case PKG_LESS_THAN_EQUAL:
|
|
||||||
if (pkg_compare_version(pkg->version, pkgdep->version) <= 0)
|
|
||||||
return pkg;
|
|
||||||
break;
|
|
||||||
case PKG_GREATER_THAN_EQUAL:
|
|
||||||
if (pkg_compare_version(pkg->version, pkgdep->version) >= 0)
|
|
||||||
return pkg;
|
|
||||||
break;
|
|
||||||
case PKG_EQUAL:
|
|
||||||
if (pkg_compare_version(pkg->version, pkgdep->version) == 0)
|
|
||||||
return pkg;
|
|
||||||
break;
|
|
||||||
case PKG_NOT_EQUAL:
|
|
||||||
if (pkg_compare_version(pkg->version, pkgdep->version) != 0)
|
|
||||||
return pkg;
|
|
||||||
break;
|
|
||||||
case PKG_ANY:
|
|
||||||
default:
|
|
||||||
return pkg;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (eflags != NULL)
|
if (eflags != NULL)
|
||||||
*eflags |= PKG_ERRF_PACKAGE_VER_MISMATCH;
|
*eflags |= PKG_ERRF_PACKAGE_VER_MISMATCH;
|
||||||
|
|
Loading…
Reference in New Issue