0001-libintl-Fix-format-not-a-string-literal-error-for-gc.patch 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. From 34f631ce80700aa1eaadc032026f12f86584bd8a Mon Sep 17 00:00:00 2001
  2. From: Vadim Kochan <vadim4j@gmail.com>
  3. Date: Mon, 31 Dec 2018 00:40:29 +0200
  4. Subject: [PATCH] gettext-tiny: Fix format not a string literal error
  5. Add 'format_arg' attribute for the functions which may return string
  6. as formatted parameter, otherwise it fails to compile on high versions
  7. of gcc.
  8. Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
  9. ---
  10. include/libintl.h | 27 +++++++++++++++++++++------
  11. 1 file changed, 21 insertions(+), 6 deletions(-)
  12. diff --git a/include/libintl.h b/include/libintl.h
  13. index b1af2b4..1883e1b 100644
  14. --- a/include/libintl.h
  15. +++ b/include/libintl.h
  16. @@ -4,12 +4,27 @@
  17. #ifdef __cplusplus
  18. extern "C" {
  19. #endif
  20. -char *gettext(const char *msgid);
  21. -char *dgettext(const char *domainname, const char *msgid);
  22. -char *dcgettext(const char *domainname, const char *msgid, int category);
  23. -char *ngettext(const char *msgid1, const char *msgid2, unsigned long n);
  24. -char *dngettext(const char *domainname, const char *msgid1, const char *msgid2, unsigned long n);
  25. -char *dcngettext(const char *domainname, const char *msgid1, const char *msgid2, unsigned long n, int category);
  26. +/* _INTL_MAY_RETURN_STRING_ARG(n) declares that the given function may return
  27. + * its n-th argument literally. This enables GCC to warn for example about
  28. + * printf (gettext ("foo %y")). */
  29. +#if defined __GNUC__ && __GNUC__ >= 3 && !(defined __APPLE_CC__ && __APPLE_CC__ > 1 && defined __cplusplus)
  30. +# define _INTL_MAY_RETURN_STRING_ARG(n) __attribute__ ((__format_arg__ (n)))
  31. +#else
  32. +# define _INTL_MAY_RETURN_STRING_ARG(n)
  33. +#endif
  34. +
  35. +char *gettext(const char *msgid)
  36. + _INTL_MAY_RETURN_STRING_ARG(1);
  37. +char *dgettext(const char *domainname, const char *msgid)
  38. + _INTL_MAY_RETURN_STRING_ARG(2);
  39. +char *dcgettext(const char *domainname, const char *msgid, int category)
  40. + _INTL_MAY_RETURN_STRING_ARG(2);
  41. +char *ngettext(const char *msgid1, const char *msgid2, unsigned long n)
  42. + _INTL_MAY_RETURN_STRING_ARG(1) _INTL_MAY_RETURN_STRING_ARG(2);
  43. +char *dngettext(const char *domainname, const char *msgid1, const char *msgid2, unsigned long n)
  44. + _INTL_MAY_RETURN_STRING_ARG(2) _INTL_MAY_RETURN_STRING_ARG(3);
  45. +char *dcngettext(const char *domainname, const char *msgid1, const char *msgid2, unsigned long n, int category)
  46. + _INTL_MAY_RETURN_STRING_ARG(2) _INTL_MAY_RETURN_STRING_ARG(3);
  47. char *textdomain(const char *domainname);
  48. char *bind_textdomain_codeset(const char *domainname, const char *codeset);
  49. --
  50. 2.14.1