From 3bc6bdf322ea625c23b15caa97daba6f43cfcc7f Mon Sep 17 00:00:00 2001 From: Bruce Momjian <bruce@momjian.us> Date: Fri, 11 Mar 2005 17:20:35 +0000 Subject: [PATCH] Define snprintf() to call pg_snprintf() so our own snprintf-like implementation doesn't export out via libpq and get used by a user application. --- configure | 5 +++++ configure.in | 3 ++- src/bin/pg_ctl/pg_ctl.c | 10 +++++++--- src/bin/psql/command.c | 10 +++++----- src/include/pg_config.h.in | 3 +++ src/include/port.h | 22 +++++++++++++++++++++- src/port/snprintf.c | 22 +++++++++------------- 7 files changed, 52 insertions(+), 23 deletions(-) diff --git a/configure b/configure index a53bc247060..22a2ca9a62e 100755 --- a/configure +++ b/configure @@ -14973,6 +14973,11 @@ _ACEOF # Now we have checked all the reasons to replace snprintf if test $pgac_need_repl_snprintf = yes; then + +cat >>confdefs.h <<\_ACEOF +#define USE_SNPRINTF 1 +_ACEOF + LIBOBJS="$LIBOBJS snprintf.$ac_objext" fi diff --git a/configure.in b/configure.in index 6e36e045db1..ffc118ea8b7 100644 --- a/configure.in +++ b/configure.in @@ -1,5 +1,5 @@ dnl Process this file with autoconf to produce a configure script. -dnl $PostgreSQL: pgsql/configure.in,v 1.405 2005/03/02 15:42:35 momjian Exp $ +dnl $PostgreSQL: pgsql/configure.in,v 1.406 2005/03/11 17:20:33 momjian Exp $ dnl dnl Developers, please strive to achieve this order: dnl @@ -1143,6 +1143,7 @@ AC_DEFINE_UNQUOTED(UINT64_FORMAT, $UINT64_FORMAT, # Now we have checked all the reasons to replace snprintf if test $pgac_need_repl_snprintf = yes; then + AC_DEFINE(USE_SNPRINTF, 1, [Use replacement snprintf() functions.]) AC_LIBOBJ(snprintf) fi diff --git a/src/bin/pg_ctl/pg_ctl.c b/src/bin/pg_ctl/pg_ctl.c index 8564bd76e91..a73ddffd323 100644 --- a/src/bin/pg_ctl/pg_ctl.c +++ b/src/bin/pg_ctl/pg_ctl.c @@ -4,7 +4,7 @@ * * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/bin/pg_ctl/pg_ctl.c,v 1.54 2005/02/22 04:39:22 momjian Exp $ + * $PostgreSQL: pgsql/src/bin/pg_ctl/pg_ctl.c,v 1.55 2005/03/11 17:20:33 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -337,19 +337,23 @@ start_postmaster(void) if (log_file != NULL) #ifndef WIN32 /* Cygwin doesn't have START */ snprintf(cmd, MAXPGPATH, "%s\"%s\" %s%s < \"%s\" >> \"%s\" 2>&1 &%s", + SYSTEMQUOTE, postgres_path, pgdata_opt, post_opts, + DEVNULL, log_file, SYSTEMQUOTE); #else snprintf(cmd, MAXPGPATH, "%sSTART /B \"\" \"%s\" %s%s < \"%s\" >> \"%s\" 2>&1%s", -#endif SYSTEMQUOTE, postgres_path, pgdata_opt, post_opts, DEVNULL, log_file, SYSTEMQUOTE); +#endif else #ifndef WIN32 /* Cygwin doesn't have START */ snprintf(cmd, MAXPGPATH, "%s\"%s\" %s%s < \"%s\" 2>&1 &%s", + SYSTEMQUOTE, postgres_path, pgdata_opt, post_opts, + DEVNULL, SYSTEMQUOTE); #else snprintf(cmd, MAXPGPATH, "%sSTART /B \"\" \"%s\" %s%s < \"%s\" 2>&1%s", -#endif SYSTEMQUOTE, postgres_path, pgdata_opt, post_opts, DEVNULL, SYSTEMQUOTE); +#endif return system(cmd); } diff --git a/src/bin/psql/command.c b/src/bin/psql/command.c index fb918bdc058..01ff7fb3957 100644 --- a/src/bin/psql/command.c +++ b/src/bin/psql/command.c @@ -3,7 +3,7 @@ * * Copyright (c) 2000-2005, PostgreSQL Global Development Group * - * $PostgreSQL: pgsql/src/bin/psql/command.c,v 1.140 2005/02/22 04:40:51 momjian Exp $ + * $PostgreSQL: pgsql/src/bin/psql/command.c,v 1.141 2005/03/11 17:20:34 momjian Exp $ */ #include "postgres_fe.h" #include "command.h" @@ -1175,13 +1175,13 @@ do_edit(const char *filename_arg, PQExpBuffer query_buf) * supplied path unless we use only backslashes, so we do that. */ #endif - snprintf(fnametmp, sizeof(fnametmp), "%s%spsql.edit.%d", tmpdir, #ifndef WIN32 - "/", + snprintf(fnametmp, sizeof(fnametmp), "%s%spsql.edit.%d", tmpdir, + "/", (int)getpid()); #else - "", /* trailing separator already present */ + snprintf(fnametmp, sizeof(fnametmp), "%s%spsql.edit.%d", tmpdir, + "" /* trailing separator already present */, (int)getpid()); #endif - (int)getpid()); fname = (const char *) fnametmp; diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in index 279b6b539c8..08cbc4bb2e3 100644 --- a/src/include/pg_config.h.in +++ b/src/include/pg_config.h.in @@ -648,6 +648,9 @@ /* Define to 1 to build with Rendezvous support. (--with-rendezvous) */ #undef USE_RENDEZVOUS +/* Use replacement snprintf() functions. */ +#undef USE_SNPRINTF + /* Define to build with (Open)SSL support. (--with-openssl) */ #undef USE_SSL diff --git a/src/include/port.h b/src/include/port.h index cd21976041a..5a2953ce600 100644 --- a/src/include/port.h +++ b/src/include/port.h @@ -6,7 +6,7 @@ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/port.h,v 1.70 2005/02/27 00:53:29 momjian Exp $ + * $PostgreSQL: pgsql/src/include/port.h,v 1.71 2005/03/11 17:20:34 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -107,6 +107,26 @@ extern int pg_strncasecmp(const char *s1, const char *s2, size_t n); extern unsigned char pg_toupper(unsigned char ch); extern unsigned char pg_tolower(unsigned char ch); +#ifdef USE_SNPRINTF +extern int pg_vsnprintf(char *str, size_t count, const char *fmt, va_list args); +extern int pg_snprintf(char *str, size_t count, const char *fmt,...) +/* This extension allows gcc to check the format string */ +__attribute__((format(printf, 3, 4))); +extern int pg_printf(const char *fmt,...) +/* This extension allows gcc to check the format string */ +__attribute__((format(printf, 1, 2))); + +#ifdef __GNUC__ +#define vsnprintf(...) pg_vsnprintf(__VA_ARGS__) +#define snprintf(...) pg_snprintf(__VA_ARGS__) +#define printf(...) pg_printf(__VA_ARGS__) +#else +#define vsnprintf pg_vsnprintf +#define snprintf pg_snprintf +#define printf pg_printf +#endif +#endif + /* Portable prompt handling */ extern char *simple_prompt(const char *prompt, int maxlen, bool echo); diff --git a/src/port/snprintf.c b/src/port/snprintf.c index 2f75651c3c9..1d85c8d830e 100644 --- a/src/port/snprintf.c +++ b/src/port/snprintf.c @@ -65,19 +65,15 @@ * causing nasty effects. **************************************************************/ -/*static char _id[] = "$PostgreSQL: pgsql/src/port/snprintf.c,v 1.16 2005/03/02 23:56:53 momjian Exp $";*/ +/*static char _id[] = "$PostgreSQL: pgsql/src/port/snprintf.c,v 1.17 2005/03/11 17:20:35 momjian Exp $";*/ -int snprintf(char *str, size_t count, const char *fmt,...); -int vsnprintf(char *str, size_t count, const char *fmt, va_list args); -int printf(const char *format, ...); +int pg_snprintf(char *str, size_t count, const char *fmt,...); +int pg_vsnprintf(char *str, size_t count, const char *fmt, va_list args); +int pg_printf(const char *format, ...); static void dopr(char *buffer, const char *format, va_list args, char *end); -/* - * If vsnprintf() is not before snprintf() in this file, snprintf() - * will call the system vsnprintf() on MinGW. - */ int -vsnprintf(char *str, size_t count, const char *fmt, va_list args) +pg_vsnprintf(char *str, size_t count, const char *fmt, va_list args) { char *end; str[0] = '\0'; @@ -89,19 +85,19 @@ vsnprintf(char *str, size_t count, const char *fmt, va_list args) } int -snprintf(char *str, size_t count, const char *fmt,...) +pg_snprintf(char *str, size_t count, const char *fmt,...) { int len; va_list args; va_start(args, fmt); - len = vsnprintf(str, count, fmt, args); + len = pg_vsnprintf(str, count, fmt, args); va_end(args); return len; } int -printf(const char *fmt,...) +pg_printf(const char *fmt,...) { int len; va_list args; @@ -109,7 +105,7 @@ printf(const char *fmt,...) char* p; va_start(args, fmt); - len = vsnprintf((char*)buffer, (size_t)4096, fmt, args); + len = pg_vsnprintf((char*)buffer, (size_t)4096, fmt, args); va_end(args); p = (char*)buffer; for(;*p;p++) -- GitLab