cli: abstract dump file open from the dump command

Also expose the dump function to the rest of notmuch. No functional
changes, except for slight improvement in error handling.
This commit is contained in:
Jani Nikula 2014-03-25 19:48:57 +02:00 committed by David Bremner
parent 2a79d81211
commit 3863755f6d
4 changed files with 43 additions and 30 deletions

View file

@ -1,13 +0,0 @@
#ifndef DUMP_RESTORE_PRIVATE_H
#define DUMP_RESTORE_PRIVATE_H
#include "hex-escape.h"
#include "command-line-arguments.h"
typedef enum dump_formats {
DUMP_FORMAT_AUTO,
DUMP_FORMAT_BATCH_TAG,
DUMP_FORMAT_SUP
} dump_format_t;
#endif

View file

@ -441,5 +441,16 @@ mime_node_child (mime_node_t *parent, int child);
mime_node_t * mime_node_t *
mime_node_seek_dfs (mime_node_t *node, int n); mime_node_seek_dfs (mime_node_t *node, int n);
typedef enum dump_formats {
DUMP_FORMAT_AUTO,
DUMP_FORMAT_BATCH_TAG,
DUMP_FORMAT_SUP
} dump_format_t;
int
notmuch_database_dump (notmuch_database_t *notmuch,
const char *output_file_name,
const char *query_str, dump_format_t output_format);
#include "command-line-arguments.h" #include "command-line-arguments.h"
#endif #endif

View file

@ -19,7 +19,7 @@
*/ */
#include "notmuch-client.h" #include "notmuch-client.h"
#include "dump-restore-private.h" #include "hex-escape.h"
#include "string-util.h" #include "string-util.h"
static int static int
@ -115,11 +115,38 @@ database_dump_file (notmuch_database_t *notmuch, FILE *output,
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }
/* Dump database into output_file_name if it's non-NULL, stdout
* otherwise.
*/
int
notmuch_database_dump (notmuch_database_t *notmuch,
const char *output_file_name,
const char *query_str, dump_format_t output_format)
{
FILE *output = stdout;
int ret;
if (output_file_name) {
output = fopen (output_file_name, "w");
if (output == NULL) {
fprintf (stderr, "Error opening %s for writing: %s\n",
output_file_name, strerror (errno));
return EXIT_FAILURE;
}
}
ret = database_dump_file (notmuch, output, query_str, output_format);
if (output != stdout)
fclose (output);
return ret;
}
int int
notmuch_dump_command (notmuch_config_t *config, int argc, char *argv[]) notmuch_dump_command (notmuch_config_t *config, int argc, char *argv[])
{ {
notmuch_database_t *notmuch; notmuch_database_t *notmuch;
FILE *output = stdout;
const char *query_str = NULL; const char *query_str = NULL;
int ret; int ret;
@ -145,16 +172,6 @@ notmuch_dump_command (notmuch_config_t *config, int argc, char *argv[])
if (opt_index < 0) if (opt_index < 0)
return EXIT_FAILURE; return EXIT_FAILURE;
if (output_file_name) {
output = fopen (output_file_name, "w");
if (output == NULL) {
fprintf (stderr, "Error opening %s for writing: %s\n",
output_file_name, strerror (errno));
return EXIT_FAILURE;
}
}
if (opt_index < argc) { if (opt_index < argc) {
query_str = query_string_from_args (notmuch, argc - opt_index, argv + opt_index); query_str = query_string_from_args (notmuch, argc - opt_index, argv + opt_index);
if (query_str == NULL) { if (query_str == NULL) {
@ -163,10 +180,8 @@ notmuch_dump_command (notmuch_config_t *config, int argc, char *argv[])
} }
} }
ret = database_dump_file (notmuch, output, query_str, output_format); ret = notmuch_database_dump (notmuch, output_file_name, query_str,
output_format);
if (output != stdout)
fclose (output);
notmuch_database_destroy (notmuch); notmuch_database_destroy (notmuch);

View file

@ -19,7 +19,7 @@
*/ */
#include "notmuch-client.h" #include "notmuch-client.h"
#include "dump-restore-private.h" #include "hex-escape.h"
#include "tag-util.h" #include "tag-util.h"
#include "string-util.h" #include "string-util.h"