aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar David Bremner <bremner@debian.org>2012-12-16 16:05:58 -0400
committerGravatar David Bremner <bremner@debian.org>2012-12-22 23:19:43 -0400
commit0919ea4c553bde840a0f37c6076712f345bcac7d (patch)
tree682bf827e375c71712aaf3ab1450103f1d9600ed
parentba4e8565294fc0a197b4c08082ad912c31888008 (diff)
notmuch-restore: allocate a temporary talloc context for each line parsed.
This lets the high level code in notmuch restore be ignorant about what the lower level code is doing as far as allocating memory.
-rw-r--r--notmuch-restore.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/notmuch-restore.c b/notmuch-restore.c
index ac913754..9ed9b515 100644
--- a/notmuch-restore.c
+++ b/notmuch-restore.c
@@ -125,6 +125,7 @@ notmuch_restore_command (unused (void *ctx), int argc, char *argv[])
char *input_file_name = NULL;
FILE *input = stdin;
char *line = NULL;
+ void *line_ctx = NULL;
size_t line_size;
ssize_t line_len;
@@ -208,10 +209,14 @@ notmuch_restore_command (unused (void *ctx), int argc, char *argv[])
do {
char *query_string;
+ if (line_ctx != NULL)
+ talloc_free (line_ctx);
+
+ line_ctx = talloc_new (ctx);
if (input_format == DUMP_FORMAT_SUP) {
- ret = parse_sup_line (ctx, line, &query_string, tag_ops);
+ ret = parse_sup_line (line_ctx, line, &query_string, tag_ops);
} else {
- ret = parse_tag_line (ctx, line, TAG_FLAG_BE_GENEROUS,
+ ret = parse_tag_line (line_ctx, line, TAG_FLAG_BE_GENEROUS,
&query_string, tag_ops);
if (ret == 0) {
@@ -237,13 +242,16 @@ notmuch_restore_command (unused (void *ctx), int argc, char *argv[])
if (ret < 0)
break;
- ret = tag_message (ctx, notmuch, query_string,
+ ret = tag_message (line_ctx, notmuch, query_string,
tag_ops, flags);
if (ret)
break;
} while ((line_len = getline (&line, &line_size, input)) != -1);
+ if (line_ctx != NULL)
+ talloc_free (line_ctx);
+
if (input_format == DUMP_FORMAT_SUP)
regfree (&regex);