]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
1704. [port] lwres needed a snprintf() implementation for
authorMark Andrews <marka@isc.org>
Sat, 28 Aug 2004 06:20:14 +0000 (06:20 +0000)
committerMark Andrews <marka@isc.org>
Sat, 28 Aug 2004 06:20:14 +0000 (06:20 +0000)
                        platforms without snprintf().  Add missing
                        "#include <isc/print.h>". [RT #12321]

26 files changed:
CHANGES
bin/dnssec/dnssec-makekeyset.c
bin/dnssec/dnssec-signkey.c
bin/dnssec/dnssec-signzone.c
bin/named/notify.c
bin/tests/nsecify.c
bin/tests/rwlock_test.c
bin/tests/shutdown_test.c
bin/tests/sock_test.c
configure
configure.in
lib/dns/byaddr.c
lib/dns/masterdump.c
lib/dns/resolver.c
lib/dns/time.c
lib/isc/inet_ntop.c
lib/isc/lex.c
lib/isc/unix/interfaceiter.c
lib/isccc/cc.c
lib/lwres/Makefile.in
lib/lwres/getnameinfo.c
lib/lwres/include/lwres/platform.h.in
lib/lwres/lwinetntop.c
lib/lwres/print.c [new file with mode: 0644]
lib/lwres/print_p.h [new file with mode: 0644]
lib/tests/t_api.c

diff --git a/CHANGES b/CHANGES
index 20bc724442d00b9e459af89f606a291245bbc3f8..28517e8a7e95d1d3db2578226e4c4ceb1ef58a88 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -5,7 +5,9 @@
 
 1705.  [placeholder]   rt12327
 
-1704.  [placeholder]   rt12321
+1704.  [port]          lwres needed a snprintf() implementation for
+                       platforms without snprintf().  Add missing
+                       "#include <isc/print.h>". [RT #12321]
 
 1703.  [bug]           named would loop sending NOTIFY messages when it
                        failed to receive a response. [RT #12322]
  201.  [cleanup]       Removed the test/sdig program, it has been
                        replaced by bin/dig/dig.
 
-
        --- 9.0.0b3 released ---
 
  200.  [bug]           Failures in sending query responses to clients
index a94926a1e93edd8cccab64c9c9a83244f3f21190..c330cb9232b2657b1624c207fa6cfd91a76a0d89 100644 (file)
@@ -16,7 +16,7 @@
  * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: dnssec-makekeyset.c,v 1.62 2004/03/05 05:48:19 marka Exp $ */
+/* $Id: dnssec-makekeyset.c,v 1.63 2004/08/28 06:16:50 marka Exp $ */
 
 #include <config.h>
 
@@ -25,6 +25,7 @@
 #include <isc/commandline.h>
 #include <isc/entropy.h>
 #include <isc/mem.h>
+#include <isc/print.h>
 #include <isc/string.h>
 #include <isc/util.h>
 
index c15e8703a64a5d3c872e9be4537e0ff21cca7bad..23f8c3aa7811626eb84ebb430894a937739fef77 100644 (file)
@@ -16,7 +16,7 @@
  * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: dnssec-signkey.c,v 1.62 2004/03/05 05:48:19 marka Exp $ */
+/* $Id: dnssec-signkey.c,v 1.63 2004/08/28 06:16:50 marka Exp $ */
 
 #include <config.h>
 
@@ -26,6 +26,7 @@
 #include <isc/commandline.h>
 #include <isc/entropy.h>
 #include <isc/mem.h>
+#include <isc/print.h>
 #include <isc/util.h>
 
 #include <dns/db.h>
index 26a36abf344ab8585d4fa267d11970f7d9638b89..c15b952712133fa84f1724cedde4307cd077781e 100644 (file)
@@ -16,7 +16,7 @@
  * IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: dnssec-signzone.c,v 1.181 2004/08/20 00:47:40 marka Exp $ */
+/* $Id: dnssec-signzone.c,v 1.182 2004/08/28 06:16:51 marka Exp $ */
 
 #include <config.h>
 
@@ -31,6 +31,7 @@
 #include <isc/mem.h>
 #include <isc/mutex.h>
 #include <isc/os.h>
+#include <isc/print.h>
 #include <isc/serial.h>
 #include <isc/stdio.h>
 #include <isc/string.h>
index 365521ad43d1ef6d9470c057c9524375270dacb6..ec53476fdcd30205b06c4ed9b24d5f956167f0e7 100644 (file)
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: notify.c,v 1.30 2004/03/05 04:57:48 marka Exp $ */
+/* $Id: notify.c,v 1.31 2004/08/28 06:16:52 marka Exp $ */
 
 #include <config.h>
 
 #include <isc/log.h>
+#include <isc/print.h>
 
 #include <dns/message.h>
 #include <dns/rdataset.h>
index a4a4e75b13c23cd8202d579697e9e0cdf1fd0463..ae4bd1cee537fa567a7395d13dafb2c1eb0ee528 100644 (file)
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: nsecify.c,v 1.3 2004/03/05 04:58:39 marka Exp $ */
+/* $Id: nsecify.c,v 1.4 2004/08/28 06:16:52 marka Exp $ */
 
 #include <config.h>
 
 #include <stdlib.h>
 
 #include <isc/mem.h>
+#include <isc/print.h>
 #include <isc/string.h>
 
 #include <dns/db.h>
index 90c0c3a2f4c837d8153a097a3357422a86b926a5..e342f85008e9ace67808926ba3c550c46838897a 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: rwlock_test.c,v 1.21 2004/03/05 04:58:39 marka Exp $ */
+/* $Id: rwlock_test.c,v 1.22 2004/08/28 06:16:53 marka Exp $ */
 
 #include <config.h>
 
@@ -23,6 +23,7 @@
 #include <stdlib.h>
 #include <unistd.h>
 
+#include <isc/print.h>
 #include <isc/thread.h>
 #include <isc/rwlock.h>
 #include <isc/string.h>
index 74543e10f0dc22b78b97cdeae24a53b7b957ebf8..a2b478652be0c9ca3097a1fa3c769cfc920dd74a 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: shutdown_test.c,v 1.20 2004/03/05 04:58:39 marka Exp $ */
+/* $Id: shutdown_test.c,v 1.21 2004/08/28 06:16:53 marka Exp $ */
 
 #include <config.h>
 
@@ -24,6 +24,7 @@
 
 #include <isc/app.h>
 #include <isc/mem.h>
+#include <isc/print.h>
 #include <isc/task.h>
 #include <isc/time.h>
 #include <isc/timer.h>
index e7e8a233b56b0fd9b30ca282ee9a8061574119e2..058b4971b1c34cfebd55745cdd9eda1a420a0725 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: sock_test.c,v 1.49 2004/03/05 04:58:39 marka Exp $ */
+/* $Id: sock_test.c,v 1.50 2004/08/28 06:16:54 marka Exp $ */
 
 #include <config.h>
 
@@ -24,6 +24,7 @@
 #include <unistd.h>
 
 #include <isc/mem.h>
+#include <isc/print.h>
 #include <isc/task.h>
 #include <isc/socket.h>
 #include <isc/timer.h>
index 123279c6a49f3ad5c98d0ee497b1de241c6bb822..7e10b4d1e61aef6d938f69270475d06d897c6b9f 100755 (executable)
--- a/configure
+++ b/configure
@@ -14,7 +14,7 @@
 # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 # PERFORMANCE OF THIS SOFTWARE.
 #
-# $Id: configure,v 1.344 2004/07/23 04:35:08 marka Exp $
+# $Id: configure,v 1.345 2004/08/28 06:20:13 marka Exp $
 #
 # Portions Copyright (C) 1996-2001  Nominum, Inc.
 #
@@ -29,7 +29,7 @@
 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
 # OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-# From configure.in Revision: 1.360 .
+# From configure.in Revision: 1.361 .
 # Guess values for system-dependent variables and create Makefiles.
 # Generated by GNU Autoconf 2.59.
 #
@@ -495,7 +495,7 @@ ac_includes_default="\
 # include <unistd.h>
 #endif"
 
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS subdirs build build_cpu build_vendor build_os host host_cpu host_vendor host_os SET_MAKE RANLIB ac_ct_RANLIB INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA STD_CINCLUDES STD_CDEFINES STD_CWARNINGS CCOPT AR ARFLAGS LN ETAGS PERL CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP EGREP ISC_PLATFORM_HAVELONGLONG ISC_PLATFORM_HAVELIFCONF ISC_PLATFORM_NEEDSYSSELECTH LWRES_PLATFORM_NEEDSYSSELECTH USE_OPENSSL DST_OPENSSL_INC USE_GSSAPI DST_GSSAPI_INC DNS_CRYPTO_LIBS ALWAYS_DEFINES ISC_PLATFORM_USETHREADS ISC_THREAD_DIR MKDEPCC MKDEPCFLAGS MKDEPPROG IRIX_DNSSEC_WARNINGS_HACK purify_path PURIFY LN_S ECHO ac_ct_AR STRIP ac_ct_STRIP CXX CXXFLAGS ac_ct_CXX CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL O A SA LIBTOOL_MKDEP_SED LIBTOOL_MODE_COMPILE LIBTOOL_MODE_INSTALL LIBTOOL_MODE_LINK LIBBIND ISC_PLATFORM_HAVEIPV6 LWRES_PLATFORM_HAVEIPV6 ISC_PLATFORM_NEEDNETINETIN6H LWRES_PLATFORM_NEEDNETINETIN6H ISC_PLATFORM_NEEDNETINET6IN6H LWRES_PLATFORM_NEEDNETINET6IN6H ISC_PLATFORM_HAVEINADDR6 LWRES_PLATFORM_HAVEINADDR6 ISC_PLATFORM_NEEDIN6ADDRANY LWRES_PLATFORM_NEEDIN6ADDRANY ISC_PLATFORM_NEEDIN6ADDRLOOPBACK LWRES_PLATFORM_NEEDIN6ADDRLOOPBACK ISC_PLATFORM_HAVEIN6PKTINFO ISC_PLATFORM_FIXIN6ISADDR ISC_IPV6_H ISC_IPV6_O ISC_ISCIPV6_O ISC_IPV6_C LWRES_HAVE_SIN6_SCOPE_ID ISC_PLATFORM_HAVESCOPEID ISC_PLATFORM_HAVEIF_LADDRREQ ISC_PLATFORM_HAVEIF_LADDRCONF ISC_PLATFORM_NEEDNTOP ISC_PLATFORM_NEEDPTON ISC_PLATFORM_NEEDATON ISC_PLATFORM_HAVESALEN LWRES_PLATFORM_HAVESALEN ISC_PLATFORM_MSGHDRFLAVOR ISC_PLATFORM_NEEDPORTT ISC_LWRES_NEEDADDRINFO ISC_LWRES_NEEDRRSETINFO ISC_LWRES_SETHOSTENTINT ISC_LWRES_ENDHOSTENTINT ISC_LWRES_GETNETBYADDRINADDR ISC_LWRES_SETNETENTINT ISC_LWRES_ENDNETENTINT ISC_LWRES_GETHOSTBYADDRVOID ISC_LWRES_NEEDHERRNO ISC_LWRES_GETIPNODEPROTO ISC_LWRES_GETADDRINFOPROTO ISC_LWRES_GETNAMEINFOPROTO ISC_PLATFORM_NEEDSTRSEP ISC_PLATFORM_NEEDMEMMOVE ISC_PLATFORM_NEEDSTRTOUL ISC_PLATFORM_NEEDSTRLCPY ISC_PLATFORM_NEEDSTRLCAT ISC_PLATFORM_NEEDSPRINTF ISC_PLATFORM_NEEDVSNPRINTF ISC_EXTRA_OBJS ISC_EXTRA_SRCS ISC_PLATFORM_QUADFORMAT ISC_PLATFORM_RLIMITTYPE ISC_PLATFORM_USEDECLSPEC LWRES_PLATFORM_USEDECLSPEC ISC_PLATFORM_BRACEPTHREADONCEINIT ISC_PLATFORM_HAVEIFNAMETOINDEX OPENJADE JADETEX PDFJADETEX SGMLCATALOG HTMLSTYLE PRINTSTYLE XMLDCL DOCBOOK2MANSPEC BIND9_TOP_BUILDDIR BIND9_ISC_BUILDINCLUDE BIND9_ISCCC_BUILDINCLUDE BIND9_ISCCFG_BUILDINCLUDE BIND9_DNS_BUILDINCLUDE BIND9_LWRES_BUILDINCLUDE BIND9_BIND9_BUILDINCLUDE BIND9_VERSION LIBOBJS LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS subdirs build build_cpu build_vendor build_os host host_cpu host_vendor host_os SET_MAKE RANLIB ac_ct_RANLIB INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA STD_CINCLUDES STD_CDEFINES STD_CWARNINGS CCOPT AR ARFLAGS LN ETAGS PERL CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP EGREP ISC_PLATFORM_HAVELONGLONG ISC_PLATFORM_HAVELIFCONF ISC_PLATFORM_NEEDSYSSELECTH LWRES_PLATFORM_NEEDSYSSELECTH USE_OPENSSL DST_OPENSSL_INC USE_GSSAPI DST_GSSAPI_INC DNS_CRYPTO_LIBS ALWAYS_DEFINES ISC_PLATFORM_USETHREADS ISC_THREAD_DIR MKDEPCC MKDEPCFLAGS MKDEPPROG IRIX_DNSSEC_WARNINGS_HACK purify_path PURIFY LN_S ECHO ac_ct_AR STRIP ac_ct_STRIP CXX CXXFLAGS ac_ct_CXX CXXCPP F77 FFLAGS ac_ct_F77 LIBTOOL O A SA LIBTOOL_MKDEP_SED LIBTOOL_MODE_COMPILE LIBTOOL_MODE_INSTALL LIBTOOL_MODE_LINK LIBBIND ISC_PLATFORM_HAVEIPV6 LWRES_PLATFORM_HAVEIPV6 ISC_PLATFORM_NEEDNETINETIN6H LWRES_PLATFORM_NEEDNETINETIN6H ISC_PLATFORM_NEEDNETINET6IN6H LWRES_PLATFORM_NEEDNETINET6IN6H ISC_PLATFORM_HAVEINADDR6 LWRES_PLATFORM_HAVEINADDR6 ISC_PLATFORM_NEEDIN6ADDRANY LWRES_PLATFORM_NEEDIN6ADDRANY ISC_PLATFORM_NEEDIN6ADDRLOOPBACK LWRES_PLATFORM_NEEDIN6ADDRLOOPBACK ISC_PLATFORM_HAVEIN6PKTINFO ISC_PLATFORM_FIXIN6ISADDR ISC_IPV6_H ISC_IPV6_O ISC_ISCIPV6_O ISC_IPV6_C LWRES_HAVE_SIN6_SCOPE_ID ISC_PLATFORM_HAVESCOPEID ISC_PLATFORM_HAVEIF_LADDRREQ ISC_PLATFORM_HAVEIF_LADDRCONF ISC_PLATFORM_NEEDNTOP ISC_PLATFORM_NEEDPTON ISC_PLATFORM_NEEDATON ISC_PLATFORM_HAVESALEN LWRES_PLATFORM_HAVESALEN ISC_PLATFORM_MSGHDRFLAVOR ISC_PLATFORM_NEEDPORTT ISC_LWRES_NEEDADDRINFO ISC_LWRES_NEEDRRSETINFO ISC_LWRES_SETHOSTENTINT ISC_LWRES_ENDHOSTENTINT ISC_LWRES_GETNETBYADDRINADDR ISC_LWRES_SETNETENTINT ISC_LWRES_ENDNETENTINT ISC_LWRES_GETHOSTBYADDRVOID ISC_LWRES_NEEDHERRNO ISC_LWRES_GETIPNODEPROTO ISC_LWRES_GETADDRINFOPROTO ISC_LWRES_GETNAMEINFOPROTO ISC_PLATFORM_NEEDSTRSEP ISC_PLATFORM_NEEDMEMMOVE ISC_PLATFORM_NEEDSTRTOUL ISC_PLATFORM_NEEDSTRLCPY ISC_PLATFORM_NEEDSTRLCAT ISC_PLATFORM_NEEDSPRINTF LWRES_PLATFORM_NEEDSPRINTF ISC_PLATFORM_NEEDVSNPRINTF LWRES_PLATFORM_NEEDVSNPRINTF ISC_EXTRA_OBJS ISC_EXTRA_SRCS ISC_PLATFORM_QUADFORMAT ISC_PLATFORM_RLIMITTYPE ISC_PLATFORM_USEDECLSPEC LWRES_PLATFORM_USEDECLSPEC ISC_PLATFORM_BRACEPTHREADONCEINIT ISC_PLATFORM_HAVEIFNAMETOINDEX OPENJADE JADETEX PDFJADETEX SGMLCATALOG HTMLSTYLE PRINTSTYLE XMLDCL DOCBOOK2MANSPEC BIND9_TOP_BUILDDIR BIND9_ISC_BUILDINCLUDE BIND9_ISCCC_BUILDINCLUDE BIND9_ISCCFG_BUILDINCLUDE BIND9_DNS_BUILDINCLUDE BIND9_LWRES_BUILDINCLUDE BIND9_BIND9_BUILDINCLUDE BIND9_VERSION LIBOBJS LTLIBOBJS'
 ac_subst_files='BIND9_MAKE_INCLUDES BIND9_MAKE_RULES LIBISC_API LIBISCCC_API LIBISCCFG_API LIBDNS_API LIBBIND9_API LIBLWRES_API'
 
 # Initialize some variables set by options.
@@ -25453,17 +25453,20 @@ if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
 ISC_PRINT_OBJS="print.$O"
 ISC_PRINT_SRCS="print.c"
 ISC_PLATFORM_NEEDSPRINTF="#define ISC_PLATFORM_NEEDSPRINTF"
+LWRES_PLATFORM_NEEDSPRINTF="#define LWRES_PLATFORM_NEEDSPRINTF"
 
 else
   echo "$as_me: failed program was:" >&5
 sed 's/^/| /' conftest.$ac_ext >&5
 
 ISC_PLATFORM_NEEDSPRINTF="#undef ISC_PLATFORM_NEEDSPRINTF"
+ LWRES_PLATFORM_NEEDSPRINTF="#undef LWRES_PLATFORM_NEEDSPRINTF"
 
 fi
 rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 
 
+
 echo "$as_me:$LINENO: checking for vsnprintf" >&5
 echo $ECHO_N "checking for vsnprintf... $ECHO_C" >&6
 if test "${ac_cv_func_vsnprintf+set}" = set; then
@@ -25556,13 +25559,16 @@ echo "$as_me:$LINENO: result: $ac_cv_func_vsnprintf" >&5
 echo "${ECHO_T}$ac_cv_func_vsnprintf" >&6
 if test $ac_cv_func_vsnprintf = yes; then
   ISC_PLATFORM_NEEDVSNPRINTF="#undef ISC_PLATFORM_NEEDVSNPRINTF"
+        LWRES_PLATFORM_NEEDVSNPRINTF="#undef LWRES_PLATFORM_NEEDVSNPRINTF"
 else
   ISC_PRINT_OBJS="print.$O"
         ISC_PRINT_SRCS="print.c"
         ISC_PLATFORM_NEEDVSNPRINTF="#define ISC_PLATFORM_NEEDVSNPRINTF 1"
+        LWRES_PLATFORM_NEEDVSNPRINTF="#define LWRES_PLATFORM_NEEDVSNPRINTF 1"
 fi
 
 
+
 ISC_EXTRA_OBJS="$ISC_EXTRA_OBJS $ISC_PRINT_OBJS"
 ISC_EXTRA_SRCS="$ISC_EXTRA_SRCS $ISC_PRINT_SRCS"
 
@@ -28088,7 +28094,9 @@ s,@ISC_PLATFORM_NEEDSTRTOUL@,$ISC_PLATFORM_NEEDSTRTOUL,;t t
 s,@ISC_PLATFORM_NEEDSTRLCPY@,$ISC_PLATFORM_NEEDSTRLCPY,;t t
 s,@ISC_PLATFORM_NEEDSTRLCAT@,$ISC_PLATFORM_NEEDSTRLCAT,;t t
 s,@ISC_PLATFORM_NEEDSPRINTF@,$ISC_PLATFORM_NEEDSPRINTF,;t t
+s,@LWRES_PLATFORM_NEEDSPRINTF@,$LWRES_PLATFORM_NEEDSPRINTF,;t t
 s,@ISC_PLATFORM_NEEDVSNPRINTF@,$ISC_PLATFORM_NEEDVSNPRINTF,;t t
+s,@LWRES_PLATFORM_NEEDVSNPRINTF@,$LWRES_PLATFORM_NEEDVSNPRINTF,;t t
 s,@ISC_EXTRA_OBJS@,$ISC_EXTRA_OBJS,;t t
 s,@ISC_EXTRA_SRCS@,$ISC_EXTRA_SRCS,;t t
 s,@ISC_PLATFORM_QUADFORMAT@,$ISC_PLATFORM_QUADFORMAT,;t t
index f01e72a2aefc8eb3cc1fc3a181908ca45a00054e..dad10a36b56ff86f584366e9834f4c5026f2a9a4 100644 (file)
@@ -18,7 +18,7 @@ AC_DIVERT_PUSH(1)dnl
 esyscmd([sed "s/^/# /" COPYRIGHT])dnl
 AC_DIVERT_POP()dnl
 
-AC_REVISION($Revision: 1.360 $)
+AC_REVISION($Revision: 1.361 $)
 
 AC_INIT(lib/dns/name.c)
 AC_PREREQ(2.13)
@@ -1675,17 +1675,23 @@ AC_TRY_COMPILE([
 ISC_PRINT_OBJS="print.$O"
 ISC_PRINT_SRCS="print.c"
 ISC_PLATFORM_NEEDSPRINTF="#define ISC_PLATFORM_NEEDSPRINTF"
+LWRES_PLATFORM_NEEDSPRINTF="#define LWRES_PLATFORM_NEEDSPRINTF"
 ],
-[ISC_PLATFORM_NEEDSPRINTF="#undef ISC_PLATFORM_NEEDSPRINTF"]
+[ISC_PLATFORM_NEEDSPRINTF="#undef ISC_PLATFORM_NEEDSPRINTF"
+ LWRES_PLATFORM_NEEDSPRINTF="#undef LWRES_PLATFORM_NEEDSPRINTF"]
 )
 AC_SUBST(ISC_PLATFORM_NEEDSPRINTF)
+AC_SUBST(LWRES_PLATFORM_NEEDSPRINTF)
 
 AC_CHECK_FUNC(vsnprintf,
-       [ISC_PLATFORM_NEEDVSNPRINTF="#undef ISC_PLATFORM_NEEDVSNPRINTF"],
+       [ISC_PLATFORM_NEEDVSNPRINTF="#undef ISC_PLATFORM_NEEDVSNPRINTF"
+        LWRES_PLATFORM_NEEDVSNPRINTF="#undef LWRES_PLATFORM_NEEDVSNPRINTF"],
        [ISC_PRINT_OBJS="print.$O"
         ISC_PRINT_SRCS="print.c"
-        ISC_PLATFORM_NEEDVSNPRINTF="#define ISC_PLATFORM_NEEDVSNPRINTF 1"])
+        ISC_PLATFORM_NEEDVSNPRINTF="#define ISC_PLATFORM_NEEDVSNPRINTF 1"
+        LWRES_PLATFORM_NEEDVSNPRINTF="#define LWRES_PLATFORM_NEEDVSNPRINTF 1"])
 AC_SUBST(ISC_PLATFORM_NEEDVSNPRINTF)
+AC_SUBST(LWRES_PLATFORM_NEEDVSNPRINTF)
 ISC_EXTRA_OBJS="$ISC_EXTRA_OBJS $ISC_PRINT_OBJS"
 ISC_EXTRA_SRCS="$ISC_EXTRA_SRCS $ISC_PRINT_SRCS"
 
index 5bea3ee6e81d013917a30000d494ff58a8501802..f10e398f380b96a82d8c5a2a50bb2e5e36f3de27 100644 (file)
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: byaddr.c,v 1.34 2004/03/05 05:09:18 marka Exp $ */
+/* $Id: byaddr.c,v 1.35 2004/08/28 06:16:55 marka Exp $ */
 
 #include <config.h>
 
 #include <isc/mem.h>
 #include <isc/netaddr.h>
+#include <isc/print.h>
 #include <isc/string.h>                /* Required for HP/UX (and others?) */
 #include <isc/task.h>
 #include <isc/util.h>
index 3b2ce7ec6e8154f801ef8a9e7f110b111e153c34..6309b025d06d262506fad3f3ffe8dc6c11a2efbe 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: masterdump.c,v 1.74 2004/05/14 00:55:57 marka Exp $ */
+/* $Id: masterdump.c,v 1.75 2004/08/28 06:16:56 marka Exp $ */
 
 #include <config.h>
 
@@ -25,6 +25,7 @@
 #include <isc/file.h>
 #include <isc/magic.h>
 #include <isc/mem.h>
+#include <isc/print.h>
 #include <isc/stdio.h>
 #include <isc/string.h>
 #include <isc/task.h>
index a691559f97f0e9ef73410e22e76cd76aa10b4c41..dc5aa2b9d017da34fa2da5e9debd268d992cd751 100644 (file)
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: resolver.c,v 1.293 2004/08/10 00:38:56 marka Exp $ */
+/* $Id: resolver.c,v 1.294 2004/08/28 06:16:56 marka Exp $ */
 
 #include <config.h>
 
+#include <isc/print.h>
 #include <isc/string.h>
 #include <isc/task.h>
 #include <isc/timer.h>
index b40f0b9e61b76ba321668f32337d52168c13046d..3ec9d4497d6837236528e1906bfc8323ef9d7600 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: time.c,v 1.26 2004/03/16 05:52:19 marka Exp $ */
+/* $Id: time.c,v 1.27 2004/08/28 06:16:56 marka Exp $ */
 
 #include <config.h>
 
@@ -23,6 +23,7 @@
 #include <isc/string.h>                /* Required for HP/UX (and others?) */
 #include <time.h>
 
+#include <isc/print.h>
 #include <isc/region.h>
 #include <isc/stdtime.h>
 #include <isc/util.h>
index 0659c5f1dd0f635e8f2df6f738081ce5ca0e1b34..827fd52a286d4637a987a20a9a3134b34ea0ce45 100644 (file)
@@ -17,7 +17,7 @@
 
 #if defined(LIBC_SCCS) && !defined(lint)
 static char rcsid[] =
-       "$Id: inet_ntop.c,v 1.14 2004/03/05 05:10:45 marka Exp $";
+       "$Id: inet_ntop.c,v 1.15 2004/08/28 06:16:57 marka Exp $";
 #endif /* LIBC_SCCS and not lint */
 
 #include <config.h>
@@ -27,6 +27,7 @@ static char rcsid[] =
 #include <string.h>
 
 #include <isc/net.h>
+#include <isc/print.h>
 
 #define NS_INT16SZ      2
 #define NS_IN6ADDRSZ   16
index 290b673703ba1c39ec2f3cc1588707d569411a39..337f609550d0cccd4ba170e5f56fe30797cadc8e 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: lex.c,v 1.78 2004/03/05 05:10:46 marka Exp $ */
+/* $Id: lex.c,v 1.79 2004/08/28 06:16:57 marka Exp $ */
 
 #include <config.h>
 
@@ -29,6 +29,7 @@
 #include <isc/mem.h>
 #include <isc/msgs.h>
 #include <isc/parseint.h>
+#include <isc/print.h>
 #include <isc/stdio.h>
 #include <isc/string.h>
 #include <isc/util.h>
index 5f2d06f5be0aeb4e461ef3f0e7327064a9e4097e..66fffecbda06007e121bab6388ee67c1d9545d83 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: interfaceiter.c,v 1.37 2004/06/19 00:48:15 marka Exp $ */
+/* $Id: interfaceiter.c,v 1.38 2004/08/28 06:16:57 marka Exp $ */
 
 #include <config.h>
 
@@ -36,6 +36,7 @@
 #include <isc/mem.h>
 #include <isc/msgs.h>
 #include <isc/net.h>
+#include <isc/print.h>
 #include <isc/result.h>
 #include <isc/strerror.h>
 #include <isc/string.h>
index 9f15272e9c46b2227bd498fc052e6fd3b34402d9..5c723116088e215d28015594ca611aff7d99b379 100644 (file)
@@ -16,7 +16,7 @@
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: cc.c,v 1.10 2004/03/05 05:12:09 marka Exp $ */
+/* $Id: cc.c,v 1.11 2004/08/28 06:16:58 marka Exp $ */
 
 #include <config.h>
 
@@ -26,6 +26,7 @@
 
 #include <isc/assertions.h>
 #include <isc/hmacmd5.h>
+#include <isc/print.h>
 #include <isc/stdlib.h>
 
 #include <isccc/alist.h>
index 0440e551fa6a9ce5483f2c079c83270b61bbb3c3..95b65656574aac08977c786c91d71ad6f002f986 100644 (file)
@@ -13,7 +13,7 @@
 # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 # PERFORMANCE OF THIS SOFTWARE.
 
-# $Id: Makefile.in,v 1.29 2004/07/20 07:13:43 marka Exp $
+# $Id: Makefile.in,v 1.30 2004/08/28 06:16:59 marka Exp $
 
 srcdir =       @srcdir@
 VPATH =                @srcdir@
@@ -35,14 +35,14 @@ OBJS =              context.@O@ gai_strerror.@O@ getaddrinfo.@O@ gethost.@O@ \
                getipnode.@O@ getnameinfo.@O@ getrrset.@O@ herror.@O@ \
                lwbuffer.@O@ lwconfig.@O@ lwpacket.@O@ lwresutil.@O@ \
                lwres_gabn.@O@ lwres_gnba.@O@ lwres_grbn.@O@ lwres_noop.@O@ \
-               lwinetaton.@O@ lwinetpton.@O@ lwinetntop.@O@
+               lwinetaton.@O@ lwinetpton.@O@ lwinetntop.@O@ print.@O@
 
 # Alphabetically
 SRCS =         context.c gai_strerror.c getaddrinfo.c gethost.c \
                getipnode.c getnameinfo.c getrrset.c herror.c \
                lwbuffer.c lwconfig.c lwpacket.c lwresutil.c \
                lwres_gabn.c lwres_gnba.c lwres_grbn.c lwres_noop.c \
-               lwinetaton.c lwinetpton.c lwinetntop.c
+               lwinetaton.c lwinetpton.c lwinetntop.c print.c
 
 LIBS =         @LIBS@
 
index 2409ff9b10ea438761af34a909d985d4a4f55633..627a81c804d2201e9c310fb1aa386cb53a06cad8 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: getnameinfo.c,v 1.34 2004/03/05 05:12:46 marka Exp $ */
+/* $Id: getnameinfo.c,v 1.35 2004/08/28 06:16:59 marka Exp $ */
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -61,6 +61,7 @@
 #include <lwres/lwres.h>
 #include <lwres/net.h>
 #include <lwres/netdb.h>
+#include "print_p.h"
 
 #include "assert_p.h"
 
index 78faa7810b87f82e294cff89300631133c041878..c28a596b67550a1161a214879cb39a2537012e22 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: platform.h.in,v 1.14 2004/03/05 05:12:53 marka Exp $ */
+/* $Id: platform.h.in,v 1.15 2004/08/28 06:17:00 marka Exp $ */
 
 #ifndef LWRES_PLATFORM_H
 #define LWRES_PLATFORM_H 1
  */
 @LWRES_PLATFORM_USEDECLSPEC@
 
+/*
+ * Defined this system needs vsnprintf() and snprintf().
+ */
+@LWRES_PLATFORM_NEEDVSNPRINTF@
+/*
+ * If this system need a modern sprintf() that returns (int) not (char*).
+ */
+@LWRES_PLATFORM_NEEDSPRINTF@
+
 #ifndef LWRES_PLATFORM_USEDECLSPEC
 #define LIBLWRES_EXTERNAL_DATA
 #else
index e396556c2728e709c9107039992af4bc4eb3802c..d95c98e80dbe1455edcac769dac640475d455d77 100644 (file)
@@ -17,7 +17,7 @@
 
 #if defined(LIBC_SCCS) && !defined(lint)
 static char rcsid[] =
-       "$Id: lwinetntop.c,v 1.12 2004/03/05 05:12:46 marka Exp $";
+       "$Id: lwinetntop.c,v 1.13 2004/08/28 06:16:59 marka Exp $";
 #endif /* LIBC_SCCS and not lint */
 
 #include <config.h>
@@ -27,6 +27,7 @@ static char rcsid[] =
 #include <string.h>
 
 #include <lwres/net.h>
+#include "print_p.h"
 
 #define NS_INT16SZ      2
 #define NS_IN6ADDRSZ   16
diff --git a/lib/lwres/print.c b/lib/lwres/print.c
new file mode 100644 (file)
index 0000000..8911e00
--- /dev/null
@@ -0,0 +1,553 @@
+/*
+ * Copyright (C) 2004  Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 1999-2001, 2003  Internet Software Consortium.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* $Id: print.c,v 1.2 2004/08/28 06:20:14 marka Exp $ */
+
+#include <config.h>
+
+#include <ctype.h>
+#include <stdio.h>             /* for sprintf */
+
+#define        LWRES__PRINT_SOURCE     /* Used to get the lwres_print_* prototypes. */
+
+#include <stdlib.h>
+
+#include "assert_p.h"
+#include "print_p.h"
+
+int
+lwres__print_sprintf(char *str, const char *format, ...) {
+       va_list ap;
+
+       va_start(ap, format);
+       vsprintf(str, format, ap);
+       va_end(ap);
+       return (strlen(str));
+}
+
+/*
+ * Return length of string that would have been written if not truncated.
+ */
+
+int
+lwres__print_snprintf(char *str, size_t size, const char *format, ...) {
+       va_list ap;
+       int ret;
+
+       va_start(ap, format);
+       ret = vsnprintf(str, size, format, ap);
+       va_end(ap);
+       return (ret);
+
+}
+
+/*
+ * Return length of string that would have been written if not truncated.
+ */
+
+int
+lwres__print_vsnprintf(char *str, size_t size, const char *format, va_list ap) {
+       int h;
+       int l;
+       int q;
+       int alt;
+       int zero;
+       int left;
+       int plus;
+       int space;
+       int neg;
+       long long tmpi;
+       unsigned long long tmpui;
+       unsigned long width;
+       unsigned long precision;
+       unsigned int length;
+       char buf[1024];
+       char c;
+       void *v;
+       char *save = str;
+       const char *cp;
+       const char *head;
+       int count = 0;
+       int pad;
+       int zeropad;
+       int dot;
+       double dbl;
+#ifdef HAVE_LONG_DOUBLE
+       long double ldbl;
+#endif
+       char fmt[32];
+
+       INSIST(str != NULL);
+       INSIST(format != NULL);
+
+       while (*format != '\0') {
+               if (*format != '%') {
+                       if (size > 1) {
+                               *str++ = *format;
+                               size--;
+                       }
+                       count++;
+                       format++;
+                       continue;
+               }
+               format++;
+
+               /*
+                * Reset flags.
+                */
+               dot = neg = space = plus = left = zero = alt = h = l = q = 0;
+               width = precision = 0;
+               head = "";
+               length = pad = zeropad = 0;
+
+               do {
+                       if (*format == '#') {
+                               alt = 1;
+                               format++;
+                       } else if (*format == '-') {
+                               left = 1;
+                               zero = 0;
+                               format++;
+                       } else if (*format == ' ') {
+                               if (!plus)
+                                       space = 1;
+                               format++;
+                       } else if (*format == '+') {
+                               plus = 1;
+                               space = 0;
+                               format++;
+                       } else if (*format == '0') {
+                               if (!left)
+                                       zero = 1;
+                               format++;
+                       } else
+                               break;
+               } while (1);
+
+               /*
+                * Width.
+                */
+               if (*format == '*') {
+                       width = va_arg(ap, int);
+                       format++;
+               } else if (isdigit((unsigned char)*format)) {
+                       char *e;
+                       width = strtoul(format, &e, 10);
+                       format = e;
+               }
+
+               /*
+                * Precision.
+                */
+               if (*format == '.') {
+                       format++;
+                       dot = 1;
+                       if (*format == '*') {
+                               precision = va_arg(ap, int);
+                               format++;
+                       } else if (isdigit((unsigned char)*format)) {
+                               char *e;
+                               precision = strtoul(format, &e, 10);
+                               format = e;
+                       }
+               }
+
+               switch (*format) {
+               case '\0':
+                       continue;
+               case '%':
+                       if (size > 1) {
+                               *str++ = *format;
+                               size--;
+                       }
+                       count++;
+                       break;
+               case 'q':
+                       q = 1;
+                       format++;
+                       goto doint;
+               case 'h':
+                       h = 1;
+                       format++;
+                       goto doint;
+               case 'l':
+                       l = 1;
+                       format++;
+                       if (*format == 'l') {
+                               q = 1;
+                               format++;
+                       }
+                       goto doint;
+               case 'n':
+               case 'i':
+               case 'd':
+               case 'o':
+               case 'u':
+               case 'x':
+               case 'X':
+               doint:
+                       if (precision != 0)
+                               zero = 0;
+                       switch (*format) {
+                       case 'n':
+                               if (h) {
+                                       short int *p;
+                                       p = va_arg(ap, short *);
+                                       REQUIRE(p != NULL);
+                                       *p = str - save;
+                               } else if (l) {
+                                       long int *p;
+                                       p = va_arg(ap, long *);
+                                       REQUIRE(p != NULL);
+                                       *p = str - save;
+                               } else {
+                                       int *p;
+                                       p = va_arg(ap, int *);
+                                       REQUIRE(p != NULL);
+                                       *p = str - save;
+                               }
+                               break;
+                       case 'i':
+                       case 'd':
+                               if (q)
+                                       tmpi = va_arg(ap, long long int);
+                               else if (l)
+                                       tmpi = va_arg(ap, long int);
+                               else
+                                       tmpi = va_arg(ap, int);
+                               if (tmpi < 0) {
+                                       head = "-";
+                                       tmpui = -tmpi;
+                               } else {
+                                       if (plus)
+                                               head = "+";
+                                       else if (space)
+                                               head = " ";
+                                       else
+                                               head = "";
+                                       tmpui = tmpi;
+                               }
+                               sprintf(buf, "%llu",
+                                       tmpui);
+                               goto printint;
+                       case 'o':
+                               if (q)
+                                       tmpui = va_arg(ap,
+                                                      unsigned long long int);
+                               else if (l)
+                                       tmpui = va_arg(ap, long int);
+                               else
+                                       tmpui = va_arg(ap, int);
+                               sprintf(buf,
+                                       alt ? "%#llo" : "%llo", tmpui);
+                               goto printint;
+                       case 'u':
+                               if (q)
+                                       tmpui = va_arg(ap,
+                                                      unsigned long long int);
+                               else if (l)
+                                       tmpui = va_arg(ap, unsigned long int);
+                               else
+                                       tmpui = va_arg(ap, unsigned int);
+                               sprintf(buf, "%llu", tmpui);
+                               goto printint;
+                       case 'x':
+                               if (q)
+                                       tmpui = va_arg(ap,
+                                                      unsigned long long int);
+                               else if (l)
+                                       tmpui = va_arg(ap, unsigned long int);
+                               else
+                                       tmpui = va_arg(ap, unsigned int);
+                               if (alt) {
+                                       head = "0x";
+                                       if (precision > 2)
+                                               precision -= 2;
+                               }
+                               sprintf(buf, "%llx", tmpui);
+                               goto printint;
+                       case 'X':
+                               if (q)
+                                       tmpui = va_arg(ap,
+                                                      unsigned long long int);
+                               else if (l)
+                                       tmpui = va_arg(ap, unsigned long int);
+                               else
+                                       tmpui = va_arg(ap, unsigned int);
+                               if (alt) {
+                                       head = "0X";
+                                       if (precision > 2)
+                                               precision -= 2;
+                               }
+                               sprintf(buf, "%llX", tmpui);
+                               goto printint;
+                       printint:
+                               if (precision != 0 || width != 0) {
+                                       length = strlen(buf);
+                                       if (length < precision)
+                                               zeropad = precision - length;
+                                       else if (length < width && zero)
+                                               zeropad = width - length;
+                                       if (width != 0) {
+                                               pad = width - length -
+                                                     zeropad - strlen(head);
+                                               if (pad < 0)
+                                                       pad = 0;
+                                       }
+                               }
+                               count += strlen(head) + strlen(buf) + pad +
+                                        zeropad;
+                               if (!left) {
+                                       while (pad > 0 && size > 1) {
+                                               *str++ = ' ';
+                                               size--;
+                                               pad--;
+                                       }
+                               }
+                               cp = head;
+                               while (*cp != '\0' && size > 1) {
+                                       *str++ = *cp++;
+                                       size--;
+                               }
+                               while (zeropad > 0 && size > 1) {
+                                       *str++ = '0';
+                                       size--;
+                                       zeropad--;
+                               }
+                               cp = buf;
+                               while (*cp != '\0' && size > 1) {
+                                       *str++ = *cp++;
+                                       size--;
+                               }
+                               while (pad > 0 && size > 1) {
+                                       *str++ = ' ';
+                                       size--;
+                                       pad--;
+                               }
+                               break;
+                       default:
+                               break;
+                       }
+                       break;
+               case 's':
+                       cp = va_arg(ap, char *);
+                       REQUIRE(cp != NULL);
+
+                       if (precision != 0) {
+                               /*
+                                * cp need not be NULL terminated.
+                                */
+                               const char *tp;
+                               unsigned long n;
+
+                               n = precision;
+                               tp = cp;
+                               while (n != 0 && *tp != '\0')
+                                       n--, tp++;
+                               length = precision - n;
+                       } else {
+                               length = strlen(cp);
+                       }
+                       if (width != 0) {
+                               pad = width - length;
+                               if (pad < 0)
+                                       pad = 0;
+                       }
+                       count += pad + length;
+                       if (!left)
+                               while (pad > 0 && size > 1) {
+                                       *str++ = ' ';
+                                       size--;
+                                       pad--;
+                               }
+                       if (precision != 0)
+                               while (precision > 0 && *cp != '\0' &&
+                                      size > 1) {
+                                       *str++ = *cp++;
+                                       size--;
+                                       precision--;
+                               }
+                       else
+                               while (*cp != '\0' && size > 1) {
+                                       *str++ = *cp++;
+                                       size--;
+                               }
+                       while (pad > 0 && size > 1) {
+                               *str++ = ' ';
+                               size--;
+                               pad--;
+                       }
+                       break;
+               case 'c':
+                       c = va_arg(ap, int);
+                       if (width > 0) {
+                               count += width;
+                               width--;
+                               if (left) {
+                                       *str++ = c;
+                                       size--;
+                               }
+                               while (width-- > 0 && size > 1) {
+                                       *str++ = ' ';
+                                       size--;
+                               }
+                               if (!left && size > 1) {
+                                       *str++ = c;
+                                       size--;
+                               }
+                       } else {
+                               count++;
+                               if (size > 1) {
+                                       *str++ = c;
+                                       size--;
+                               }
+                       }
+                       break;
+               case 'p':
+                       v = va_arg(ap, void *);
+                       sprintf(buf, "%p", v);
+                       length = strlen(buf);
+                       if (precision > length)
+                               zeropad = precision - length;
+                       if (width > 0) {
+                               pad = width - length - zeropad;
+                               if (pad < 0)
+                                       pad = 0;
+                       }
+                       count += length + pad + zeropad;
+                       if (!left)
+                               while (pad > 0 && size > 1) {
+                                       *str++ = ' ';
+                                       size--;
+                                       pad--;
+                               }
+                       cp = buf;
+                       if (zeropad > 0 && buf[0] == '0' &&
+                           (buf[1] == 'x' || buf[1] == 'X')) {
+                               if (size > 1) {
+                                       *str++ = *cp++;
+                                       size--;
+                               }
+                               if (size > 1) {
+                                       *str++ = *cp++;
+                                       size--;
+                               }
+                               while (zeropad > 0 && size > 1) {
+                                       *str++ = '0';
+                                       size--;
+                                       zeropad--;
+                               }
+                       }
+                       while (*cp != '\0' && size > 1) {
+                               *str++ = *cp++;
+                               size--;
+                       }
+                       while (pad > 0 && size > 1) {
+                               *str++ = ' ';
+                               size--;
+                               pad--;
+                       }
+                       break;
+               case 'D':       /*deprecated*/
+                       INSIST("use %ld instead of %D" == NULL);
+               case 'O':       /*deprecated*/
+                       INSIST("use %lo instead of %O" == NULL);
+               case 'U':       /*deprecated*/
+                       INSIST("use %lu instead of %U" == NULL);
+
+               case 'L':
+#ifdef HAVE_LONG_DOUBLE
+                       l = 1;
+#else
+                       INSIST("long doubles are not supported" == NULL);
+#endif
+                       /*FALLTHROUGH*/
+               case 'e':
+               case 'E':
+               case 'f':
+               case 'g':
+               case 'G':
+                       if (!dot)
+                               precision = 6;
+                       /*
+                        * IEEE floating point.
+                        * MIN 2.2250738585072014E-308
+                        * MAX 1.7976931348623157E+308
+                        * VAX floating point has a smaller range than IEEE.
+                        *
+                        * precisions > 324 don't make much sense.
+                        * if we cap the precision at 512 we will not
+                        * overflow buf.
+                        */
+                       if (precision > 512)
+                               precision = 512;
+                       sprintf(fmt, "%%%s%s.%lu%s%c", alt ? "#" : "",
+                               plus ? "+" : space ? " " : "",
+                               precision, l ? "L" : "", *format);
+                       switch (*format) {
+                       case 'e':
+                       case 'E':
+                       case 'f':
+                       case 'g':
+                       case 'G':
+#ifdef HAVE_LONG_DOUBLE
+                               if (l) {
+                                       ldbl = va_arg(ap, long double);
+                                       sprintf(buf, fmt, ldbl);
+                               } else
+#endif
+                               {
+                                       dbl = va_arg(ap, double);
+                                       sprintf(buf, fmt, dbl);
+                               }
+                               length = strlen(buf);
+                               if (width > 0) {
+                                       pad = width - length;
+                                       if (pad < 0)
+                                               pad = 0;
+                               }
+                               count += length + pad;
+                               if (!left)
+                                       while (pad > 0 && size > 1) {
+                                               *str++ = ' ';
+                                               size--;
+                                               pad--;
+                                       }
+                               cp = buf;
+                               while (*cp != ' ' && size > 1) {
+                                       *str++ = *cp++;
+                                       size--;
+                               }
+                               while (pad > 0 && size > 1) {
+                                       *str++ = ' ';
+                                       size--;
+                                       pad--;
+                               }
+                               break;
+                       default:
+                               continue;
+                       }
+                       break;
+               default:
+                       continue;
+               }
+               format++;
+       }
+       if (size > 0)
+               *str = '\0';
+       return (count);
+}
diff --git a/lib/lwres/print_p.h b/lib/lwres/print_p.h
new file mode 100644 (file)
index 0000000..148a5e4
--- /dev/null
@@ -0,0 +1,86 @@
+/*
+ * Copyright (C) 2004  Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 1999-2001, 2003  Internet Software Consortium.
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* $Id: print_p.h,v 1.2 2004/08/28 06:20:14 marka Exp $ */
+
+#ifndef LWRES_PRINT_P_H
+#define LWRES_PRINT_P_H 1
+
+/***
+ *** Imports
+ ***/
+
+#include <lwres/lang.h>
+#include <lwres/platform.h>
+
+/*
+ * This block allows lib/lwres/print.c to be cleanly compiled even if
+ * the platform does not need it.  The standard Makefile will still
+ * not compile print.c or archive print.o, so this is just to make test
+ * compilation ("make print.o") easier.
+ */
+#if !defined(LWRES_PLATFORM_NEEDVSNPRINTF) && defined(LWRES__PRINT_SOURCE)
+#define LWRES_PLATFORM_NEEDVSNPRINTF
+#endif
+
+#if !defined(LWRES_PLATFORM_NEEDSPRINTF) && defined(LWRES__PRINT_SOURCE)
+#define LWRES_PLATFORM_NEEDSPRINTF
+#endif
+
+/***
+ *** Macros.
+ ***/
+
+#ifdef __GNUC__
+#define LWRES_FORMAT_PRINTF(fmt, args) \
+        __attribute__((__format__(__printf__, fmt, args)))
+#else
+#define LWRES_FORMAT_PRINTF(fmt, args)
+#endif
+
+/***
+ *** Functions
+ ***/
+
+#ifdef LWRES_PLATFORM_NEEDVSNPRINTF
+#include <stdarg.h>
+#include <stddef.h>
+#endif
+
+LWRES_LANG_BEGINDECLS
+
+#ifdef LWRES_PLATFORM_NEEDVSNPRINTF
+int
+lwres__print_vsnprintf(char *str, size_t size, const char *format, va_list ap)
+     LWRES_FORMAT_PRINTF(3, 0);
+#define vsnprintf lwres__print_vsnprintf
+
+int
+lwres__print_snprintf(char *str, size_t size, const char *format, ...)
+     LWRES_FORMAT_PRINTF(3, 4);
+#define snprintf lwres__print_snprintf
+#endif /* LWRES_PLATFORM_NEEDVSNPRINTF */
+
+#ifdef LWRES_PLATFORM_NEEDSPRINTF
+int
+lwres__print_sprintf(char *str, const char *format, ...) LWRES_FORMAT_PRINTF(2, 3);
+#define sprintf lwres__print_sprintf
+#endif
+
+LWRES_LANG_ENDDECLS
+
+#endif /* LWRES_PRINT_P_H */
index 0277e5ac85dbde182f730fb40434ddd498ca1f54..5c04aa8d49d3ec8869b75e965b39cc7a03b13bf1 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: t_api.c,v 1.53 2004/06/21 05:36:40 marka Exp $ */
+/* $Id: t_api.c,v 1.54 2004/08/28 06:17:00 marka Exp $ */
 
 #include <config.h>
 
@@ -33,6 +33,7 @@
 
 #include <isc/boolean.h>
 #include <isc/commandline.h>
+#include <isc/print.h>
 #include <isc/string.h>
 
 #include <dns/compress.h>