aboutsummaryrefslogtreecommitdiff
path: root/intl/libgnuintl.h
diff options
context:
space:
mode:
authorTristan Gingold <gingold@adacore.com>2009-10-15 09:41:35 +0000
committerTristan Gingold <gingold@adacore.com>2009-10-15 09:41:35 +0000
commitc44c601a50df172a963c97120ae40c25630552a5 (patch)
treed6816be621e12f882086183eabf56d9b069e39a5 /intl/libgnuintl.h
parent82bb573a567ac147a333b86e36208e2397d5f5df (diff)
downloadgdb-c44c601a50df172a963c97120ae40c25630552a5.zip
gdb-c44c601a50df172a963c97120ae40c25630552a5.tar.gz
gdb-c44c601a50df172a963c97120ae40c25630552a5.tar.bz2
2009-10-15 Jim Blandy <jimb@red-bean.com>
* libgnuintl.h (_INTL_MAY_RETURN_STRING_ARG, gettext, dgettext) (dcgettext, ngettext, dngettext, dcngettext): Backport changes from current gettext to provide GCC format_arg attributes.
Diffstat (limited to 'intl/libgnuintl.h')
-rw-r--r--intl/libgnuintl.h45
1 files changed, 33 insertions, 12 deletions
diff --git a/intl/libgnuintl.h b/intl/libgnuintl.h
index f6138af..acc9093 100644
--- a/intl/libgnuintl.h
+++ b/intl/libgnuintl.h
@@ -112,11 +112,21 @@ extern "C" {
# define _INTL_ASM(cname)
#endif
+/* _INTL_MAY_RETURN_STRING_ARG(n) declares that the given function may return
+ its n-th argument literally. This enables GCC to warn for example about
+ printf (gettext ("foo %y")). */
+#if __GNUC__ >= 3 && !(__APPLE_CC__ > 1 && defined __cplusplus)
+# define _INTL_MAY_RETURN_STRING_ARG(n) __attribute__ ((__format_arg__ (n)))
+#else
+# define _INTL_MAY_RETURN_STRING_ARG(n)
+#endif
+
/* Look up MSGID in the current default message catalog for the current
LC_MESSAGES locale. If not found, returns MSGID itself (the default
text). */
#ifdef _INTL_REDIRECT_INLINE
-extern char *libintl_gettext (const char *__msgid);
+extern char *libintl_gettext (const char *__msgid)
+ _INTL_MAY_RETURN_STRING_ARG (1);
static inline char *gettext (const char *__msgid)
{
return libintl_gettext (__msgid);
@@ -126,13 +136,15 @@ static inline char *gettext (const char *__msgid)
# define gettext libintl_gettext
#endif
extern char *gettext _INTL_PARAMS ((const char *__msgid))
- _INTL_ASM (libintl_gettext);
+ _INTL_ASM (libintl_gettext)
+ _INTL_MAY_RETURN_STRING_ARG (1);
#endif
/* Look up MSGID in the DOMAINNAME message catalog for the current
LC_MESSAGES locale. */
#ifdef _INTL_REDIRECT_INLINE
-extern char *libintl_dgettext (const char *__domainname, const char *__msgid);
+extern char *libintl_dgettext (const char *__domainname, const char *__msgid)
+ _INTL_MAY_RETURN_STRING_ARG (2);
static inline char *dgettext (const char *__domainname, const char *__msgid)
{
return libintl_dgettext (__domainname, __msgid);
@@ -143,14 +155,16 @@ static inline char *dgettext (const char *__domainname, const char *__msgid)
#endif
extern char *dgettext _INTL_PARAMS ((const char *__domainname,
const char *__msgid))
- _INTL_ASM (libintl_dgettext);
+ _INTL_ASM (libintl_dgettext)
+ _INTL_MAY_RETURN_STRING_ARG (2);
#endif
/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
locale. */
#ifdef _INTL_REDIRECT_INLINE
extern char *libintl_dcgettext (const char *__domainname, const char *__msgid,
- int __category);
+ int __category)
+ _INTL_MAY_RETURN_STRING_ARG (2);
static inline char *dcgettext (const char *__domainname, const char *__msgid,
int __category)
{
@@ -163,7 +177,8 @@ static inline char *dcgettext (const char *__domainname, const char *__msgid,
extern char *dcgettext _INTL_PARAMS ((const char *__domainname,
const char *__msgid,
int __category))
- _INTL_ASM (libintl_dcgettext);
+ _INTL_ASM (libintl_dcgettext)
+ _INTL_MAY_RETURN_STRING_ARG (2);
#endif
@@ -171,7 +186,8 @@ extern char *dcgettext _INTL_PARAMS ((const char *__domainname,
number N. */
#ifdef _INTL_REDIRECT_INLINE
extern char *libintl_ngettext (const char *__msgid1, const char *__msgid2,
- unsigned long int __n);
+ unsigned long int __n)
+ _INTL_MAY_RETURN_STRING_ARG (1) _INTL_MAY_RETURN_STRING_ARG (2);
static inline char *ngettext (const char *__msgid1, const char *__msgid2,
unsigned long int __n)
{
@@ -184,14 +200,16 @@ static inline char *ngettext (const char *__msgid1, const char *__msgid2,
extern char *ngettext _INTL_PARAMS ((const char *__msgid1,
const char *__msgid2,
unsigned long int __n))
- _INTL_ASM (libintl_ngettext);
+ _INTL_ASM (libintl_ngettext)
+ _INTL_MAY_RETURN_STRING_ARG (1) _INTL_MAY_RETURN_STRING_ARG (2);
#endif
/* Similar to `dgettext' but select the plural form corresponding to the
number N. */
#ifdef _INTL_REDIRECT_INLINE
extern char *libintl_dngettext (const char *__domainname, const char *__msgid1,
- const char *__msgid2, unsigned long int __n);
+ const char *__msgid2, unsigned long int __n)
+ _INTL_MAY_RETURN_STRING_ARG (2) _INTL_MAY_RETURN_STRING_ARG (3);
static inline char *dngettext (const char *__domainname, const char *__msgid1,
const char *__msgid2, unsigned long int __n)
{
@@ -205,7 +223,8 @@ extern char *dngettext _INTL_PARAMS ((const char *__domainname,
const char *__msgid1,
const char *__msgid2,
unsigned long int __n))
- _INTL_ASM (libintl_dngettext);
+ _INTL_ASM (libintl_dngettext)
+ _INTL_MAY_RETURN_STRING_ARG (2) _INTL_MAY_RETURN_STRING_ARG (3);
#endif
/* Similar to `dcgettext' but select the plural form corresponding to the
@@ -213,7 +232,8 @@ extern char *dngettext _INTL_PARAMS ((const char *__domainname,
#ifdef _INTL_REDIRECT_INLINE
extern char *libintl_dcngettext (const char *__domainname,
const char *__msgid1, const char *__msgid2,
- unsigned long int __n, int __category);
+ unsigned long int __n, int __category)
+ _INTL_MAY_RETURN_STRING_ARG (2) _INTL_MAY_RETURN_STRING_ARG (3);
static inline char *dcngettext (const char *__domainname,
const char *__msgid1, const char *__msgid2,
unsigned long int __n, int __category)
@@ -229,7 +249,8 @@ extern char *dcngettext _INTL_PARAMS ((const char *__domainname,
const char *__msgid2,
unsigned long int __n,
int __category))
- _INTL_ASM (libintl_dcngettext);
+ _INTL_ASM (libintl_dcngettext)
+ _INTL_MAY_RETURN_STRING_ARG (2) _INTL_MAY_RETURN_STRING_ARG (3);
#endif