Prefer prototypes from glibc headers, since defining them ourselves works around...
authorpabs3 <pabs3@1f10aa63-cdf2-0310-b900-c93c546f37ac>
Wed, 6 May 2009 05:03:23 +0000 (05:03 +0000)
committerCarlos Lopez <carlos@pcnuevo.(none)>
Fri, 12 Jun 2009 14:31:04 +0000 (16:31 +0200)
git-svn-id: https://synfig.svn.sourceforge.net/svnroot/synfig@2373 1f10aa63-cdf2-0310-b900-c93c546f37ac

ETL/trunk/ETL/_stringf.h

index 120c326..3d0c020 100644 (file)
 
 /* === H E A D E R S ======================================================= */
 
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+
 #include <string>
 #include <cstdarg>
 #include <cstdlib>
+#include <cstdio>
 
 /* === M A C R O S ========================================================= */
 
@@ -58,22 +63,33 @@ _ETL_BEGIN_CDECLS
 #define ETL_NO_THROW throw()
 #endif
 
+// Prefer prototypes from glibc headers, since defining them ourselves
+// works around glibc security mechanisms
+
 #ifdef HAVE_VASPRINTF  // This is the preferred method
- extern int vasprintf(char **,const char *,va_list)ETL_NO_THROW;
+ #ifndef __GLIBC__
+  extern int vasprintf(char **,const char *,va_list)ETL_NO_THROW;
+ #endif
 #else
 
 # ifdef HAVE_VSNPRINTF // This is the secondary method
- extern int vsnprintf(char *,size_t,const char*,va_list)ETL_NO_THROW;
+ #ifndef __GLIBC__
+  extern int vsnprintf(char *,size_t,const char*,va_list)ETL_NO_THROW;
+ #endif
 # endif
 
 #endif
 
 #ifdef HAVE_VSSCANF
-extern int vsscanf(const char *,const char *,va_list)ETL_NO_THROW;
+ #ifndef __GLIBC__
+  extern int vsscanf(const char *,const char *,va_list)ETL_NO_THROW;
+ #endif
 #else
 #define ETL_NO_VSTRSCANF
 #ifdef HAVE_SSCANF
-extern int sscanf(const char *buf, const char *format, ...)ETL_NO_THROW;
+ #ifndef __GLIBC__
+  extern int sscanf(const char *buf, const char *format, ...)ETL_NO_THROW;
+ #endif
 #endif
 #endif