aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/database.cc
diff options
context:
space:
mode:
authorGravatar Austin Clements <amdragon@MIT.EDU>2012-01-29 00:50:10 -0500
committerGravatar David Bremner <bremner@debian.org>2012-02-03 21:15:45 -0400
commitc32116d04807eec475d7e19bb6723c35bc399059 (patch)
treeebec688ac72e37141f917bac70df5515d78ba021 /lib/database.cc
parent6c0adab23eadb81bb1254f4b82175902df11bb3f (diff)
lib: Use talloc to simplify cleanup in notmuch_database_open
Previously, we manually "free"d various pointers in notmuch_database_open. Use a local talloc context instead to simplify cleanup and eliminate various NULL pointer initializations and conditionals.
Diffstat (limited to 'lib/database.cc')
-rw-r--r--lib/database.cc14
1 files changed, 5 insertions, 9 deletions
diff --git a/lib/database.cc b/lib/database.cc
index 94022d7c..c928d02b 100644
--- a/lib/database.cc
+++ b/lib/database.cc
@@ -582,15 +582,15 @@ notmuch_database_t *
notmuch_database_open (const char *path,
notmuch_database_mode_t mode)
{
+ void *local = talloc_new (NULL);
notmuch_database_t *notmuch = NULL;
- char *notmuch_path = NULL, *xapian_path = NULL;
+ char *notmuch_path, *xapian_path;
struct stat st;
int err;
unsigned int i, version;
static int initialized = 0;
- if (asprintf (&notmuch_path, "%s/%s", path, ".notmuch") == -1) {
- notmuch_path = NULL;
+ if (! (notmuch_path = talloc_asprintf (local, "%s/%s", path, ".notmuch"))) {
fprintf (stderr, "Out of memory\n");
goto DONE;
}
@@ -602,8 +602,7 @@ notmuch_database_open (const char *path,
goto DONE;
}
- if (asprintf (&xapian_path, "%s/%s", notmuch_path, "xapian") == -1) {
- xapian_path = NULL;
+ if (! (xapian_path = talloc_asprintf (local, "%s/%s", notmuch_path, "xapian"))) {
fprintf (stderr, "Out of memory\n");
goto DONE;
}
@@ -708,10 +707,7 @@ notmuch_database_open (const char *path,
}
DONE:
- if (notmuch_path)
- free (notmuch_path);
- if (xapian_path)
- free (xapian_path);
+ talloc_free (local);
return notmuch;
}