plpython: Avoid the need to redefine *printf macros
authorAndres Freund <andres@anarazel.de>
Wed, 25 Jan 2023 17:59:26 +0000 (09:59 -0800)
committerAndres Freund <andres@anarazel.de>
Wed, 25 Jan 2023 17:59:26 +0000 (09:59 -0800)
Until now we undefined and then redefined a lot of *printf macros due to
worries about conflicts with Python.h macro definitions. Current Python.h
doesn't define any *printf macros, and older versions just defined snprintf,
vsnprintf, guarded by #if defined(MS_WIN32) && !defined(HAVE_SNPRINTF).

Thus we can replace the undefine/define section with a single
 #define HAVE_SNPRINTF 1

Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/20230124165814.2njc7gnvubn2amh6@awork3.anarazel.de

src/pl/plpython/plpython.h

index 2af0d04d1f8d97d12f72fc004cccfa7f2ddf1201..2d18fc2dc1b8b6ccfe2ced19e3804ed81917c05a 100644 (file)
 #undef _XOPEN_SOURCE
 
 /*
- * Sometimes python carefully scribbles on our *printf macros.
- * So we undefine them here and redefine them after it's done its dirty deed.
+ * Python versions <= 3.8 otherwise define a replacement, causing macro
+ * redefinition warnings.
  */
-#undef vsnprintf
-#undef snprintf
-#undef vsprintf
-#undef sprintf
-#undef vfprintf
-#undef fprintf
-#undef vprintf
-#undef printf
+#define HAVE_SNPRINTF 1
 
 #if defined(_MSC_VER) && defined(_DEBUG)
 /* Python uses #pragma to bring in a non-default libpython on VC++ if
 #undef TEXTDOMAIN
 #define TEXTDOMAIN PG_TEXTDOMAIN("plpython")
 
-/* put back our *printf macros ... this must match src/include/port.h */
-#ifdef vsnprintf
-#undef vsnprintf
-#endif
-#ifdef snprintf
-#undef snprintf
-#endif
-#ifdef vsprintf
-#undef vsprintf
-#endif
-#ifdef sprintf
-#undef sprintf
-#endif
-#ifdef vfprintf
-#undef vfprintf
-#endif
-#ifdef fprintf
-#undef fprintf
-#endif
-#ifdef vprintf
-#undef vprintf
-#endif
-#ifdef printf
-#undef printf
-#endif
-
-#define vsnprintf      pg_vsnprintf
-#define snprintf       pg_snprintf
-#define vsprintf       pg_vsprintf
-#define sprintf            pg_sprintf
-#define vfprintf       pg_vfprintf
-#define fprintf            pg_fprintf
-#define vprintf            pg_vprintf
-#define printf(...)        pg_printf(__VA_ARGS__)
-
 /*
  * Used throughout, so it's easier to just include it everywhere.
  */