From: David Bremner Date: Sun, 16 Dec 2012 20:05:58 +0000 (-0400) Subject: notmuch-restore: allocate a temporary talloc context for each line parsed. X-Git-Tag: 0.15_rc1~50 X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=commitdiff_plain;h=0919ea4c553bde840a0f37c6076712f345bcac7d 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. --- 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 (®ex);