Re: [PATCHES] snprintf() argument reordering not working - Mailing list pgsql-hackers
From | Andrew Dunstan |
---|---|
Subject | Re: [PATCHES] snprintf() argument reordering not working |
Date | |
Msg-id | 4394C24C.4030100@dunslane.net Whole thread Raw |
In response to | Re: [PATCHES] snprintf() argument reordering not working (Andrew Dunstan <andrew@dunslane.net>) |
Responses |
Re: [PATCHES] snprintf() argument reordering not working
|
List | pgsql-hackers |
Andrew Dunstan wrote: > > > Tom Lane wrote: > >>> I'm coming around to thinking that the simple solution is just to >>> use it unconditionally on Windows. >>> >> >> >> I agree that that's what we should do, but it should be done the same >> way we handle other routines from libpgport. None of those are exported >> to our client-side programs via libpq. >> >> >> >> > > OK, eyeball this for the REL8_1_STABLE branch, please. It seems to > work for me. No exports necessary. > > er try this instead. I missed a line from configure.in cheers andrew ? autom4te.cache Index: configure =================================================================== RCS file: /cvsroot/pgsql/configure,v retrieving revision 1.461 diff -c -r1.461 configure *** configure 5 Nov 2005 04:01:38 -0000 1.461 --- configure 5 Dec 2005 22:39:43 -0000 *************** *** 13851,13858 **** # is missing. Yes, there are machines that have only one. We may # also decide to use snprintf.c if snprintf() is present but does not # have all the features we need --- see below. ! pgac_need_repl_snprintf=no for ac_func in snprintf do --- 13851,13862 ---- # is missing. Yes, there are machines that have only one. We may # also decide to use snprintf.c if snprintf() is present but does not # have all the features we need --- see below. + # Win32 gets this built unconditionally ! if test "$PORTNAME" = "win32"; then ! pgac_need_repl_snprintf=yes ! else ! pgac_need_repl_snprintf=no for ac_func in snprintf do *************** *** 14061,14066 **** --- 14065,14071 ---- fi done + fi # Check whether <stdio.h> declares snprintf() and vsnprintf(); if not, *************** *** 17111,17123 **** # Force use of our snprintf if system's doesn't do arg control # This feature is used by NLS ! if test "$enable_nls" = yes && ! test $pgac_need_repl_snprintf = no && ! # On Win32, libintl replaces snprintf() with its own version that ! # understands arg control, so we don't need our own. In fact, it ! # also uses macros that conflict with ours, so we _can't_ use ! # our own. ! test "$PORTNAME" != "win32"; then echo "$as_me:$LINENO: checking whether printf supports argument control" >&5 echo $ECHO_N "checking whether printf supports argument control... $ECHO_C" >&6 if test "${pgac_cv_printf_arg_control+set}" = set; then --- 17116,17122 ---- # Force use of our snprintf if system's doesn't do arg control # This feature is used by NLS ! if test "$enable_nls" = yes && test $pgac_need_repl_snprintf = no ; then echo "$as_me:$LINENO: checking whether printf supports argument control" >&5 echo $ECHO_N "checking whether printf supports argument control... $ECHO_C" >&6 if test "${pgac_cv_printf_arg_control+set}" = set; then Index: configure.in =================================================================== RCS file: /cvsroot/pgsql/configure.in,v retrieving revision 1.431 diff -c -r1.431 configure.in *** configure.in 5 Nov 2005 04:01:41 -0000 1.431 --- configure.in 5 Dec 2005 22:39:44 -0000 *************** *** 849,858 **** # is missing. Yes, there are machines that have only one. We may # also decide to use snprintf.c if snprintf() is present but does not # have all the features we need --- see below. ! pgac_need_repl_snprintf=no ! AC_CHECK_FUNCS(snprintf, [], pgac_need_repl_snprintf=yes) ! AC_CHECK_FUNCS(vsnprintf, [], pgac_need_repl_snprintf=yes) # Check whether <stdio.h> declares snprintf() and vsnprintf(); if not, --- 849,863 ---- # is missing. Yes, there are machines that have only one. We may # also decide to use snprintf.c if snprintf() is present but does not # have all the features we need --- see below. + # Win32 gets this built unconditionally ! if test "$PORTNAME" = "win32"; then ! pgac_need_repl_snprintf=yes ! else ! pgac_need_repl_snprintf=no ! AC_CHECK_FUNCS(snprintf, [], pgac_need_repl_snprintf=yes) ! AC_CHECK_FUNCS(vsnprintf, [], pgac_need_repl_snprintf=yes) ! fi # Check whether <stdio.h> declares snprintf() and vsnprintf(); if not, *************** *** 1046,1058 **** # Force use of our snprintf if system's doesn't do arg control # This feature is used by NLS ! if test "$enable_nls" = yes && ! test $pgac_need_repl_snprintf = no && ! # On Win32, libintl replaces snprintf() with its own version that ! # understands arg control, so we don't need our own. In fact, it ! # also uses macros that conflict with ours, so we _can't_ use ! # our own. ! test "$PORTNAME" != "win32"; then PGAC_FUNC_PRINTF_ARG_CONTROL if test $pgac_cv_printf_arg_control != yes ; then pgac_need_repl_snprintf=yes --- 1051,1057 ---- # Force use of our snprintf if system's doesn't do arg control # This feature is used by NLS ! if test "$enable_nls" = yes && test $pgac_need_repl_snprintf = no ; then PGAC_FUNC_PRINTF_ARG_CONTROL if test $pgac_cv_printf_arg_control != yes ; then pgac_need_repl_snprintf=yes Index: src/include/c.h =================================================================== RCS file: /cvsroot/pgsql/src/include/c.h,v retrieving revision 1.190 diff -c -r1.190 c.h *** src/include/c.h 15 Oct 2005 02:49:41 -0000 1.190 --- src/include/c.h 5 Dec 2005 22:39:47 -0000 *************** *** 96,101 **** --- 96,122 ---- #ifdef ENABLE_NLS #include <libintl.h> + #ifdef WIN32 + #ifdef USE_SNPRINTF + + #ifdef printf + #undef printf + #endif + #ifdef fprintf + #undef fprintf + #endif + #ifdef sprintf + #undef sprintf + #endif + #ifdef snprintf + #undef snprintf + #endif + #ifdef vsnprintf + #undef vsnprintf + #endif + + #endif + #endif #else #define gettext(x) (x) #endif Index: src/interfaces/ecpg/ecpglib/Makefile =================================================================== RCS file: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/Makefile,v retrieving revision 1.33 diff -c -r1.33 Makefile *** src/interfaces/ecpg/ecpglib/Makefile 14 Mar 2005 17:27:50 -0000 1.33 --- src/interfaces/ecpg/ecpglib/Makefile 5 Dec 2005 22:39:48 -0000 *************** *** 33,38 **** --- 33,40 ---- ifeq ($(PORTNAME), win32) # Link to shfolder.dll instead of shell32.dll SHLIB_LINK += -lshfolder + # and use our snprintf + OBJS += snprintf.o endif all: all-lib *************** *** 51,56 **** --- 53,61 ---- exec.c: % : $(top_srcdir)/src/port/% rm -f $@ && $(LN_S) $< . + snprintf.c: % : $(top_srcdir)/src/port/% + rm -f $@ && $(LN_S) $< . + path.o: path.c $(top_builddir)/src/port/pg_config_paths.h $(top_builddir)/src/port/pg_config_paths.h: Index: src/interfaces/ecpg/pgtypeslib/extern.h =================================================================== RCS file: /cvsroot/pgsql/src/interfaces/ecpg/pgtypeslib/extern.h,v retrieving revision 1.7 diff -c -r1.7 extern.h *** src/interfaces/ecpg/pgtypeslib/extern.h 15 Oct 2005 02:49:47 -0000 1.7 --- src/interfaces/ecpg/pgtypeslib/extern.h 5 Dec 2005 22:39:49 -0000 *************** *** 1,6 **** --- 1,14 ---- #ifndef __PGTYPES_COMMON_H__ #define __PGTYPES_COMMON_H__ + + #ifdef sprintf + #undef sprintf + #endif + #ifdef snprintf + #undef snprintf + #endif + #include "pgtypes_error.h" /* These are the constants that decide which printf() format we'll use in Index: src/interfaces/libpq/win32.h =================================================================== RCS file: /cvsroot/pgsql/src/interfaces/libpq/win32.h,v retrieving revision 1.27 diff -c -r1.27 win32.h *** src/interfaces/libpq/win32.h 31 Jul 2004 06:19:23 -0000 1.27 --- src/interfaces/libpq/win32.h 5 Dec 2005 22:39:49 -0000 *************** *** 16,21 **** --- 16,27 ---- #define write(a,b,c) _write(a,b,c) #endif + #ifdef vsnprintf + #undef vsnprintf + #endif + #ifdef snprintf + #undef snprintf + #endif #define vsnprintf(a,b,c,d) _vsnprintf(a,b,c,d) #define snprintf _snprintf
pgsql-hackers by date: