From: Bruno Haible Date: Fri, 26 Aug 2005 11:30:05 +0000 (+0000) Subject: Support for improved format string checking by GCC. X-Git-Tag: v0.15~418 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=218c0530c789cfb33572db153b8166b0de62254f;p=thirdparty%2Fgettext.git Support for improved format string checking by GCC. --- diff --git a/gettext-runtime/intl/ChangeLog b/gettext-runtime/intl/ChangeLog index 87cc8ecc7..3d20e17ae 100644 --- a/gettext-runtime/intl/ChangeLog +++ b/gettext-runtime/intl/ChangeLog @@ -1,3 +1,9 @@ +2005-08-25 Bruno Haible + + * libintl.glibc: Update from current glibc. + * libgnuintl.h.in (_INTL_MAY_RETURN_STRING_ARG): New macro. + (gettext, dgettext, dcgettext, ngettext, dngettext, dcngettext): + 2005-08-21 Bruno Haible * lock.h: Add multiple inclusion guard. diff --git a/gettext-runtime/intl/libgnuintl.h.in b/gettext-runtime/intl/libgnuintl.h.in index d0df69939..1743a2782 100644 --- a/gettext-runtime/intl/libgnuintl.h.in +++ b/gettext-runtime/intl/libgnuintl.h.in @@ -107,12 +107,22 @@ extern int libintl_version; # 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 +# 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); static inline char *gettext (const char *__msgid) + _INTL_MAY_RETURN_STRING_ARG (1) { return libintl_gettext (__msgid); } @@ -121,7 +131,8 @@ static inline char *gettext (const char *__msgid) # define gettext libintl_gettext #endif extern char *gettext (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 @@ -129,6 +140,7 @@ extern char *gettext (const char *__msgid) #ifdef _INTL_REDIRECT_INLINE extern char *libintl_dgettext (const char *__domainname, const char *__msgid); static inline char *dgettext (const char *__domainname, const char *__msgid) + _INTL_MAY_RETURN_STRING_ARG (2) { return libintl_dgettext (__domainname, __msgid); } @@ -137,7 +149,8 @@ static inline char *dgettext (const char *__domainname, const char *__msgid) # define dgettext libintl_dgettext #endif extern char *dgettext (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 @@ -147,6 +160,7 @@ extern char *libintl_dcgettext (const char *__domainname, const char *__msgid, int __category); static inline char *dcgettext (const char *__domainname, const char *__msgid, int __category) + _INTL_MAY_RETURN_STRING_ARG (2) { return libintl_dcgettext (__domainname, __msgid, __category); } @@ -156,7 +170,8 @@ static inline char *dcgettext (const char *__domainname, const char *__msgid, #endif extern char *dcgettext (const char *__domainname, const char *__msgid, int __category) - _INTL_ASM (libintl_dcgettext); + _INTL_ASM (libintl_dcgettext) + _INTL_MAY_RETURN_STRING_ARG (2); #endif @@ -167,6 +182,7 @@ extern char *libintl_ngettext (const char *__msgid1, const char *__msgid2, unsigned long int __n); static inline char *ngettext (const char *__msgid1, const char *__msgid2, unsigned long int __n) + _INTL_MAY_RETURN_STRING_ARG (1) _INTL_MAY_RETURN_STRING_ARG (2) { return libintl_ngettext (__msgid1, __msgid2, __n); } @@ -176,7 +192,8 @@ static inline char *ngettext (const char *__msgid1, const char *__msgid2, #endif extern char *ngettext (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 @@ -186,6 +203,7 @@ extern char *libintl_dngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n); static inline char *dngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n) + _INTL_MAY_RETURN_STRING_ARG (2) _INTL_MAY_RETURN_STRING_ARG (3) { return libintl_dngettext (__domainname, __msgid1, __msgid2, __n); } @@ -196,7 +214,8 @@ static inline char *dngettext (const char *__domainname, const char *__msgid1, extern char *dngettext (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 @@ -208,6 +227,7 @@ extern char *libintl_dcngettext (const char *__domainname, static inline char *dcngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n, int __category) + _INTL_MAY_RETURN_STRING_ARG (2) _INTL_MAY_RETURN_STRING_ARG (3) { return libintl_dcngettext (__domainname, __msgid1, __msgid2, __n, __category); } @@ -218,7 +238,8 @@ static inline char *dcngettext (const char *__domainname, extern char *dcngettext (const char *__domainname, const char *__msgid1, 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