From 54b577f6c799d6b0118bff5310014e3887ed6abf Mon Sep 17 00:00:00 2001 From: Aymeric Wibo Date: Mon, 6 Jan 2025 22:38:30 +0100 Subject: [PATCH] bsys: Output empty dependency tree if bsys doesn't have `dep_tree` function --- src/bsys.c | 20 ++++++++++---------- src/dep_tree.c | 4 ++++ 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/bsys.c b/src/bsys.c index f7671bb2..0833a2cc 100644 --- a/src/bsys.c +++ b/src/bsys.c @@ -27,8 +27,10 @@ bsys_t const* bsys_identify(void) { } int bsys_dep_tree(bsys_t const* bsys, int argc, char* argv[]) { + dep_node_t* tree = NULL; + if (bsys->dep_tree == NULL) { - return 0; + goto no_tree; } // Parse the arguments as a list of hashes. @@ -43,23 +45,21 @@ int bsys_dep_tree(bsys_t const* bsys, int argc, char* argv[]) { // Create dependency tree. bool circular; - dep_node_t* const tree = bsys->dep_tree(argc, hashes, &circular); + tree = bsys->dep_tree(argc, hashes, &circular); free(hashes); - if (tree == NULL) { - if (circular) { - printf(BOB_DEPS_CIRCULAR); - return 0; - } - - return -1; + if (tree == NULL && circular) { + printf(BOB_DEPS_CIRCULAR); + return 0; } assert(!circular); // Serialize and output it. - char* const STR_CLEANUP serialized = dep_node_serialize(tree); +no_tree:; + + char* const STR_CLEANUP serialized = tree == NULL ? strdup("") : dep_node_serialize(tree); printf(DEP_TAG_START "%s" DEP_TAG_END, serialized); deps_tree_free(tree); diff --git a/src/dep_tree.c b/src/dep_tree.c index 08248d02..a8dfbbd2 100644 --- a/src/dep_tree.c +++ b/src/dep_tree.c @@ -239,6 +239,10 @@ void deps_node_free(dep_node_t* node) { } void deps_tree_free(dep_node_t* tree) { + if (tree == NULL) { + return; + } + deps_node_free(tree); free(tree); }