const char *summary;
} command_t;
-#define MAX_ALIAS_SUBSTITUTIONS 3
-
-typedef struct alias {
- const char *name;
- const char *substitutions[MAX_ALIAS_SUBSTITUTIONS];
-} alias_t;
-
-alias_t aliases[] = {
- { "part", { "show", "--format=raw"}},
- { "search-tags", {"search", "--output=tags", "*"}}
-};
-
static int
notmuch_help_command (void *ctx, int argc, char *argv[]);
{
void *local;
command_t *command;
- alias_t *alias;
- unsigned int i, j;
- const char **argv_local;
+ unsigned int i;
talloc_enable_null_tracking ();
return 0;
}
- for (i = 0; i < ARRAY_SIZE (aliases); i++) {
- alias = &aliases[i];
+ for (i = 0; i < ARRAY_SIZE (commands); i++) {
+ command = &commands[i];
- if (strcmp (argv[1], alias->name) == 0)
- {
- int substitutions;
+ if (strcmp (argv[1], command->name) == 0) {
+ int ret;
+ char *talloc_report;
- argv_local = talloc_size (local, sizeof (char *) *
- (argc + MAX_ALIAS_SUBSTITUTIONS - 1));
- if (argv_local == NULL) {
- fprintf (stderr, "Out of memory.\n");
- return 1;
- }
+ ret = (command->function)(local, argc - 1, &argv[1]);
- /* Copy all substution arguments from the alias. */
- argv_local[0] = argv[0];
- for (j = 0; j < MAX_ALIAS_SUBSTITUTIONS; j++) {
- if (alias->substitutions[j] == NULL)
- break;
- argv_local[j+1] = alias->substitutions[j];
- }
- substitutions = j;
+ /* in the future support for this environment variable may
+ * be supplemented or replaced by command line arguments
+ * --leak-report and/or --leak-report-full */
- /* And copy all original arguments (skipping the argument
- * that matched the alias of course. */
- for (j = 2; j < (unsigned) argc; j++) {
- argv_local[substitutions+j-1] = argv[j];
- }
+ talloc_report = getenv ("NOTMUCH_TALLOC_REPORT");
- argc += substitutions - 1;
- argv = (char **) argv_local;
- }
- }
+ /* this relies on the previous call to
+ * talloc_enable_null_tracking */
- for (i = 0; i < ARRAY_SIZE (commands); i++) {
- command = &commands[i];
+ if (talloc_report && strcmp (talloc_report, "") != 0) {
+ FILE *report = fopen (talloc_report, "w");
+ talloc_report_full (NULL, report);
+ }
- if (strcmp (argv[1], command->name) == 0)
- return (command->function) (local, argc - 1, &argv[1]);
+ return ret;
+ }
}
fprintf (stderr, "Error: Unknown command '%s' (see \"notmuch help\")\n",