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 =