commit 22220781541b833f3c7800592a6a4ed37dd18e1b from: Stefan Sperling date: Sat Jan 04 18:36:07 2020 UTC simplify error handling in got_commit_graph_open() commit - 3ddcebf32f6d027df226fe4700090274c9a694e0 commit + 22220781541b833f3c7800592a6a4ed37dd18e1b blob - 93faeeb219249b4fde17bf62606c38ba68b152a6 blob + fe7db47044990c77ff6e4ceb6916c33f4af8d336 --- lib/commit_graph.c +++ lib/commit_graph.c @@ -347,7 +347,7 @@ const struct got_error * got_commit_graph_open(struct got_commit_graph **graph, const char *path, int first_parent_traversal) { - const struct got_error *err; + const struct got_error *err = NULL; *graph = calloc(1, sizeof(**graph)); if (*graph == NULL) @@ -356,35 +356,30 @@ got_commit_graph_open(struct got_commit_graph **graph, (*graph)->path = strdup(path); if ((*graph)->path == NULL) { err = got_error_from_errno("strdup"); - free(*graph); - *graph = NULL; - return err; + goto done; } (*graph)->node_ids = got_object_idset_alloc(); if ((*graph)->node_ids == NULL) { err = got_error_from_errno("got_object_idset_alloc"); - free((*graph)->path); - free(*graph); - *graph = NULL; - return NULL; + goto done; } (*graph)->open_branches = got_object_idset_alloc(); if ((*graph)->open_branches == NULL) { err = got_error_from_errno("got_object_idset_alloc"); - got_object_idset_free((*graph)->node_ids); - free((*graph)->path); - free(*graph); - *graph = NULL; - return err; + goto done; } TAILQ_INIT(&(*graph)->iter_list); if (first_parent_traversal) (*graph)->flags |= GOT_COMMIT_GRAPH_FIRST_PARENT_TRAVERSAL; - - return NULL; +done: + if (err) { + got_commit_graph_close(*graph); + *graph = NULL; + } + return err; } struct add_branch_tip_arg { @@ -505,9 +500,11 @@ free_node_iter(struct got_object_id *id, void *data, v void got_commit_graph_close(struct got_commit_graph *graph) { - got_object_idset_free(graph->open_branches); + if (graph->open_branches) + got_object_idset_free(graph->open_branches); got_object_idset_for_each(graph->node_ids, free_node_iter, NULL); - got_object_idset_free(graph->node_ids); + if (graph->node_ids) + got_object_idset_free(graph->node_ids); free(graph->tips); free(graph->path); free(graph);