kumquat-buildroot/package/gettext-tiny/0001-libintl-Fix-format-not-a-string-literal-error-for-gc.patch

56 lines
2.4 KiB
Diff
Raw Normal View History

From 34f631ce80700aa1eaadc032026f12f86584bd8a Mon Sep 17 00:00:00 2001
From: Vadim Kochan <vadim4j@gmail.com>
Date: Mon, 31 Dec 2018 00:40:29 +0200
Subject: [PATCH] gettext-tiny: Fix format not a string literal error
Add 'format_arg' attribute for the functions which may return string
as formatted parameter, otherwise it fails to compile on high versions
of gcc.
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
---
include/libintl.h | 27 +++++++++++++++++++++------
1 file changed, 21 insertions(+), 6 deletions(-)
diff --git a/include/libintl.h b/include/libintl.h
index b1af2b4..1883e1b 100644
--- a/include/libintl.h
+++ b/include/libintl.h
@@ -4,12 +4,27 @@
#ifdef __cplusplus
extern "C" {
#endif
-char *gettext(const char *msgid);
-char *dgettext(const char *domainname, const char *msgid);
-char *dcgettext(const char *domainname, const char *msgid, int category);
-char *ngettext(const char *msgid1, const char *msgid2, unsigned long n);
-char *dngettext(const char *domainname, const char *msgid1, const char *msgid2, unsigned long n);
-char *dcngettext(const char *domainname, const char *msgid1, const char *msgid2, unsigned long n, int category);
+/* _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 defined __GNUC__ && __GNUC__ >= 3 && !(defined __APPLE_CC__ && __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
+
+char *gettext(const char *msgid)
+ _INTL_MAY_RETURN_STRING_ARG(1);
+char *dgettext(const char *domainname, const char *msgid)
+ _INTL_MAY_RETURN_STRING_ARG(2);
+char *dcgettext(const char *domainname, const char *msgid, int category)
+ _INTL_MAY_RETURN_STRING_ARG(2);
+char *ngettext(const char *msgid1, const char *msgid2, unsigned long n)
+ _INTL_MAY_RETURN_STRING_ARG(1) _INTL_MAY_RETURN_STRING_ARG(2);
+char *dngettext(const char *domainname, const char *msgid1, const char *msgid2, unsigned long n)
+ _INTL_MAY_RETURN_STRING_ARG(2) _INTL_MAY_RETURN_STRING_ARG(3);
+char *dcngettext(const char *domainname, const char *msgid1, const char *msgid2, unsigned long n, int category)
+ _INTL_MAY_RETURN_STRING_ARG(2) _INTL_MAY_RETURN_STRING_ARG(3);
char *textdomain(const char *domainname);
char *bind_textdomain_codeset(const char *domainname, const char *codeset);
--
2.14.1