commit - 3ddcebf32f6d027df226fe4700090274c9a694e0
commit + 22220781541b833f3c7800592a6a4ed37dd18e1b
blob - 93faeeb219249b4fde17bf62606c38ba68b152a6
blob + fe7db47044990c77ff6e4ceb6916c33f4af8d336
--- lib/commit_graph.c
+++ lib/commit_graph.c
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)
(*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 {
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);