mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-02 22:46:30 +02:00
wks: New option --status-fd for gpg-wks-client.
* tools/wks-util.c: Include status.h. (statusfp): New global var. (wks_set_status_fd): New func. (wks_write_status): New func. * tools/gpg-wks-client.c: Include status.h. (oStatusFD): New constant. (opts): New option --status-fd. (parse_arguments): Handle that option. (main): Return STATUS_SUCCESS or STATUS_FAILURE. -- This option is useful in case gpg-wks-client is spawed using a double fork approach which does not allow to return the exit code. Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
parent
e7429b1ced
commit
4a04277ad1
3 changed files with 76 additions and 1 deletions
|
@ -23,6 +23,7 @@
|
|||
#include <string.h>
|
||||
|
||||
#include "util.h"
|
||||
#include "status.h"
|
||||
#include "ccparray.h"
|
||||
#include "exectool.h"
|
||||
#include "mbox-util.h"
|
||||
|
@ -30,6 +31,65 @@
|
|||
#include "send-mail.h"
|
||||
#include "gpg-wks.h"
|
||||
|
||||
/* The stream to output the status information. Output is disabled if
|
||||
this is NULL. */
|
||||
static estream_t statusfp;
|
||||
|
||||
|
||||
|
||||
/* Set the status FD. */
|
||||
void
|
||||
wks_set_status_fd (int fd)
|
||||
{
|
||||
static int last_fd = -1;
|
||||
|
||||
if (fd != -1 && last_fd == fd)
|
||||
return;
|
||||
|
||||
if (statusfp && statusfp != es_stdout && statusfp != es_stderr)
|
||||
es_fclose (statusfp);
|
||||
statusfp = NULL;
|
||||
if (fd == -1)
|
||||
return;
|
||||
|
||||
if (fd == 1)
|
||||
statusfp = es_stdout;
|
||||
else if (fd == 2)
|
||||
statusfp = es_stderr;
|
||||
else
|
||||
statusfp = es_fdopen (fd, "w");
|
||||
if (!statusfp)
|
||||
{
|
||||
log_fatal ("can't open fd %d for status output: %s\n",
|
||||
fd, gpg_strerror (gpg_error_from_syserror ()));
|
||||
}
|
||||
last_fd = fd;
|
||||
}
|
||||
|
||||
|
||||
/* Write a status line with code NO followed by the outout of the
|
||||
* printf style FORMAT. The caller needs to make sure that LFs and
|
||||
* CRs are not printed. */
|
||||
void
|
||||
wks_write_status (int no, const char *format, ...)
|
||||
{
|
||||
va_list arg_ptr;
|
||||
|
||||
if (!statusfp)
|
||||
return; /* Not enabled. */
|
||||
|
||||
es_fputs ("[GNUPG:] ", statusfp);
|
||||
es_fputs (get_status_string (no), statusfp);
|
||||
if (format)
|
||||
{
|
||||
es_putc (' ', statusfp);
|
||||
va_start (arg_ptr, format);
|
||||
es_vfprintf (statusfp, format, arg_ptr);
|
||||
va_end (arg_ptr);
|
||||
}
|
||||
es_putc ('\n', statusfp);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Helper for wks_list_key. */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue