pkg: provide error return codes for pkg_traverse() and pkg_verify_graph().
parent
601341fb8f
commit
4f50dad147
34
pkg.c
34
pkg.c
|
@ -431,13 +431,13 @@ pkg_verify_dependency(pkg_dependency_t *pkgdep, unsigned int flags, unsigned int
|
||||||
* verify the graph dependency nodes are satisfiable by walking the tree using
|
* verify the graph dependency nodes are satisfiable by walking the tree using
|
||||||
* pkg_traverse().
|
* pkg_traverse().
|
||||||
*/
|
*/
|
||||||
void
|
unsigned int
|
||||||
pkg_verify_graph(pkg_t *root, int depth, unsigned int flags)
|
pkg_verify_graph(pkg_t *root, int depth, unsigned int flags)
|
||||||
{
|
{
|
||||||
pkg_traverse(root, NULL, NULL, depth, flags);
|
return pkg_traverse(root, NULL, NULL, depth, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
unsigned int
|
||||||
pkg_report_graph_error(pkg_t *pkg, pkg_dependency_t *node, unsigned int eflags)
|
pkg_report_graph_error(pkg_t *pkg, pkg_dependency_t *node, unsigned int eflags)
|
||||||
{
|
{
|
||||||
if (eflags & PKG_ERRF_PACKAGE_NOT_FOUND)
|
if (eflags & PKG_ERRF_PACKAGE_NOT_FOUND)
|
||||||
|
@ -460,17 +460,17 @@ pkg_report_graph_error(pkg_t *pkg, pkg_dependency_t *node, unsigned int eflags)
|
||||||
if (pkg != NULL)
|
if (pkg != NULL)
|
||||||
pkg_free(pkg);
|
pkg_free(pkg);
|
||||||
|
|
||||||
exit(EXIT_FAILURE);
|
return eflags;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline unsigned int
|
||||||
pkg_walk_list(pkg_dependency_t *deplist,
|
pkg_walk_list(pkg_dependency_t *deplist,
|
||||||
void (*pkg_traverse_func)(pkg_t *package, void *data),
|
void (*pkg_traverse_func)(pkg_t *package, void *data),
|
||||||
void *data,
|
void *data,
|
||||||
int depth,
|
int depth,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
unsigned int eflags;
|
unsigned int eflags = PKG_ERRF_OK;
|
||||||
pkg_dependency_t *node;
|
pkg_dependency_t *node;
|
||||||
|
|
||||||
foreach_list_entry(deplist, node)
|
foreach_list_entry(deplist, node)
|
||||||
|
@ -488,6 +488,8 @@ pkg_walk_list(pkg_dependency_t *deplist,
|
||||||
|
|
||||||
pkg_free(pkgdep);
|
pkg_free(pkgdep);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return eflags;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -495,21 +497,31 @@ pkg_walk_list(pkg_dependency_t *deplist,
|
||||||
*
|
*
|
||||||
* walk the dependency graph up to maxdepth levels. -1 means infinite recursion.
|
* walk the dependency graph up to maxdepth levels. -1 means infinite recursion.
|
||||||
*/
|
*/
|
||||||
void
|
unsigned int
|
||||||
pkg_traverse(pkg_t *root,
|
pkg_traverse(pkg_t *root,
|
||||||
void (*pkg_traverse_func)(pkg_t *package, void *data),
|
void (*pkg_traverse_func)(pkg_t *package, void *data),
|
||||||
void *data,
|
void *data,
|
||||||
int maxdepth,
|
int maxdepth,
|
||||||
unsigned int flags)
|
unsigned int flags)
|
||||||
{
|
{
|
||||||
if (maxdepth == 0)
|
unsigned int eflags = PKG_ERRF_OK;
|
||||||
return;
|
|
||||||
|
|
||||||
pkg_walk_list(root->requires, pkg_traverse_func, data, maxdepth, flags);
|
if (maxdepth == 0)
|
||||||
|
return eflags;
|
||||||
|
|
||||||
|
eflags = pkg_walk_list(root->requires, pkg_traverse_func, data, maxdepth, flags);
|
||||||
|
if (eflags != PKG_ERRF_OK)
|
||||||
|
return eflags;
|
||||||
|
|
||||||
if (flags & PKGF_SEARCH_PRIVATE)
|
if (flags & PKGF_SEARCH_PRIVATE)
|
||||||
pkg_walk_list(root->requires_private, pkg_traverse_func, data, maxdepth, flags);
|
{
|
||||||
|
eflags = pkg_walk_list(root->requires_private, pkg_traverse_func, data, maxdepth, flags);
|
||||||
|
if (eflags != PKG_ERRF_OK)
|
||||||
|
return eflags;
|
||||||
|
}
|
||||||
|
|
||||||
if (pkg_traverse_func != NULL)
|
if (pkg_traverse_func != NULL)
|
||||||
pkg_traverse_func(root, data);
|
pkg_traverse_func(root, data);
|
||||||
|
|
||||||
|
return eflags;
|
||||||
}
|
}
|
||||||
|
|
4
pkg.h
4
pkg.h
|
@ -137,8 +137,8 @@ struct pkg_ {
|
||||||
/* pkg.c */
|
/* pkg.c */
|
||||||
void pkg_free(pkg_t *pkg);
|
void pkg_free(pkg_t *pkg);
|
||||||
pkg_t *pkg_find(const char *name, unsigned int flags);
|
pkg_t *pkg_find(const char *name, unsigned int flags);
|
||||||
void pkg_traverse(pkg_t *root, void (*pkg_traverse_func)(pkg_t *package, void *data), void *data, int maxdepth, unsigned int flags);
|
unsigned int pkg_traverse(pkg_t *root, void (*pkg_traverse_func)(pkg_t *package, void *data), void *data, int maxdepth, unsigned int flags);
|
||||||
void pkg_verify_graph(pkg_t *root, int depth, unsigned int flags);
|
unsigned int pkg_verify_graph(pkg_t *root, int depth, unsigned int flags);
|
||||||
int pkg_compare_version(const char *a, const char *b);
|
int pkg_compare_version(const char *a, const char *b);
|
||||||
pkg_t *pkg_verify_dependency(pkg_dependency_t *pkgdep, unsigned int flags, unsigned int *eflags);
|
pkg_t *pkg_verify_dependency(pkg_dependency_t *pkgdep, unsigned int flags, unsigned int *eflags);
|
||||||
const char *pkg_get_comparator(pkg_dependency_t *pkgdep);
|
const char *pkg_get_comparator(pkg_dependency_t *pkgdep);
|
||||||
|
|
Loading…
Reference in New Issue