diff options
-rw-r--r-- | agent/agent.h | 4 | ||||
-rw-r--r-- | agent/genkey.c | 5 | ||||
-rw-r--r-- | common/i18n.h | 12 | ||||
-rw-r--r-- | common/util.h | 8 |
4 files changed, 26 insertions, 3 deletions
diff --git a/agent/agent.h b/agent/agent.h index 70d63cf5d..2948bff76 100644 --- a/agent/agent.h +++ b/agent/agent.h @@ -301,6 +301,10 @@ typedef int (*lookup_ttl_t)(const char *hexgrip); the connection. The macro LunderscoreIMPL is used by i18n to actually define the inline function when needed. */ #define L_(a) agent_Lunderscore (ctrl, (a)) +#define LunderscorePROTO \ + static inline const char *agent_Lunderscore (ctrl_t ctrl, \ + const char *string) \ + GNUPG_GCC_ATTR_FORMAT_ARG(2); #define LunderscoreIMPL \ static inline const char * \ agent_Lunderscore (ctrl_t ctrl, const char *string) \ diff --git a/agent/genkey.c b/agent/genkey.c index b5dee8ee5..df17880c9 100644 --- a/agent/genkey.c +++ b/agent/genkey.c @@ -271,8 +271,9 @@ check_passphrase_constraints (ctrl_t ctrl, const char *pw, goto leave; } - msg3 = xtrystrdup (L_("A passphrase may not be a known term or match%0A" - "certain pattern.")); + msg3 = xtryasprintf + (L_("A passphrase may not be a known term or match%%0A" + "certain pattern.")); if (!msg3) { err = gpg_error_from_syserror (); diff --git a/common/i18n.h b/common/i18n.h index 8507b8f27..45710b2cc 100644 --- a/common/i18n.h +++ b/common/i18n.h @@ -38,14 +38,24 @@ # endif #endif /*!USE_SIMPLE_GETTEXT*/ +#ifndef GNUPG_GCC_ATTR_FORMAT_ARG +#if __GNUC__ >= 3 /* Actually 2.8 but testing the major is easier. */ +# define GNUPG_GCC_ATTR_FORMAT_ARG(a) __attribute__ ((__format_arg__ (a))) +#else +# define GNUPG_GCC_ATTR_FORMAT_ARG(a) +#endif +#endif + void i18n_init (void); char *i18n_switchto_utf8 (void); void i18n_switchback (char *saved_codeset); const char *i18n_utf8 (const char *string); -const char *i18n_localegettext (const char *lc_messages, const char *string); +const char *i18n_localegettext (const char *lc_messages, const char *string) + GNUPG_GCC_ATTR_FORMAT_ARG(2); /* If a module wants a local L_() fucntion we define it here. */ #ifdef LunderscoreIMPL +LunderscorePROTO LunderscoreIMPL #endif diff --git a/common/util.h b/common/util.h index d5ddc1f13..b92d78c4d 100644 --- a/common/util.h +++ b/common/util.h @@ -153,6 +153,14 @@ /* GCC attributes. */ +#ifndef GNUPG_GCC_ATTR_FORMAT_ARG +#if __GNUC__ >= 3 /* Actually 2.8 but testing the major is easier. */ +# define GNUPG_GCC_ATTR_FORMAT_ARG(a) __attribute__ ((__format_arg__ (a))) +#else +# define GNUPG_GCC_ATTR_FORMAT_ARG(a) +#endif +#endif + #if __GNUC__ >= 4 # define GNUPG_GCC_A_SENTINEL(a) __attribute__ ((sentinel(a))) #else |