diff options
author | Khem Raj <raj.khem@gmail.com> | 2015-09-13 06:29:04 +0000 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2015-09-15 20:30:36 +0000 |
commit | ccc71e0ea881b7f6594ed95afd706442829c39fc (patch) | |
tree | 3c0beddd15568096e657865dab89c1598ff2cbb0 /include | |
parent | 64b6684ddd95ef17349a6e640806bfee9f873715 (diff) | |
download | musl-ccc71e0ea881b7f6594ed95afd706442829c39fc.tar.gz |
add format argument attributes to gettext function prototypes
their absence completely breaks format string warnings in programs
with gettext message translations: -Wformat gives no results, and
-Wformat-nonliteral produces spurious warnings.
with gcc, the problem manifests only in standards-conforming profiles;
otherwise gcc sets these attributes by default for the gettext family.
with clang, the problem always manifests; clang has no such defaults.
Diffstat (limited to 'include')
-rw-r--r-- | include/libintl.h | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/include/libintl.h b/include/libintl.h index a2dada67..6a707bf0 100644 --- a/include/libintl.h +++ b/include/libintl.h @@ -8,16 +8,24 @@ extern "C" { #define __USE_GNU_GETTEXT 1 #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 1 : -1) -char *gettext(const char *); -char *dgettext(const char *, const char *); -char *dcgettext(const char *, const char *, int); -char *ngettext(const char *, const char *, unsigned long); -char *dngettext(const char *, const char *, const char *, unsigned long); -char *dcngettext(const char *, const char *, const char *, unsigned long, int); +#if __GNUC__ >= 3 +#define __fa(n) __attribute__ ((__format_arg__ (n))) +#else +#define __fa(n) +#endif + +char *gettext(const char *) __fa(1); +char *dgettext(const char *, const char *) __fa(2); +char *dcgettext(const char *, const char *, int) __fa(2); +char *ngettext(const char *, const char *, unsigned long) __fa(1) __fa(2); +char *dngettext(const char *, const char *, const char *, unsigned long) __fa(2) __fa(3); +char *dcngettext(const char *, const char *, const char *, unsigned long, int) __fa(2) __fa(3); char *textdomain(const char *); char *bindtextdomain (const char *, const char *); char *bind_textdomain_codeset(const char *, const char *); +#undef __fa + #ifdef __cplusplus } #endif |