notmuch: Add a talloc context argument to each top-level command function.
authorCarl Worth <cworth@cworth.org>
Sat, 31 Oct 2009 23:40:47 +0000 (16:40 -0700)
committerCarl Worth <cworth@cworth.org>
Sat, 31 Oct 2009 23:40:47 +0000 (16:40 -0700)
I had noticed several times earlier that having a talloc context
passed in would make things more convenient. I'm not exercising
that convenience yet, but the context is there now, (and there's
one fewer item on our TODO list).

TODO
notmuch.c

diff --git a/TODO b/TODO
index ac4e1d1826ad8c5a25b50b519999c1a1323ed121..462dfa25a290d0bda4bc9379032511fb66956b2d 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,6 +1,3 @@
-Add a talloc context as the first argument to each command in
-notmuch.c.
-
 Write a notmuch man page.
 
 Compile and install a libnotmuch library.
index 4779a96141a483fc2a5c4d98c6c44ec216885933..fe4efa5991b8c3d4a009c7f71f9a942c3f4cbfbe 100644 (file)
--- a/notmuch.c
+++ b/notmuch.c
@@ -60,7 +60,7 @@
 
 #define ARRAY_SIZE(arr) (sizeof (arr) / sizeof (arr[0]))
 
-typedef int (*command_function_t) (int argc, char *argv[]);
+typedef int (*command_function_t) (void *ctx, int argc, char *argv[]);
 
 typedef struct command {
     const char *name;
@@ -471,7 +471,7 @@ count_files (const char *path, int *count)
 }
 
 static int
-setup_command (unused (int argc), unused (char *argv[]))
+setup_command (unused (void *ctx), unused (int argc), unused (char *argv[]))
 {
     notmuch_database_t *notmuch = NULL;
     char *default_path, *mail_directory = NULL;
@@ -629,7 +629,7 @@ tag_inbox_and_unread (notmuch_message_t *message)
 }
 
 static int
-new_command (unused (int argc), unused (char *argv[]))
+new_command (unused (void *ctx), unused (int argc), unused (char *argv[]))
 {
     notmuch_database_t *notmuch;
     const char *mail_directory;
@@ -807,9 +807,9 @@ _format_relative_date (void *ctx, time_t then)
 #undef DAY
 
 static int
-search_command (int argc, char *argv[])
+search_command (void *ctx, int argc, char *argv[])
 {
-    void *local = talloc_new (NULL);
+    void *local = talloc_new (ctx);
     notmuch_database_t *notmuch = NULL;
     notmuch_query_t *query;
     notmuch_threads_t *threads;
@@ -897,9 +897,9 @@ _get_one_line_summary (void *ctx, notmuch_message_t *message)
 }
 
 static int
-show_command (unused (int argc), unused (char *argv[]))
+show_command (void *ctx, unused (int argc), unused (char *argv[]))
 {
-    void *local = talloc_new (NULL);
+    void *local = talloc_new (ctx);
     char *query_string;
     notmuch_database_t *notmuch = NULL;
     notmuch_query_t *query = NULL;
@@ -997,7 +997,7 @@ show_command (unused (int argc), unused (char *argv[]))
 }
 
 static int
-tag_command (unused (int argc), unused (char *argv[]))
+tag_command (void *ctx, unused (int argc), unused (char *argv[]))
 {
     void *local;
     int *add_tags, *remove_tags;
@@ -1011,7 +1011,7 @@ tag_command (unused (int argc), unused (char *argv[]))
     int ret = 0;
     int i;
 
-    local = talloc_new (NULL);
+    local = talloc_new (ctx);
     if (local == NULL) {
        ret = 1;
        goto DONE;
@@ -1102,7 +1102,7 @@ tag_command (unused (int argc), unused (char *argv[]))
 }
 
 static int
-dump_command (int argc, char *argv[])
+dump_command (unused (void *ctx), int argc, char *argv[])
 {
     FILE *output = NULL;
     notmuch_database_t *notmuch = NULL;
@@ -1178,7 +1178,7 @@ dump_command (int argc, char *argv[])
 }
 
 static int
-restore_command (int argc, char *argv[])
+restore_command (unused (void *ctx), int argc, char *argv[])
 {
     FILE *input = NULL;
     notmuch_database_t *notmuch = NULL;
@@ -1287,7 +1287,7 @@ restore_command (int argc, char *argv[])
 }
 
 static int
-help_command (int argc, char *argv[]);
+help_command (void *ctx, int argc, char *argv[]);
 
 command_t commands[] = {
     { "setup", setup_command,
@@ -1404,7 +1404,7 @@ usage (void)
 }
 
 static int
-help_command (int argc, char *argv[])
+help_command (unused (void *ctx), int argc, char *argv[])
 {
     command_t *command;
     unsigned int i;
@@ -1435,17 +1435,18 @@ help_command (int argc, char *argv[])
 int
 main (int argc, char *argv[])
 {
+    void *local = talloc_new (NULL);
     command_t *command;
     unsigned int i;
 
     if (argc == 1)
-       return setup_command (0, NULL);
+       return setup_command (local, 0, NULL);
 
     for (i = 0; i < ARRAY_SIZE (commands); i++) {
        command = &commands[i];
 
        if (strcmp (argv[1], command->name) == 0)
-           return (command->function) (argc - 2, &argv[2]);
+           return (command->function) (local, argc - 2, &argv[2]);
     }
 
     /* Don't complain about "help" being an unknown command when we're
@@ -1453,5 +1454,7 @@ main (int argc, char *argv[])
     fprintf (stderr, "Error: Unknown command '%s' (see \"notmuch help\")\n",
             argv[1]);
 
+    talloc_free (local);
+
     return 1;
 }