]> source.dussan.org Git - tigervnc.git/commitdiff
Unbreak -Wformat warnings when gettext is used
authorPierre Ossman <ossman@cendio.se>
Wed, 5 Jul 2023 14:23:58 +0000 (16:23 +0200)
committerPierre Ossman <ossman@cendio.se>
Wed, 5 Jul 2023 14:23:58 +0000 (16:23 +0200)
gettext replaces all *printf() functions on platforms that don't fully
conform to the POSIX behaviour. Unfortunately, gettext fails to tag
these replacement functions properly so that -Wformat can still do its
thing.

Resolve this by adding a redudant declaration of the relevant functions,
with the attribute tagging in place.

vncviewer/i18n.h

index 4a50b17ca82af25d9472c2ea24d4f69cf6073d44..0806d31976ceed7f09b86c5435b47f33938af3e1 100644 (file)
@@ -1,5 +1,5 @@
 /* Copyright (C) 2002-2005 RealVNC Ltd.  All Rights Reserved.
- * Copyright 2011 Pierre Ossman <ossman@cendio.se> for Cendio AB
+ * Copyright 2011-2023 Pierre Ossman <ossman@cendio.se> for Cendio AB
  * 
  * This is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -30,6 +30,28 @@ pgettext_aux (const char *domain,
 
 #include "gettext.h"
 
+/* gettext breaks -Wformat (upstream bug 64384) */
+#if defined(__GNUC__) && defined(printf)
+extern int fprintf (FILE *, const char *, ...)
+  __attribute__((__format__ (__printf__, 2, 3)));
+extern int printf (const char *, ...)
+  __attribute__((__format__ (__printf__, 1, 2)));
+extern int sprintf (char *, const char *, ...)
+  __attribute__((__format__ (__printf__, 2, 3)));
+extern int snprintf (char *, size_t, const char *, ...)
+  __attribute__((__format__ (__printf__, 3, 4)));
+extern int asprintf (char **, const char *, ...)
+  __attribute__((__format__ (__printf__, 2, 3)));
+#endif
+#if defined(__GNUC__) && defined(wprintf)
+extern int fwprintf (FILE *, const wchar_t *, ...)
+  __attribute__((__format__ (__printf__, 2, 3)));
+extern int wprintf (const wchar_t *, ...)
+  __attribute__((__format__ (__printf__, 1, 2)));
+extern int swprintf (wchar_t *, size_t, const wchar_t *, ...)
+  __attribute__((__format__ (__printf__, 3, 4)));
+#endif
+
 #define _(String) gettext (String)
 #define p_(Context, String) pgettext (Context, String)
 #define N_(String) gettext_noop (String)