mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-12-22 09:24:54 +01:00
cli: add global option --stderr=FILE
With this option all writes to stderr are redirected to the specified FILE (or to stdout on case FILE is '-'). This is immediately useful in emacs interface as some of its exec intefaces do not provide separation of stdout and stderr.
This commit is contained in:
parent
e7ade21d56
commit
8a0e85025a
2 changed files with 33 additions and 0 deletions
|
@ -54,6 +54,7 @@ typedef GMimeCipherContext notmuch_crypto_context_t;
|
|||
#include <sys/stat.h>
|
||||
#include <sys/time.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
#include <dirent.h>
|
||||
#include <errno.h>
|
||||
#include <signal.h>
|
||||
|
|
32
notmuch.c
32
notmuch.c
|
@ -251,6 +251,32 @@ notmuch_command (notmuch_config_t *config,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
redirect_stderr (const char * stderr_file)
|
||||
{
|
||||
if (strcmp (stderr_file, "-") == 0) {
|
||||
if (dup2 (STDOUT_FILENO, STDERR_FILENO) < 0) {
|
||||
perror ("dup2");
|
||||
return 1;
|
||||
}
|
||||
} else {
|
||||
int fd = open (stderr_file, O_WRONLY|O_CREAT|O_TRUNC, 0666);
|
||||
if (fd < 0) {
|
||||
fprintf (stderr, "Error: Cannot redirect stderr to '%s': %s\n",
|
||||
stderr_file, strerror (errno));
|
||||
return 1;
|
||||
}
|
||||
if (fd != STDERR_FILENO) {
|
||||
if (dup2 (fd, STDERR_FILENO) < 0) {
|
||||
perror ("dup2");
|
||||
return 1;
|
||||
}
|
||||
close (fd);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
main (int argc, char *argv[])
|
||||
{
|
||||
|
@ -259,6 +285,7 @@ main (int argc, char *argv[])
|
|||
const char *command_name = NULL;
|
||||
command_t *command;
|
||||
char *config_file_name = NULL;
|
||||
char *stderr_file = NULL;
|
||||
notmuch_config_t *config;
|
||||
notmuch_bool_t print_help=FALSE, print_version=FALSE;
|
||||
int opt_index;
|
||||
|
@ -268,6 +295,7 @@ main (int argc, char *argv[])
|
|||
{ NOTMUCH_OPT_BOOLEAN, &print_help, "help", 'h', 0 },
|
||||
{ NOTMUCH_OPT_BOOLEAN, &print_version, "version", 'v', 0 },
|
||||
{ NOTMUCH_OPT_STRING, &config_file_name, "config", 'c', 0 },
|
||||
{ NOTMUCH_OPT_STRING, &stderr_file, "stderr", '\0', 0 },
|
||||
{ 0, 0, 0, 0, 0 }
|
||||
};
|
||||
|
||||
|
@ -287,6 +315,10 @@ main (int argc, char *argv[])
|
|||
return 1;
|
||||
}
|
||||
|
||||
if (stderr_file && redirect_stderr (stderr_file) != 0) {
|
||||
/* error already printed */
|
||||
return 1;
|
||||
}
|
||||
if (print_help)
|
||||
return notmuch_help_command (NULL, argc - 1, &argv[1]);
|
||||
|
||||
|
|
Loading…
Reference in a new issue