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;hp=ba4e8565294fc0a197b4c08082ad912c31888008 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);