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.
This commit is contained in:
Austin Clements 2012-01-29 00:50:10 -05:00 committed by David Bremner
parent 6c0adab23e
commit c32116d048

View file

@ -582,15 +582,15 @@ notmuch_database_t *
notmuch_database_open (const char *path, notmuch_database_open (const char *path,
notmuch_database_mode_t mode) notmuch_database_mode_t mode)
{ {
void *local = talloc_new (NULL);
notmuch_database_t *notmuch = NULL; notmuch_database_t *notmuch = NULL;
char *notmuch_path = NULL, *xapian_path = NULL; char *notmuch_path, *xapian_path;
struct stat st; struct stat st;
int err; int err;
unsigned int i, version; unsigned int i, version;
static int initialized = 0; static int initialized = 0;
if (asprintf (&notmuch_path, "%s/%s", path, ".notmuch") == -1) { if (! (notmuch_path = talloc_asprintf (local, "%s/%s", path, ".notmuch"))) {
notmuch_path = NULL;
fprintf (stderr, "Out of memory\n"); fprintf (stderr, "Out of memory\n");
goto DONE; goto DONE;
} }
@ -602,8 +602,7 @@ notmuch_database_open (const char *path,
goto DONE; goto DONE;
} }
if (asprintf (&xapian_path, "%s/%s", notmuch_path, "xapian") == -1) { if (! (xapian_path = talloc_asprintf (local, "%s/%s", notmuch_path, "xapian"))) {
xapian_path = NULL;
fprintf (stderr, "Out of memory\n"); fprintf (stderr, "Out of memory\n");
goto DONE; goto DONE;
} }
@ -708,10 +707,7 @@ notmuch_database_open (const char *path,
} }
DONE: DONE:
if (notmuch_path) talloc_free (local);
free (notmuch_path);
if (xapian_path)
free (xapian_path);
return notmuch; return notmuch;
} }