diff --git a/common/asshelp.h b/common/asshelp.h
index bf1bd1705..c2c87e3c4 100644
--- a/common/asshelp.h
+++ b/common/asshelp.h
@@ -1,104 +1,110 @@
/* asshelp.h - Helper functions for Assuan
* Copyright (C) 2004, 2007 Free Software Foundation, Inc.
*
* This file is part of GnuPG.
*
* This file is free software; you can redistribute it and/or modify
* it under the terms of either
*
* - the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 3 of the License, or (at
* your option) any later version.
*
* or
*
* - the GNU General Public License as published by the Free
* Software Foundation; either version 2 of the License, or (at
* your option) any later version.
*
* or both in parallel, as here.
*
* This file is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see .
*/
#ifndef GNUPG_COMMON_ASSHELP_H
#define GNUPG_COMMON_ASSHELP_H
#include
#include
#include "session-env.h"
#include "util.h"
/*-- asshelp.c --*/
void setup_libassuan_logging (unsigned int *debug_var_address,
int (*log_monitor)(assuan_context_t ctx,
unsigned int cat,
const char *msg));
void set_libassuan_log_cats (unsigned int newcats);
gpg_error_t
send_pinentry_environment (assuan_context_t ctx,
gpg_err_source_t errsource,
const char *opt_lc_ctype,
const char *opt_lc_messages,
session_env_t session_env);
/* This function is used by the call-agent.c modules to fire up a new
agent. */
gpg_error_t
start_new_gpg_agent (assuan_context_t *r_ctx,
gpg_err_source_t errsource,
const char *agent_program,
const char *opt_lc_ctype,
const char *opt_lc_messages,
session_env_t session_env,
int autostart, int verbose, int debug,
gpg_error_t (*status_cb)(ctrl_t, int, ...),
ctrl_t status_cb_arg);
/* This function is used to connect to the dirmngr. On some platforms
the function is able starts a dirmngr process if needed. */
gpg_error_t
start_new_dirmngr (assuan_context_t *r_ctx,
gpg_err_source_t errsource,
const char *dirmngr_program,
int autostart, int verbose, int debug,
gpg_error_t (*status_cb)(ctrl_t, int, ...),
ctrl_t status_cb_arg);
/* Return the version of a server using "GETINFO version". */
gpg_error_t get_assuan_server_version (assuan_context_t ctx,
int mode, char **r_version);
/*-- asshelp2.c --*/
+void set_assuan_context_func (assuan_context_t (*func)(ctrl_t ctrl));
+
/* Helper function to print an assuan status line using a printf
format string. */
+
+gpg_error_t status_printf (ctrl_t ctrl, int no, const char *format,
+ ...) GPGRT_ATTR_PRINTF(3,4);
+
gpg_error_t print_assuan_status (assuan_context_t ctx,
const char *keyword,
const char *format,
...) GPGRT_ATTR_PRINTF(3,4);
gpg_error_t vprint_assuan_status (assuan_context_t ctx,
const char *keyword,
const char *format,
va_list arg_ptr) GPGRT_ATTR_PRINTF(3,0);
gpg_error_t vprint_assuan_status_strings (assuan_context_t ctx,
const char *keyword,
va_list arg_ptr);
gpg_error_t print_assuan_status_strings (assuan_context_t ctx,
const char *keyword,
...) GPGRT_ATTR_SENTINEL(1);
#endif /*GNUPG_COMMON_ASSHELP_H*/
diff --git a/common/asshelp2.c b/common/asshelp2.c
index 0a7c4549d..32e60dfb0 100644
--- a/common/asshelp2.c
+++ b/common/asshelp2.c
@@ -1,136 +1,173 @@
/* asshelp2.c - More helper functions for Assuan
* Copyright (C) 2012 Free Software Foundation, Inc.
*
* This file is part of GnuPG.
*
* This file is free software; you can redistribute it and/or modify
* it under the terms of either
*
* - the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 3 of the License, or (at
* your option) any later version.
*
* or
*
* - the GNU General Public License as published by the Free
* Software Foundation; either version 2 of the License, or (at
* your option) any later version.
*
* or both in parallel, as here.
*
* This file is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see .
*/
#include
#include
#include
#include
#include
#include
#include "util.h"
#include "asshelp.h"
+#include "status.h"
+
+
+/* A variable with a function to be used to return the current assuan
+ * context for a CTRL variable. This needs to be set using the
+ * set_assuan_ctx_func function. */
+static assuan_context_t (*the_assuan_ctx_func)(ctrl_t ctrl);
+
+
+/* Set FUNC to be used as a mapping fucntion from CTRL to an assuan
+ * context. Pass NULL for FUNC to disable the use of the assuan
+ * context in this module. */
+void
+set_assuan_context_func (assuan_context_t (*func)(ctrl_t ctrl))
+{
+ the_assuan_ctx_func = func;
+}
+
/* Helper function to print an assuan status line using a printf
format string. */
gpg_error_t
vprint_assuan_status (assuan_context_t ctx,
const char *keyword,
const char *format, va_list arg_ptr)
{
int rc;
char *buf;
rc = gpgrt_vasprintf (&buf, format, arg_ptr);
if (rc < 0)
return gpg_err_make (default_errsource, gpg_err_code_from_syserror ());
rc = assuan_write_status (ctx, keyword, buf);
xfree (buf);
return rc;
}
/* Helper function to print an assuan status line using a printf
format string. */
gpg_error_t
print_assuan_status (assuan_context_t ctx,
const char *keyword,
const char *format, ...)
{
va_list arg_ptr;
gpg_error_t err;
va_start (arg_ptr, format);
err = vprint_assuan_status (ctx, keyword, format, arg_ptr);
va_end (arg_ptr);
return err;
}
/* Helper function to print a list of strings as an assuan status
* line. KEYWORD is the first item on the status line. ARG_PTR is a
* list of strings which are all separated by a space in the output.
* The last argument must be a NULL. Linefeeds and carriage returns
* characters (which are not allowed in an Assuan status line) are
* silently quoted in C-style. */
gpg_error_t
vprint_assuan_status_strings (assuan_context_t ctx,
const char *keyword, va_list arg_ptr)
{
gpg_error_t err = 0;
const char *text;
char buf[950], *p;
size_t n;
p = buf;
n = 0;
while ((text = va_arg (arg_ptr, const char *)) && n < DIM (buf)-3 )
{
if (n)
{
*p++ = ' ';
n++;
}
for ( ; *text && n < DIM (buf)-3; n++, text++)
{
if (*text == '\n')
{
*p++ = '\\';
*p++ = 'n';
n++;
}
else if (*text == '\r')
{
*p++ = '\\';
*p++ = 'r';
n++;
}
else
*p++ = *text;
}
}
*p = 0;
err = assuan_write_status (ctx, keyword, buf);
return err;
}
/* See vprint_assuan_status_strings. */
gpg_error_t
print_assuan_status_strings (assuan_context_t ctx, const char *keyword, ...)
{
va_list arg_ptr;
gpg_error_t err;
va_start (arg_ptr, keyword);
err = vprint_assuan_status_strings (ctx, keyword, arg_ptr);
va_end (arg_ptr);
return err;
}
+
+
+/* This function is similar to print_assuan_status but takes a CTRL
+ * arg instead of an assuan context as first argument. */
+gpg_error_t
+status_printf (ctrl_t ctrl, int no, const char *format, ...)
+{
+ gpg_error_t err;
+ va_list arg_ptr;
+ assuan_context_t ctx;
+
+ if (!ctrl || !the_assuan_ctx_func || !(ctx = the_assuan_ctx_func (ctrl)))
+ return 0;
+
+ va_start (arg_ptr, format);
+ err = vprint_assuan_status (ctx, get_status_string (no), format, arg_ptr);
+ va_end (arg_ptr);
+ return err;
+}
diff --git a/po/Makevars b/po/Makevars
index 90b0c5b83..60a6fb36e 100644
--- a/po/Makevars
+++ b/po/Makevars
@@ -1,97 +1,98 @@
# Makefile variables for PO directory in any package using GNU gettext.
# Usually the message domain is the same as the package name.
DOMAIN = gnupg2
# These two variables depend on the location of this directory.
subdir = po
top_builddir = ..
# These options get passed to xgettext.
XGETTEXT_OPTIONS = \
--keyword=_ --keyword=N_ --keyword=L_ \
--flag=gcry_log_debug:1:c-format \
--flag=gpgrt_fprintf:2:c-format \
--flag=gpgrt_fprintf_unlocked:2:c-format \
--flag=gpgrt_printf:1:c-format \
--flag=gpgrt_printf_unlocked:1:c-format \
--flag=gpgrt_vfprintf:2:c-format \
--flag=gpgrt_vfprintf_unlocked:2:c-format \
--flag=gpgrt_asprintf:2:c-format \
--flag=gpgrt_vasprintf:2:c-format \
--flag=gpgrt_bsprintf:1:c-format \
--flag=gpgrt_vbsprintf:1:c-format \
--flag=gpgrt_snprintf:3:c-format \
--flag=gpgrt_vsnprintf:3:c-format \
--flag=gpgrt_log:2:c-format \
--flag=gpgrt_log_bug:1:c-format \
--flag=gpgrt_log_fatal:1:c-format \
--flag=gpgrt_log_error:1:c-format \
--flag=gpgrt_log_info:1:c-format \
--flag=gpgrt_log_debug:1:c-format \
--flag=gpgrt_log_debug_string:2:c-format \
--flag=gpgrt_log_printf:1:c-format \
--flag=gpgrt_log_printhex:3:c-format \
--flag=gpgrt_log_clock:1:c-format \
--flag=log_log:2:c-format \
--flag=log_bug:1:c-format \
--flag=log_fatal:1:c-format \
--flag=log_error:1:c-format \
--flag=log_info:1:c-format \
--flag=log_debug:1:c-format \
--flag=log_debug_string:2:c-format \
--flag=log_printf:1:c-format \
--flag=log_printhex:3:c-format \
--flag=log_clock:1:c-format
--flag=put_membuf_printf:2:c-format \
--flag=tty_printf:1:c-format \
--flag=tty_fprintf:2:c-format \
--flag=tty_getf:1:c-format \
--flag=writeout_para:2:c-format \
--flag=writeout_li:3:c-format \
--flag=writeout_rem:2:c-format \
--flag=xasprintf:1:c-format \
--flag=xtryasprintf:1:c-format \
--flag=log_debug_with_string:2:c-format \
+ --flag=status_printf:3:c-format \
--flag=print_assuan_status:3:c-format \
--flag=vprint_assuan_status:3:c-format \
--flag=agent_print_status:3:c-format \
--flag=dirmngr_status_helpf:2:c-format \
--flag=dirmngr_status_printf:3:c-format \
--flag=ks_printf_help:2:c-format \
--flag=print_further_info:1:c-format \
--flag=write_status_printf:2:c-format \
--flag=kbxd_print_status:3:c-format \
--flag=gpgconf_write_status:2:c-format \
--flag=wks_write_status:2:c-format
# This is the copyright holder that gets inserted into the header of the
# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding
# package. (Note that the msgstr strings, extracted from the package's
# sources, belong to the copyright holder of the package.) Translators are
# expected to transfer the copyright for their translations to this person
# or entity, or to disclaim their copyright. The empty string stands for
# the public domain; in this case the translators are expected to disclaim
# their copyright.
COPYRIGHT_HOLDER = Free Software Foundation, Inc.
# This is the email address or URL to which the translators shall report
# bugs in the untranslated strings:
# - Strings which are not entire sentences, see the maintainer guidelines
# in the GNU gettext documentation, section 'Preparing Strings'.
# - Strings which use unclear terms or require additional context to be
# understood.
# - Strings which make invalid assumptions about notation of date, time or
# money.
# - Pluralisation problems.
# - Incorrect English spelling.
# - Incorrect formatting.
# It can be your email address, or a mailing list address where translators
# can write to without being subscribed, or the URL of a web page through
# which the translators can contact you.
MSGID_BUGS_ADDRESS = translations@gnupg.org
# This is the list of locale categories, beyond LC_MESSAGES, for which the
# message catalogs shall be used. It is usually empty.
EXTRA_LOCALE_CATEGORIES =