[Libreoffice-commits] core.git: configure.ac download.lst external/mdnsresponder external/Module_external.mk Makefile.fetch RepositoryExternal.mk sd/CppunitTest_sd_uimpress.mk sd/Library_sd.mk sd/source

Michael Stahl mstahl at redhat.com
Mon Nov 30 05:11:53 PST 2015


 Makefile.fetch                                              |    1 
 RepositoryExternal.mk                                       |   12 
 configure.ac                                                |    5 
 download.lst                                                |    2 
 external/Module_external.mk                                 |    1 
 external/mdnsresponder/Makefile                             |    7 
 external/mdnsresponder/Module_mdnsresponder.mk              |   20 
 external/mdnsresponder/README                               |    4 
 external/mdnsresponder/StaticLibrary_mDNSResponder.mk       |   37 
 external/mdnsresponder/UnpackedTarball_mDNSResponder.mk     |   14 
 sd/CppunitTest_sd_uimpress.mk                               |    1 
 sd/Library_sd.mk                                            |    9 
 sd/source/ui/remotecontrol/WINNetworkService.cxx            |    1 
 sd/source/ui/remotecontrol/WINNetworkService.hxx            |    2 
 sd/source/ui/remotecontrol/mDNSResponder/CommonServices.h   | 1213 ----
 sd/source/ui/remotecontrol/mDNSResponder/DebugServices.c    | 2978 ------------
 sd/source/ui/remotecontrol/mDNSResponder/DebugServices.h    | 1576 ------
 sd/source/ui/remotecontrol/mDNSResponder/GenLinkedList.c    |  319 -
 sd/source/ui/remotecontrol/mDNSResponder/GenLinkedList.h    |   90 
 sd/source/ui/remotecontrol/mDNSResponder/dllmain.c          |  113 
 sd/source/ui/remotecontrol/mDNSResponder/dns_sd.h           | 2459 ---------
 sd/source/ui/remotecontrol/mDNSResponder/dnssd_clientlib.c  |  366 -
 sd/source/ui/remotecontrol/mDNSResponder/dnssd_clientstub.c | 2219 --------
 sd/source/ui/remotecontrol/mDNSResponder/dnssd_ipc.c        |  161 
 sd/source/ui/remotecontrol/mDNSResponder/dnssd_ipc.h        |  222 
 25 files changed, 105 insertions(+), 11727 deletions(-)

New commits:
commit 9ec0e6d9cbb0b61e5cf37917baee31f2af1a2897
Author: Michael Stahl <mstahl at redhat.com>
Date:   Fri Nov 27 23:54:40 2015 +0100

    sd: replace embedded mDNSResponder code with proper external tarball
    
    The diff against the 379.37 release is 2500 lines, one of which
    actually does anything at runtime (missing va_end()).
    
    Change-Id: I1824e61fd4ac6c3ce28084913a2661134a03fd51
    Reviewed-on: https://gerrit.libreoffice.org/20248
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Michael Stahl <mstahl at redhat.com>

diff --git a/Makefile.fetch b/Makefile.fetch
index 8b2da4e..cbc51b2 100644
--- a/Makefile.fetch
+++ b/Makefile.fetch
@@ -165,6 +165,7 @@ $(WORKDIR)/download: $(BUILDDIR)/config_host.mk $(SRCDIR)/download.lst $(SRCDIR)
 		$(call fetch_Optional,LPSOLVE,LPSOLVE_TARBALL) \
 		$(call fetch_Optional,MARIADB,MARIADB_TARBALL) \
 		$(call fetch_Optional,MDDS,MDDS_TARBALL) \
+		$(call fetch_Optional,MDNSRESPONDER,MDNSRESPONDER_TARBALL) \
 		$(call fetch_Optional,MORE_FONTS,FONT_CALADEA_TARBALL) \
 		$(call fetch_Optional,MORE_FONTS,FONT_CARLITO_TARBALL) \
 		$(call fetch_Optional,MORE_FONTS,FONT_DEJAVU_TARBALL) \
diff --git a/RepositoryExternal.mk b/RepositoryExternal.mk
index 2c00a33..cba5316 100644
--- a/RepositoryExternal.mk
+++ b/RepositoryExternal.mk
@@ -2442,6 +2442,18 @@ gb_LinkTarget__use_coinmp :=
 
 endif # ENABLE_COINMP
 
+ifneq (,$(filter MDNSRESPONDER,$(BUILD_TYPE)))
+
+define gb_LinkTarget__use_mDNSResponder
+$(call gb_LinkTarget_set_include,$(1),\
+	-I$(call gb_UnpackedTarball_get_dir,mDNSResponder)/mDNSShared \
+	$$(INCLUDE) \
+)
+$(call gb_LinkTarget_use_static_libraries,$(1),mDNSResponder)
+endef
+
+endif # MDNSRESPONDER
+
 ifeq ($(ENABLE_GIO),TRUE)
 
 define gb_LinkTarget__use_gio
diff --git a/configure.ac b/configure.ac
index 9a13921..eb569d1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -11805,7 +11805,10 @@ AC_SUBST(CAIRO_LIBS)
 dnl ===================================================================
 dnl Test whether to use avahi
 dnl ===================================================================
-if test "$_os" != "WINNT" -a "$_os" != "Darwin" -a "$enable_avahi" = "yes"; then
+if test "$_os" = "WINNT"; then
+    # Windows uses bundled mDNSResponder
+    BUILD_TYPE="$BUILD_TYPE MDNSRESPONDER"
+elif test "$_os" != "Darwin" -a "$enable_avahi" = "yes"; then
     PKG_CHECK_MODULES([AVAHI], [avahi-client >= 0.6.10],
                       [ENABLE_AVAHI="TRUE"])
     AC_DEFINE(HAVE_FEATURE_AVAHI)
diff --git a/download.lst b/download.lst
index 8774343..0201a61e 100755
--- a/download.lst
+++ b/download.lst
@@ -95,6 +95,8 @@ export LPSOLVE_TARBALL := 26b3e95ddf3d9c077c480ea45874b3b8-lp_solve_5.5.tar.gz
 export MARIADB_TARBALL := a233181e03d3c307668b4c722d881661-mariadb_client-2.0.0-src.tar.gz
 export MDDS_MD5SUM := 74e0a81c5af4137285fe6a52217f71e4
 export MDDS_TARBALL := mdds_1.0.0.tar.bz2
+export MDNSRESPONDER_MD5SUM := dd557e1058b51ac2f29cd01d67be0145
+export MDNSRESPONDER_TARBALL := mDNSResponder-379.37.tar.gz
 export MSPUB_MD5SUM := ff9d0f9dd8fbc523408ea1953d5bde41
 export MSPUB_TARBALL := libmspub-0.1.2.tar.bz2
 export MWAW_MD5SUM := 4a8a53a9d997cf0e2bd208178797dbfb
diff --git a/external/Module_external.mk b/external/Module_external.mk
index 7c78c7d..ccd758c 100644
--- a/external/Module_external.mk
+++ b/external/Module_external.mk
@@ -68,6 +68,7 @@ $(eval $(call gb_Module_add_moduledirs,external,\
 	$(call gb_Helper_optional,LPSOLVE,lpsolve) \
 	$(call gb_Helper_optional,MARIADB,libmariadb) \
 	$(call gb_Helper_optional,MDDS,mdds) \
+	$(call gb_Helper_optional,MDNSRESPONDER,mdnsresponder) \
 	$(if $(WITH_EXTRA_EXTENSIONS),misc_extensions) \
 	$(call gb_Helper_optional,MORE_FONTS,more_fonts) \
 	$(call gb_Helper_optional,MSPUB,libmspub) \
diff --git a/external/mdnsresponder/Makefile b/external/mdnsresponder/Makefile
new file mode 100644
index 0000000..e4968cf
--- /dev/null
+++ b/external/mdnsresponder/Makefile
@@ -0,0 +1,7 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+
+module_directory:=$(dir $(realpath $(firstword $(MAKEFILE_LIST))))
+
+include $(module_directory)/../../solenv/gbuild/partial_build.mk
+
+# vim: set noet sw=4 ts=4:
diff --git a/external/mdnsresponder/Module_mdnsresponder.mk b/external/mdnsresponder/Module_mdnsresponder.mk
new file mode 100644
index 0000000..b299684
--- /dev/null
+++ b/external/mdnsresponder/Module_mdnsresponder.mk
@@ -0,0 +1,20 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_Module_Module,mdnsresponder))
+
+$(eval $(call gb_Module_add_targets,mdnsresponder,\
+	UnpackedTarball_mDNSResponder \
+))
+
+$(eval $(call gb_Module_add_targets,mdnsresponder,\
+	StaticLibrary_mDNSResponder \
+))
+
+# vim: set noet sw=4 ts=4:
diff --git a/external/mdnsresponder/README b/external/mdnsresponder/README
new file mode 100644
index 0000000..d263b05
--- /dev/null
+++ b/external/mdnsresponder/README
@@ -0,0 +1,4 @@
+Apple's ZeroConf Multicast DNS implementation
+
+https://developer.apple.com/bonjour/
+http://www.opensource.apple.com/tarballs/mDNSResponder/
diff --git a/external/mdnsresponder/StaticLibrary_mDNSResponder.mk b/external/mdnsresponder/StaticLibrary_mDNSResponder.mk
new file mode 100644
index 0000000..196b0c7
--- /dev/null
+++ b/external/mdnsresponder/StaticLibrary_mDNSResponder.mk
@@ -0,0 +1,37 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_StaticLibrary_StaticLibrary,mDNSResponder))
+
+$(eval $(call gb_StaticLibrary_set_warnings_not_errors,mDNSResponder))
+
+$(eval $(call gb_StaticLibrary_use_unpacked,mDNSResponder,mDNSResponder))
+
+$(eval $(call gb_StaticLibrary_set_include,mDNSResponder,\
+	-I$(call gb_UnpackedTarball_get_dir,mDNSResponder)/mDNSShared \
+	$$(INCLUDE) \
+))
+
+$(eval $(call gb_StaticLibrary_add_defs,mDNSResponder,\
+	-DWIN32_LEAN_AND_MEAN \
+	-D_WINSOCK_DEPRECATED_NO_WARNINGS \
+	-DUSE_TCP_LOOPBACK \
+	-DNOT_HAVE_SA_LEN \
+))
+
+$(eval $(call gb_StaticLibrary_add_generated_cobjects,mDNSResponder,\
+	UnpackedTarball/mDNSResponder/mDNSShared/DebugServices \
+	UnpackedTarball/mDNSResponder/mDNSShared/GenLinkedList \
+	UnpackedTarball/mDNSResponder/mDNSShared/dnssd_clientlib \
+	UnpackedTarball/mDNSResponder/mDNSShared/dnssd_clientstub \
+	UnpackedTarball/mDNSResponder/mDNSShared/dnssd_ipc \
+	UnpackedTarball/mDNSResponder/mDNSWindows/DLL/dllmain \
+))
+
+# vim: set noet sw=4 ts=4:
diff --git a/external/mdnsresponder/UnpackedTarball_mDNSResponder.mk b/external/mdnsresponder/UnpackedTarball_mDNSResponder.mk
new file mode 100644
index 0000000..9b436b2
--- /dev/null
+++ b/external/mdnsresponder/UnpackedTarball_mDNSResponder.mk
@@ -0,0 +1,14 @@
+# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
+#
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+
+$(eval $(call gb_UnpackedTarball_UnpackedTarball,mDNSResponder))
+
+$(eval $(call gb_UnpackedTarball_set_tarball,mDNSResponder,$(MDNSRESPONDER_TARBALL)))
+
+# vim: set noet sw=4 ts=4:
diff --git a/sd/CppunitTest_sd_uimpress.mk b/sd/CppunitTest_sd_uimpress.mk
index a94b131..78e9f90 100644
--- a/sd/CppunitTest_sd_uimpress.mk
+++ b/sd/CppunitTest_sd_uimpress.mk
@@ -79,6 +79,7 @@ $(eval $(call gb_CppunitTest_use_externals,sd_uimpress,\
 	$(if $(ENABLE_AVAHI), \
 	    avahi \
 	) \
+	$(if $(filter WNT,$(OS)),mDNSResponder) \
 	libxml2 \
 ))
 
diff --git a/sd/Library_sd.mk b/sd/Library_sd.mk
index b86c51c..66dca43 100644
--- a/sd/Library_sd.mk
+++ b/sd/Library_sd.mk
@@ -529,14 +529,7 @@ $(eval $(call gb_Library_add_exception_objects,sd,\
 	sd/source/ui/remotecontrol/WINNetworkService \
 ))
 
-$(eval $(call gb_Library_add_cobjects,sd,\
-    sd/source/ui/remotecontrol/mDNSResponder/DebugServices \
-    sd/source/ui/remotecontrol/mDNSResponder/dnssd_clientlib \
-    sd/source/ui/remotecontrol/mDNSResponder/dnssd_clientstub \
-	sd/source/ui/remotecontrol/mDNSResponder/dnssd_ipc \
-    sd/source/ui/remotecontrol/mDNSResponder/GenLinkedList \
-    sd/source/ui/remotecontrol/mDNSResponder/dllmain \
-))
+$(eval $(call gb_Library_use_external,sd,mDNSResponder))
 
 endif # OS=WNT
 
diff --git a/sd/source/ui/remotecontrol/WINNetworkService.cxx b/sd/source/ui/remotecontrol/WINNetworkService.cxx
index 3643e1d..faedcf4 100644
--- a/sd/source/ui/remotecontrol/WINNetworkService.cxx
+++ b/sd/source/ui/remotecontrol/WINNetworkService.cxx
@@ -1,7 +1,6 @@
 #include <string>
 #include <iostream>
 #include "WINNetworkService.hxx"
-#include "mDNSResponder/dns_sd.h"
 #include <sal/log.hxx>
 
 void sd::WINNetworkService::setup()
diff --git a/sd/source/ui/remotecontrol/WINNetworkService.hxx b/sd/source/ui/remotecontrol/WINNetworkService.hxx
index 0ca284f..1e32274 100644
--- a/sd/source/ui/remotecontrol/WINNetworkService.hxx
+++ b/sd/source/ui/remotecontrol/WINNetworkService.hxx
@@ -4,7 +4,7 @@
 #include <string>
 #undef WB_LEFT
 #undef WB_RIGHT
-#include "mDNSResponder/dns_sd.h"
+#include <dns_sd.h>
 #include "ZeroconfService.hxx"
 
 namespace sd{
diff --git a/sd/source/ui/remotecontrol/mDNSResponder/CommonServices.h b/sd/source/ui/remotecontrol/mDNSResponder/CommonServices.h
deleted file mode 100644
index 1c1ae68..0000000
--- a/sd/source/ui/remotecontrol/mDNSResponder/CommonServices.h
+++ /dev/null
@@ -1,1213 +0,0 @@
-/* -*- Mode: C; tab-width: 4 -*-
- *
- * Copyright (c) 1997-2004 Apple Computer, Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-/*!    @header        CommonServices
-
-    Common Services for Mac OS X, Linux, Palm, VxWorks, Windows, and Windows CE.
- */
-
-#ifndef __COMMON_SERVICES__
-#define __COMMON_SERVICES__
-
-#ifdef  __cplusplus
-extern "C" {
-#endif
-
-#if 0
-#pragma mark == Target ==
-#endif
-
-
-//     Target
-// Macintosh
-#if ( !defined( TARGET_OS_MAC ) )
-    #if ( ( macintosh || __MACH__ ) && !KERNEL )
-    // ConditionalMacros.h in CoreServices will define this TARGET_* flag.
-    #else
-        #define TARGET_OS_MAC           0
-    #endif
-#endif
-
-#if ( !defined( TARGET_API_MAC_OSX_KERNEL ) )
-    #if ( __MACH__ && KERNEL )
-        #define TARGET_API_MAC_OSX_KERNEL       1
-    #else
-        #define TARGET_API_MAC_OSX_KERNEL       0
-    #endif
-#endif
-
-// FreeBSD
-#if ( !defined( TARGET_OS_FREEBSD ) )
-    #if ( defined( __FreeBSD__ ) )
-        #define TARGET_OS_FREEBSD       1
-    #else
-        #define TARGET_OS_FREEBSD       0
-    #endif
-#endif
-
-// Linux
-#if ( !defined( TARGET_OS_LINUX ) )
-    #if ( defined( __linux__ ) )
-        #define TARGET_OS_LINUX         1
-    #else
-        #define TARGET_OS_LINUX         0
-    #endif
-#endif
-
-// Solaris
-#if ( !defined( TARGET_OS_SOLARIS ) )
-    #if ( defined(solaris) || (defined(__SVR4) && defined(sun)) )
-        #define TARGET_OS_SOLARIS       1
-    #else
-        #define TARGET_OS_SOLARIS       0
-    #endif
-#endif
-
-// Palm
-#if ( !defined( TARGET_OS_PALM ) )
-    #if ( defined( __PALMOS_TRAPS__ ) || defined( __PALMOS_ARMLET__ ) )
-        #define TARGET_OS_PALM          1
-    #else
-        #define TARGET_OS_PALM          0
-    #endif
-#endif
-
-// VxWorks
-#if ( !defined( TARGET_OS_VXWORKS ) )
-
-// No predefined macro for VxWorks so just assume VxWorks if nothing else is set.
-
-    #if ( !macintosh && !__MACH__  && !defined( __FreeBSD__ ) && !defined( __linux__ ) && !defined ( __SVR4 ) && !defined ( __sun ) && !defined( __PALMOS_TRAPS__ ) && !defined( __PALMOS_ARMLET__ ) && !defined( _WIN32 ) )
-        #define TARGET_OS_VXWORKS       1
-    #else
-        #define TARGET_OS_VXWORKS       0
-    #endif
-#endif
-
-// Windows
-#if ( !defined( TARGET_OS_WIN32 ) )
-    #if ( macintosh || __MACH__ )
-// ConditionalMacros.h in CoreServices will define this TARGET_* flag.
-    #else
-        #if ( defined( _WIN32 ) )
-            #define TARGET_OS_WIN32     1
-        #else
-            #define TARGET_OS_WIN32     0
-        #endif
-    #endif
-#endif
-
-// Windows CE
-#if ( !defined( TARGET_OS_WINDOWS_CE ) )
-    #if ( defined( _WIN32_WCE ) )
-        #define TARGET_OS_WINDOWS_CE    1
-    #else
-        #define TARGET_OS_WINDOWS_CE    0
-    #endif
-#endif
-
-#if 0
-#pragma mark == Includes ==
-#endif
-
-
-//     Includes
-#if ( !KERNEL )
-    #if defined(WIN32) && !defined(_WSPIAPI_COUNTOF)
-        #define _WSPIAPI_COUNTOF(_Array) (sizeof(_Array) / sizeof(_Array[0]))
-    #endif
-    #include    <stddef.h>
-#endif
-
-#if ( ( macintosh || __MACH__ ) && !KERNEL )
-
-    #if ( defined( __MWERKS__ ) )
-        #if ( __option( c9x ) )
-            #include    <stdbool.h>
-        #endif
-    #else
-        #include    <stdbool.h>
-    #endif
-
-    #include    <stdint.h>
-
-    #if ( __MACH__ )
-
-// Mac OS X
-        #include    <sys/types.h>
-        #include    <netinet/in.h>
-        #include    <arpa/inet.h>
-        #include    <fcntl.h>
-        #include    <pthread.h>
-        #include    <sys/ioctl.h>
-        #include    <sys/socket.h>
-        #include    <unistd.h>
-
-    #else
-
-// Classic Mac OS
-        #include    <ConditionalMacros.h>
-        #include    <MacTypes.h>
-
-    #endif
-
-#elif ( KERNEL )
-
-// Mac OS X Kernel
-    #include    <stdint.h>
-
-    #include    <libkern/OSTypes.h>
-    #include    <sys/types.h>
-
-#elif ( TARGET_OS_FREEBSD )
-
-// FreeBSD
-    #include    <stdint.h>
-    #include    <pthread.h>
-    #include    <netinet/in.h>
-    #include    <arpa/inet.h>
-    #include    <sys/socket.h>
-
-#elif ( TARGET_OS_LINUX )
-
-// Linux
-    #include    <stdint.h>
-    #include    <arpa/inet.h>
-
-#elif ( TARGET_OS_SOLARIS )
-
-// Solaris
-    #include    <stdint.h>
-
-    #include    <arpa/inet.h>
-    #include    <arpa/nameser.h>
-
-    #if ( defined( BYTE_ORDER ) && defined( LITTLE_ENDIAN ) && ( BYTE_ORDER == LITTLE_ENDIAN ) )
-        #define TARGET_RT_LITTLE_ENDIAN     1
-    #endif
-    #if ( defined( BYTE_ORDER ) && defined( BIG_ENDIAN ) && ( BYTE_ORDER == BIG_ENDIAN ) )
-        #define TARGET_RT_BIG_ENDIAN        1
-    #endif
-
-#elif ( TARGET_OS_PALM )
-
-// Palm (no special includes yet).
-
-#elif ( TARGET_OS_VXWORKS )
-
-// VxWorks
-    #include    "vxWorks.h"
-
-#elif ( TARGET_OS_WIN32 )
-
-// Windows
-    #if ( !defined( WIN32_WINDOWS ) )
-        #define WIN32_WINDOWS       0x0401
-    #endif
-
-    #if ( !defined( _WIN32_WINDOWS ) )
-        #define _WIN32_WINDOWS      0x0401
-    #endif
-
-    #if ( !defined( WIN32_LEAN_AND_MEAN ) )
-        #define WIN32_LEAN_AND_MEAN         // Needed to avoid redefinitions by Windows interfaces.
-    #endif
-
-    #if ( defined( __MWERKS__ ) )
-
-        #if ( __option( c9x ) )
-            #include    <stdbool.h>
-        #endif
-
-        #include    <stdint.h>
-
-    #elif ( defined( _MSC_VER ) )
-
-        #pragma warning( disable:4127 ) // Disable "conditional expression is constant" warning for debug macros.
-
-    #endif
-
-    #include    <windows.h>
-    #include    <winsock2.h>
-    #include    <ws2tcpip.h>
-
-#else
-    #error unknown OS - update this file to support your OS
-#endif
-
-#if ( !defined( TARGET_BUILD_MAIN ) )
-    #if ( !TARGET_OS_VXWORKS )
-        #define TARGET_BUILD_MAIN       1
-    #endif
-#endif
-
-#if ( __GNUC__ || !TARGET_OS_VXWORKS )
-    #define TARGET_LANGUAGE_C_LIKE      1
-#else
-    #define TARGET_LANGUAGE_C_LIKE      0
-#endif
-
-#if 0
-#pragma mark == CPU ==
-#endif
-
-
-// CPU
-
-// PowerPC
-#if ( !defined( TARGET_CPU_PPC ) )
-    #if ( defined( __ppc__ ) || defined( __PPC__ ) || defined( powerpc ) || defined( ppc ) || defined( _M_MPPC ) )
-        #define TARGET_CPU_PPC              1
-    #else
-        #define TARGET_CPU_PPC              0
-    #endif
-#endif
-
-// x86
-#if ( !defined( TARGET_CPU_X86 ) )
-    #if ( __INTEL__ || defined( __i386__ ) || defined( i386 ) || defined( intel ) || defined( _M_IX86 ) )
-        #define TARGET_CPU_X86              1
-    #else
-        #define TARGET_CPU_X86              0
-    #endif
-#endif
-
-// MIPS
-#if ( !defined( TARGET_CPU_MIPS ) )
-    #if ( __MIPS__ || defined( MIPS32 ) || defined( R3000 ) || defined( R4000 ) || defined( R4650 ) || defined( _M_MRX000 ) )
-        #define TARGET_CPU_MIPS             1
-    #else
-        #define TARGET_CPU_MIPS             0
-    #endif
-#endif
-
-#if ( !defined( TARGET_CPU_PPC ) && !defined( TARGET_CPU_X86 ) && !defined( TARGET_CPU_MIPS ) )
-    #error unknown CPU - update this file to support your CPU
-#endif
-
-#if 0
-#pragma mark == Byte Order ==
-#endif
-
-
-//    Byte Order
-
-// TARGET_RT_LITTLE_ENDIAN
-#if ( !defined( TARGET_RT_LITTLE_ENDIAN ) )
-    #if ( MIPSEL || IL_LITTLE_ENDIAN || defined( __LITTLE_ENDIAN__ )                                         || \
-    ( defined(   BYTE_ORDER ) && defined(   LITTLE_ENDIAN ) && (   BYTE_ORDER ==   LITTLE_ENDIAN ) )   || \
-    ( defined(  _BYTE_ORDER ) && defined(  _LITTLE_ENDIAN ) && (  _BYTE_ORDER ==  _LITTLE_ENDIAN ) )   || \
-    ( defined( __BYTE_ORDER ) && defined( __LITTLE_ENDIAN ) && ( __BYTE_ORDER == __LITTLE_ENDIAN ) )   || \
-    TARGET_CPU_X86 || ( defined( TARGET_RT_BIG_ENDIAN ) && !TARGET_RT_BIG_ENDIAN ) )
-        #define TARGET_RT_LITTLE_ENDIAN     1
-    #else
-        #define TARGET_RT_LITTLE_ENDIAN     0
-    #endif
-#endif
-
-// TARGET_RT_BIG_ENDIAN
-#if ( !defined( TARGET_RT_BIG_ENDIAN ) )
-    #if ( MIPSEB || IL_BIG_ENDIAN || defined( __BIG_ENDIAN__ )                                       || \
-    ( defined(   BYTE_ORDER ) && defined(   BIG_ENDIAN ) && (   BYTE_ORDER ==   BIG_ENDIAN ) ) || \
-    ( defined(  _BYTE_ORDER ) && defined(  _BIG_ENDIAN ) && (  _BYTE_ORDER ==  _BIG_ENDIAN ) ) || \
-    ( defined( __BYTE_ORDER ) && defined( __BIG_ENDIAN ) && ( __BYTE_ORDER == __BIG_ENDIAN ) ) || \
-    ( defined( TARGET_RT_LITTLE_ENDIAN ) && !TARGET_RT_LITTLE_ENDIAN ) )
-        #define TARGET_RT_BIG_ENDIAN        1
-    #else
-        #define TARGET_RT_BIG_ENDIAN        0
-    #endif
-#endif
-
-#if ( defined( TARGET_RT_LITTLE_ENDIAN ) && !defined( TARGET_RT_BIG_ENDIAN ) )
-    #if ( TARGET_RT_LITTLE_ENDIAN )
-        #define TARGET_RT_BIG_ENDIAN        0
-    #else
-        #define TARGET_RT_BIG_ENDIAN        1
-    #endif
-#endif
-
-#if ( defined( TARGET_RT_BIG_ENDIAN ) && !defined( TARGET_RT_LITTLE_ENDIAN ) )
-    #if ( TARGET_RT_BIG_ENDIAN )
-        #define TARGET_RT_LITTLE_ENDIAN     0
-    #else
-        #define TARGET_RT_LITTLE_ENDIAN     1
-    #endif
-#endif
-
-#if ( !defined( TARGET_RT_LITTLE_ENDIAN ) || !defined( TARGET_RT_BIG_ENDIAN ) )
-    #error unknown byte order - update this file to support your byte order
-#endif
-
-// TARGET_RT_BYTE_ORDER
-#if ( !defined( TARGET_RT_BYTE_ORDER_BIG_ENDIAN ) )
-    #define TARGET_RT_BYTE_ORDER_BIG_ENDIAN         1234
-#endif
-
-#if ( !defined( TARGET_RT_BYTE_ORDER_LITTLE_ENDIAN ) )
-    #define TARGET_RT_BYTE_ORDER_LITTLE_ENDIAN      4321
-#endif
-
-#if ( !defined( TARGET_RT_BYTE_ORDER ) )
-    #if ( TARGET_RT_LITTLE_ENDIAN )
-        #define TARGET_RT_BYTE_ORDER                TARGET_RT_BYTE_ORDER_LITTLE_ENDIAN
-    #else
-        #define TARGET_RT_BYTE_ORDER                TARGET_RT_BYTE_ORDER_BIG_ENDIAN
-    #endif
-#endif
-
-#if 0
-#pragma mark == Constants ==
-#endif
-
-
-//    Constants
-#if ( !TARGET_OS_MAC )
-    #define CR      '\r'
-#endif
-
-#define LF          '\n'
-#define CRLF        "\r\n"
-
-#if 0
-#pragma mark == Compatibility ==
-#endif
-
-
-//    Compatibility
-
-// Macros to allow the same code to work on Windows and other sockets API-compatible platforms.
-#if ( TARGET_OS_WIN32 )
-    #define close_compat( X )       closesocket( X )
-    #define errno_compat()          (int) GetLastError()
-    #define set_errno_compat( X )   SetLastError( X )
-    #define EWOULDBLOCK_compat      WSAEWOULDBLOCK
-    #define ETIMEDOUT_compat        WSAETIMEDOUT
-    #define ENOTCONN_compat         WSAENOTCONN
-    #define IsValidSocket( X )      ( ( X ) != INVALID_SOCKET )
-    #define kInvalidSocketRef       INVALID_SOCKET
-    #if ( TARGET_LANGUAGE_C_LIKE )
-typedef SOCKET SocketRef;
-    #endif
-#else
-    #define close_compat( X )       close( X )
-    #define errno_compat()          errno
-    #define set_errno_compat( X )   do { errno = ( X ); } while( 0 )
-    #define EWOULDBLOCK_compat      EWOULDBLOCK
-    #define ETIMEDOUT_compat        ETIMEDOUT
-    #define ENOTCONN_compat         ENOTCONN
-    #define IsValidSocket( X )      ( ( X ) >= 0 )
-    #define kInvalidSocketRef       -1
-    #if ( TARGET_LANGUAGE_C_LIKE )
-typedef int SocketRef;
-    #endif
-#endif
-
-// socklen_t is not defined on the following platforms so emulate it if not defined:
-
-// - Pre-Panther Mac OS X. Panther defines SO_NOADDRERR so trigger off that.
-// - Windows SDK prior to 2003. 2003+ SDK's define EAI_AGAIN so trigger off that.
-// - VxWorks
-
-#if ( TARGET_LANGUAGE_C_LIKE )
-    #if ( ( TARGET_OS_MAC && !defined( SO_NOADDRERR ) ) || ( TARGET_OS_WIN32 && !defined( EAI_AGAIN ) ) || TARGET_OS_VXWORKS )
-typedef int socklen_t;
-    #endif
-#endif
-
-// ssize_t is not defined on the following platforms so emulate it if not defined:
-
-// - Mac OS X when not building with BSD headers
-// - Windows
-
-#if ( TARGET_LANGUAGE_C_LIKE )
-    #if ( !defined(_SSIZE_T) && ( TARGET_OS_WIN32 || !defined( _BSD_SSIZE_T_DEFINED_ ) ) && !TARGET_OS_FREEBSD && !TARGET_OS_LINUX && !TARGET_OS_VXWORKS && !TARGET_OS_MAC && !defined (__MINGW32__))
-typedef int ssize_t;
-    #endif
-#endif
-
-// sockaddr_storage is not supported on non-IPv6 machines so alias it to an IPv4-compatible structure.
-
-#if ( TARGET_LANGUAGE_C_LIKE )
-    #if ( !defined( AF_INET6 ) )
-        #define sockaddr_storage        sockaddr_in
-        #define ss_family               sin_family
-    #endif
-#endif
-
-
-/*!    @defined    SOCKADDR_IS_IP_LOOPBACK
-
-    @abstract    Determines if a sockaddr is an IPv4 or IPv6 loopback address (if IPv6 is supported).
- */
-#if ( defined( AF_INET6 ) )
-    #define SOCKADDR_IS_IP_LOOPBACK( SA )                                                           \
-    ( ( (const struct sockaddr *)( SA ) )->sa_family == AF_INET )                               \
-    ? ( ( (const struct sockaddr_in *)( SA ) )->sin_addr.s_addr == htonl( INADDR_LOOPBACK ) )   \
-    : ( ( (const struct sockaddr *)( SA ) )->sa_family == AF_INET6 )                            \
-    ? IN6_IS_ADDR_LOOPBACK( &( (const struct sockaddr_in6 *)( SA ) )->sin6_addr )           \
-    : 0
-#else
-    #define SOCKADDR_IS_IP_LOOPBACK( SA )                                                           \
-    ( ( (const struct sockaddr *)( SA ) )->sa_family == AF_INET )                               \
-    ? ( ( (const struct sockaddr_in *)( SA ) )->sin_addr.s_addr == htonl( INADDR_LOOPBACK ) )   \
-    : 0
-#endif
-
-
-/*!    @defined    SOCKADDR_IS_IP_LINK_LOCAL
-
-    @abstract    Determines if a sockaddr is an IPv4 or IPv6 link-local address (if IPv6 is supported).
- */
-#if ( defined( AF_INET6 ) )
-    #define SOCKADDR_IS_IP_LINK_LOCAL( SA )                                                             \
-    ( ( ( (const struct sockaddr *)( SA ) )->sa_family == AF_INET )                                 \
-      ? ( ( ( (uint8_t *)( &( (const struct sockaddr_in *)( SA ) )->sin_addr ) )[ 0 ] == 169 ) &&   \
-          ( ( (uint8_t *)( &( (const struct sockaddr_in *)( SA ) )->sin_addr ) )[ 1 ] == 254 ) )    \
-      : IN6_IS_ADDR_LOOPBACK( &( (const struct sockaddr_in6 *)( SA ) )->sin6_addr ) )
-#else
-    #define SOCKADDR_IS_IP_LINK_LOCAL( SA )                                                             \
-    ( ( ( (const struct sockaddr *)( SA ) )->sa_family == AF_INET )                                 \
-      ? ( ( ( (uint8_t *)( &( (const struct sockaddr_in *)( SA ) )->sin_addr ) )[ 0 ] == 169 ) &&   \
-          ( ( (uint8_t *)( &( (const struct sockaddr_in *)( SA ) )->sin_addr ) )[ 1 ] == 254 ) )    \
-      : 0 )
-#endif
-
-// _beginthreadex and _endthreadex are not supported on Windows CE 2.1 or later (the C runtime issues with leaking
-// resources have apparently been resolved and they seem to have just ripped out support for the API) so map it to
-// CreateThread on Windows CE.
-#if ( TARGET_OS_WINDOWS_CE )
-    #define _beginthreadex_compat( SECURITY_PTR, STACK_SIZE, START_ADDRESS, ARG_LIST, FLAGS, THREAD_ID_PTR )            \
-    (uintptr_t) CreateThread( SECURITY_PTR, STACK_SIZE, (LPTHREAD_START_ROUTINE) START_ADDRESS, ARG_LIST, FLAGS,    \
-                              (LPDWORD) THREAD_ID_PTR )
-
-    #define _endthreadex_compat( RESULT )       ExitThread( (DWORD) RESULT )
-#elif ( TARGET_OS_WIN32 )
-    #define _beginthreadex_compat               _beginthreadex
-    #define _endthreadex_compat                 _endthreadex
-#endif
-
-// The C99 "inline" keyword is not supported by Microsoft compilers, but they do support __inline so map it when needed.
-
-#if ( defined( _MSC_VER ) )
-    #define inline_compat       __inline
-#else
-    #define inline_compat       inline
-#endif
-
-// Calling conventions
-
-#if ( !defined( CALLBACK_COMPAT ) )
-    #if ( TARGET_OS_WIN32 || TARGET_OS_WINDOWS_CE )
-        #define CALLBACK_COMPAT     CALLBACK
-    #else
-        #define CALLBACK_COMPAT
-    #endif
-#endif
-
-#if 0
-#pragma mark == Macros ==
-#endif
-
-
-/*!    @defined    kSizeCString
-
-    @abstract    A meta-value to pass to supported routines to indicate the size should be calculated with strlen.
- */
-
-#define kSizeCString        ( (size_t) -1 )
-
-
-/*!    @defined    sizeof_array
-
-    @abstract    Determines the number of elements in an array.
- */
-
-#define sizeof_array( X )       ( sizeof( X ) / sizeof( X[ 0 ] ) )
-
-
-/*!    @defined    sizeof_element
-
-    @abstract    Determines the size of an array element.
- */
-
-#define sizeof_element( X )     sizeof( X[ 0 ] )
-
-
-/*!    @defined    sizeof_string
-
-    @abstract    Determines the size of a constant C string, excluding the null terminator.
- */
-
-#define sizeof_string( X )      ( sizeof( ( X ) ) - 1 )
-
-
-/*!    @defined    sizeof_field
-
-    @abstract    Determines the size of a field of a type.
- */
-
-#define sizeof_field( TYPE, FIELD )     sizeof( ( ( (TYPE *) 0 )->FIELD ) )
-
-
-/*!    @function    RoundUp
-
-    @abstract    Rounds X up to a multiple of Y.
- */
-
-#define RoundUp( X, Y )     ( ( X ) + ( ( Y ) -( ( X ) % ( Y ) ) ) )
-
-
-/*!    @function    IsAligned
-
-    @abstract    Returns non-zero if X is aligned to a Y byte boundary and 0 if not. Y must be a power of 2.
- */
-
-#define IsAligned( X, Y )       ( ( ( X ) &( ( Y ) -1 ) ) == 0 )
-
-
-/*!    @function    IsFieldAligned
-
-    @abstract    Returns non-zero if FIELD of type TYPE is aligned to a Y byte boundary and 0 if not. Y must be a power of 2.
- */
-
-#define IsFieldAligned( X, TYPE, FIELD, Y )     IsAligned( ( (uintptr_t)( X ) ) + offsetof( TYPE, FIELD ), ( Y ) )
-
-
-/*!    @function    AlignDown
-
-    @abstract    Aligns X down to a Y byte boundary. Y must be a power of 2.
- */
-
-#define AlignDown( X, Y )       ( ( X ) &~( ( Y ) -1 ) )
-
-
-/*!    @function    AlignUp
-
-    @abstract    Aligns X up to a Y byte boundary. Y must be a power of 2.
- */
-
-#define AlignUp( X, Y )     ( ( ( X ) + ( ( Y ) -1 ) ) & ~( ( Y ) -1 ) )
-
-
-/*!    @function    Min
-
-    @abstract    Returns the lesser of X and Y.
- */
-
-#if ( !defined( Min ) )
-    #define Min( X, Y )     ( ( ( X ) < ( Y ) ) ? ( X ) : ( Y ) )
-#endif
-
-
-/*!    @function    Max
-
-    @abstract    Returns the greater of X and Y.
- */
-
-#if ( !defined( Max ) )
-    #define Max( X, Y )     ( ( ( X ) > ( Y ) ) ? ( X ) : ( Y ) )
-#endif
-
-
-/*!    @function    InsertBits
-
-    @abstract    Inserts BITS (both 0 and 1 bits) into X, controlled by MASK and SHIFT, and returns the result.
-
-    @discussion
-
-    MASK is the bitmask of the bits in the final position.
-    SHIFT is the number of bits to shift left for 1 to reach the first bit position of MASK.
-
-    For example, if you wanted to insert 0x3 into the leftmost 4 bits of a 32-bit value:
-
-    InsertBits( 0, 0x3, 0xF0000000U, 28 ) == 0x30000000
- */
-
-#define InsertBits( X, BITS, MASK, SHIFT )      ( ( ( X ) &~( MASK ) ) | ( ( ( BITS ) << ( SHIFT ) ) & ( MASK ) ) )
-
-
-/*!    @function    ExtractBits
-
-    @abstract    Extracts bits from X, controlled by MASK and SHIFT, and returns the result.
-
-    @discussion
-
-    MASK is the bitmask of the bits in the final position.
-    SHIFT is the number of bits to shift right to right justify MASK.
-
-    For example, if you had a 32-bit value (e.g. 0x30000000) wanted the left-most 4 bits (e.g. 3 in this example):
-
-    ExtractBits( 0x30000000U, 0xF0000000U, 28 ) == 0x3
- */
-
-#define ExtractBits( X, MASK, SHIFT )           ( ( ( X ) >> ( SHIFT ) ) & ( ( MASK ) >> ( SHIFT ) ) )
-
-
-/*!    @function    Stringify
-
-    @abstract    Stringify's an expression.
-
-    @discussion
-
-    Stringify macros to process raw text passed via -D options to C string constants. The double-wrapping is necessary
-    because the C preprocessor doesn't perform its normal argument expansion pre-scan with stringified macros so the
-    -D macro needs to be expanded once via the wrapper macro then stringified so the raw text is stringified. Otherwise,
-    the replacement value would be used instead of the symbolic name (only for preprocessor symbols like #defines).
-
-    For example:
-
- #define    kMyConstant        1
-
-        printf( "%s", Stringify( kMyConstant ) );            // Prints "kMyConstant"
-        printf( "%s", StringifyExpansion( kMyConstant ) );    // Prints "1"
-
-    Non-preprocessor symbols do not have this issue. For example:
-
-        enum
-        {
-            kMyConstant = 1
-        };
-
-        printf( "%s", Stringify( kMyConstant ) );            // Prints "kMyConstant"
-        printf( "%s", StringifyExpansion( kMyConstant ) );    // Prints "kMyConstant"
-
-    See <http://gcc.gnu.org/onlinedocs/cpp/Argument-Prescan.html> for more info on C preprocessor pre-scanning.
- */
-
-#define Stringify( X )              # X
-#define StringifyExpansion( X )     Stringify( X )
-
-#if 0
-#pragma mark == Types ==
-#endif
-
-#if ( TARGET_LANGUAGE_C_LIKE )
-
-//     Standard Types
-
-
-#if ( !defined( INT8_MIN ) )
-
-    #define INT8_MIN                    SCHAR_MIN
-
-    #if ( defined( _MSC_VER ) )
-
-// C99 stdint.h not supported in VC++/VS.NET yet.
-
-typedef INT8 int8_t;
-typedef UINT8 uint8_t;
-typedef INT16 int16_t;
-typedef UINT16 uint16_t;
-typedef INT32 int32_t;
-typedef UINT32 uint32_t;
-typedef __int64 int64_t;
-typedef unsigned __int64 uint64_t;
-    #elif defined (__MINGW32__)
-    #  include <stdint.h>
-    #elif ( TARGET_OS_VXWORKS && ( TORNADO_VERSION < 220 ) )
-typedef long long int64_t;
-typedef unsigned long long uint64_t;
-    #endif
-
-typedef int32_t int_least32_t;
-
-
-
-
-    #if ( !defined( _WIN32 ) || TARGET_OS_WINDOWS_CE )
-typedef long int intptr_t;
-typedef unsigned long int uintptr_t;
-    #endif
-
-#endif
-
-// Macros for minimum-width integer constants
-
-#if ( !defined( INT8_C ) )
-    #define INT8_C( value )         value
-#endif
-
-#if ( !defined( INT16_C ) )
-    #define INT16_C( value )        value
-#endif
-
-#if ( !defined( INT32_C ) )
-    #define INT32_C( value )        value ## L
-#endif
-
-#if ( !defined( INT64_C ) )
-    #if ( defined( _MSC_VER ) )
-        #define INT64_C( value )    value ## i64
-    #else
-        #define INT64_C( value )    value ## LL
-    #endif
-#endif
-
-#if ( !defined( UINT8_C ) )
-    #define UINT8_C( value )        value ## U
-#endif
-
-#if ( !defined( UINT16_C ) )
-    #define UINT16_C( value )       value ## U
-#endif
-
-#if ( !defined( UINT32_C ) )
-    #define UINT32_C( value )       value ## UL
-#endif
-
-#if ( !defined( UINT64_C ) )
-    #if ( defined( _MSC_VER ) )
-        #define UINT64_C( value )   value ## UI64
-    #else
-        #define UINT64_C( value )   value ## ULL
-    #endif
-#endif
-
-#if 0
-#pragma mark == bool ==
-#endif
-
-
-//     Boolean Constants and Types
-
-
-// C++ defines bool, true, and false. Metrowerks allows this to be controlled by the "bool" option though.
-// C99 defines __bool_true_false_are_defined when bool, true, and false are defined.
-// MacTypes.h defines true and false (Mac builds only).
-
-// Note: The Metrowerks has to be in its own block because Microsoft Visual Studio .NET does not completely
-// short-circuit and gets confused by the option( bool ) portion of the conditional.
-
-#if ( defined( __MWERKS__ ) )
-
-// Note: The following test is done on separate lines because CodeWarrior doesn't like it all on one line.
-
-    #if ( !__bool_true_false_are_defined && ( !defined( __cplusplus ) || !__option( bool ) ) )
-        #define COMMON_SERVICES_NEEDS_BOOL      1
-    #else
-        #define COMMON_SERVICES_NEEDS_BOOL      0
-    #endif
-
-// Workaround when building with CodeWarrior, but using the Apple stdbool.h header, which uses _Bool.
-
-    #if ( __bool_true_false_are_defined && !defined( __cplusplus ) && !__option( c9x ) )
-        #define _Bool int
-    #endif
-
-// Workaround when building with CodeWarrior for C++ with bool disabled and using the Apple stdbool.h header,
-// which defines true and false to map to C++ true and false (which are not enabled). Serenity Now!
-
-    #if ( __bool_true_false_are_defined && defined( __cplusplus ) && !__option( bool ) )
-        #define true    1
-        #define false   0
-    #endif
-#else
-    #define COMMON_SERVICES_NEEDS_BOOL          ( !defined( __cplusplus ) && !__bool_true_false_are_defined )
-#endif
-
-#if ( COMMON_SERVICES_NEEDS_BOOL )
-
-typedef int bool;
-
-    #define bool bool
-
-    #if ( !defined( __MACTYPES__ ) && !defined( true ) && !defined( false ) )
-        #define true    1
-        #define false   0
-    #endif
-
-    #define __bool_true_false_are_defined       1
-#endif
-
-// IOKit IOTypes.h typedef's bool if TYPE_BOOL is not defined so define it here to prevent redefinition by IOTypes.h.
-
-#if ( TARGET_API_MAC_OSX_KERNEL )
-    #define TYPE_BOOL       1
-#endif
-
-
-/*!    @typedef    CStr255
-
-    @abstract    255 character null-terminated (C-style) string.
- */
-
-#if ( TARGET_LANGUAGE_C_LIKE )
-typedef char CStr255[ 256 ];
-#endif
-
-#endif  // TARGET_LANGUAGE_C_LIKE
-
-
-/*!    @defined    TYPE_LONGLONG_NATIVE
-
-    @abstract    Defines whether long long (or its equivalent) is natively supported or requires special libraries.
- */
-
-#if ( !defined( TYPE_LONGLONG_NATIVE ) )
-    #if ( !TARGET_OS_VXWORKS )
-        #define TYPE_LONGLONG_NATIVE            1
-    #else
-        #define TYPE_LONGLONG_NATIVE            0
-    #endif
-#endif
-
-
-/*!    @defined    long_long_compat
-
-    @abstract    Compatibility type to map to the closest thing to long long and unsigned long long.
-
-    @discussion
-
-    Neither long long nor unsigned long long are supported by Microsoft compilers, but they do support proprietary
-    "__int64" and "unsigned __int64" equivalents so map to those types if the real long long is not supported.
- */
-
-#if ( TARGET_LANGUAGE_C_LIKE )
-    #if ( TARGET_OS_WIN32 )
-typedef __int64 long_long_compat;
-typedef unsigned __int64 unsigned_long_long_compat;
-    #else
-typedef signed long long long_long_compat;
-typedef unsigned long long unsigned_long_long_compat;
-    #endif
-#endif
-
-#if 0
-#pragma mark == Errors ==
-#endif
-
-
-/*!    @enum        OSStatus
-
-    @abstract    Status Code
-
-    @constant    kNoErr                            0 No error occurred.
-    @constant    kInProgressErr                    1 Operation in progress.
-    @constant    kUnknownErr                    -6700 Unknown error occurred.
-    @constant    kOptionErr                    -6701 Option was not acceptable.
-    @constant    kSelectorErr                -6702 Selector passed in is invalid or unknown.
-    @constant    kExecutionStateErr            -6703 Call made in the wrong execution state (e.g. called at interrupt time).
-    @constant    kPathErr                    -6704 Path is invalid, too long, or otherwise not usable.
-    @constant    kParamErr                    -6705 Parameter is incorrect, missing, or not appropriate.
-    @constant    kParamCountErr                -6706 Incorrect or unsupported number of parameters.
-    @constant    kCommandErr                    -6707 Command invalid or not supported.
-    @constant    kIDErr                        -6708 Unknown, invalid, or inappropriate identifier.
-    @constant    kStateErr                    -6709 Not in appropriate state to perform operation.
-    @constant    kRangeErr                    -6710 Index is out of range or not valid.
-    @constant    kRequestErr                    -6711 Request was improperly formed or not appropriate.
-    @constant    kResponseErr                -6712 Response was incorrect or out of sequence.
-    @constant    kChecksumErr                -6713 Checksum does not match the actual data.
-    @constant    kNotHandledErr                -6714 Operation was not handled (or not handled completely).
-    @constant    kVersionErr                    -6715 Version is not incorrect or not compatibile.
-    @constant    kSignatureErr                -6716 Signature did not match what was expected.
-    @constant    kFormatErr                    -6717 Unknown, invalid, or inappropriate file/data format.
-    @constant    kNotInitializedErr            -6718 Action request before needed services were initialized.
-    @constant    kAlreadyInitializedErr        -6719 Attempt made to initialize when already initialized.
-    @constant    kNotInUseErr                -6720 Object not in use (e.g. cannot abort if not already in use).
-    @constant    kInUseErr                    -6721 Object is in use (e.g. cannot reuse active param blocks).
-    @constant    kTimeoutErr                    -6722 Timeout occurred.
-    @constant    kCanceledErr                -6723 Operation canceled (successful cancel).
-    @constant    kAlreadyCanceledErr            -6724 Operation has already been canceled.
-    @constant    kCannotCancelErr            -6725 Operation could not be canceled (maybe already done or invalid).
-    @constant    kDeletedErr                    -6726 Object has already been deleted.
-    @constant    kNotFoundErr                -6727 Something was not found.
-    @constant    kNoMemoryErr                -6728 Not enough memory was available to perform the operation.
-    @constant    kNoResourcesErr                -6729 Resources unavailable to perform the operation.
-    @constant    kDuplicateErr                -6730 Duplicate found or something is a duplicate.
-    @constant    kImmutableErr                -6731 Entity is not changeable.
-    @constant    kUnsupportedDataErr            -6732 Data is unknown or not supported.
-    @constant    kIntegrityErr                -6733 Data is corrupt.
-    @constant    kIncompatibleErr            -6734 Data is not compatible or it is in an incompatible format.
-    @constant    kUnsupportedErr                -6735 Feature or option is not supported.
-    @constant    kUnexpectedErr                -6736 Error occurred that was not expected.
-    @constant    kValueErr                    -6737 Value is not appropriate.
-    @constant    kNotReadableErr                -6738 Could not read or reading is not allowed.
-    @constant    kNotWritableErr                -6739 Could not write or writing is not allowed.
-    @constant    kBadReferenceErr            -6740 An invalid or inappropriate reference was specified.
-    @constant    kFlagErr                    -6741 An invalid, inappropriate, or unsupported flag was specified.
-    @constant    kMalformedErr                -6742 Something was not formed correctly.
-    @constant    kSizeErr                    -6743 Size was too big, too small, or not appropriate.
-    @constant    kNameErr                    -6744 Name was not correct, allowed, or appropriate.
-    @constant    kNotReadyErr                -6745 Device or service is not ready.
-    @constant    kReadErr                    -6746 Could not read.
-    @constant    kWriteErr                    -6747 Could not write.
-    @constant    kMismatchErr                -6748 Something does not match.
-    @constant    kDateErr                    -6749 Date is invalid or out-of-range.
-    @constant    kUnderrunErr                -6750 Less data than expected.
-    @constant    kOverrunErr                    -6751 More data than expected.
-    @constant    kEndingErr                    -6752 Connection, session, or something is ending.
-    @constant    kConnectionErr                -6753 Connection failed or could not be established.
-    @constant    kAuthenticationErr            -6754 Authentication failed or is not supported.
-    @constant    kOpenErr                    -6755 Could not open file, pipe, device, etc.
-    @constant    kTypeErr                    -6756 Incorrect or incompatible type (e.g. file, data, etc.).
-    @constant    kSkipErr                    -6757 Items should be or was skipped.
-    @constant    kNoAckErr                    -6758 No acknowledge.
-    @constant    kCollisionErr                -6759 Collision occurred (e.g. two on bus at same time).
-    @constant    kBackoffErr                    -6760 Backoff in progress and operation intentionally failed.
-    @constant    kNoAddressAckErr            -6761 No acknowledge of address.
-    @constant    kBusyErr                    -6762 Cannot perform because something is busy.
-    @constant    kNoSpaceErr                    -6763 Not enough space to perform operation.
- */
-
-#if ( TARGET_LANGUAGE_C_LIKE )
-    #if ( !TARGET_OS_MAC && !TARGET_API_MAC_OSX_KERNEL )
-typedef int32_t OSStatus;
-    #endif
-#endif
-
-#define kNoErr                      0
-#define kInProgressErr              1
-
-// Generic error codes are in the range -6700 to -6779.
-
-#define kGenericErrorBase           -6700   // Starting error code for all generic errors.
-
-#define kUnknownErr                 -6700
-#define kOptionErr                  -6701
-#define kSelectorErr                -6702
-#define kExecutionStateErr          -6703
-#define kPathErr                    -6704
-#define kParamErr                   -6705
-#define kParamCountErr              -6706
-#define kCommandErr                 -6707
-#define kIDErr                      -6708
-#define kStateErr                   -6709
-#define kRangeErr                   -6710
-#define kRequestErr                 -6711
-#define kResponseErr                -6712
-#define kChecksumErr                -6713
-#define kNotHandledErr              -6714
-#define kVersionErr                 -6715
-#define kSignatureErr               -6716
-#define kFormatErr                  -6717
-#define kNotInitializedErr          -6718
-#define kAlreadyInitializedErr      -6719
-#define kNotInUseErr                -6720
-#define kInUseErr                   -6721
-#define kTimeoutErr                 -6722
-#define kCanceledErr                -6723
-#define kAlreadyCanceledErr         -6724
-#define kCannotCancelErr            -6725
-#define kDeletedErr                 -6726
-#define kNotFoundErr                -6727
-#define kNoMemoryErr                -6728
-#define kNoResourcesErr             -6729
-#define kDuplicateErr               -6730
-#define kImmutableErr               -6731
-#define kUnsupportedDataErr         -6732
-#define kIntegrityErr               -6733
-#define kIncompatibleErr            -6734
-#define kUnsupportedErr             -6735
-#define kUnexpectedErr              -6736
-#define kValueErr                   -6737
-#define kNotReadableErr             -6738
-#define kNotWritableErr             -6739
-#define kBadReferenceErr            -6740
-#define kFlagErr                    -6741
-#define kMalformedErr               -6742
-#define kSizeErr                    -6743
-#define kNameErr                    -6744
-#define kNotReadyErr                -6745
-#define kReadErr                    -6746
-#define kWriteErr                   -6747
-#define kMismatchErr                -6748
-#define kDateErr                    -6749
-#define kUnderrunErr                -6750
-#define kOverrunErr                 -6751
-#define kEndingErr                  -6752
-#define kConnectionErr              -6753
-#define kAuthenticationErr          -6754
-#define kOpenErr                    -6755
-#define kTypeErr                    -6756
-#define kSkipErr                    -6757
-#define kNoAckErr                   -6758
-#define kCollisionErr               -6759
-#define kBackoffErr                 -6760
-#define kNoAddressAckErr            -6761
-#define kBusyErr                    -6762
-#define kNoSpaceErr                 -6763
-
-#define kGenericErrorEnd            -6779   // Last generic error code (inclusive)
-
-#if 0
-#pragma mark == Mac Compatibility ==
-#endif
-
-
-//    Mac Compatibility
-
-
-
-/*!    @enum        Duration
-
-    @abstract    Type used to specify a duration of time.
-
-    @constant    kDurationImmediate            Indicates no delay/wait time.
-    @constant    kDurationMicrosecond        Microsecond units.
-    @constant    kDurationMillisecond        Millisecond units.
-    @constant    kDurationSecond                Second units.
-    @constant    kDurationMinute                Minute units.
-    @constant    kDurationHour                Hour units.
-    @constant    kDurationDay                Day units.
-    @constant    kDurationForever            Infinite period of time (no timeout).
-
-    @discussion
-
-    Duration values are intended to be multiplied by the specific interval to achieve an actual duration. For example,
-    to wait for 5 seconds you would use "5 * kDurationSecond".
- */
-
-#if ( TARGET_LANGUAGE_C_LIKE )
-    #if ( !TARGET_OS_MAC )
-typedef int32_t Duration;
-    #endif
-#endif
-
-#define kDurationImmediate              0L
-#define kDurationMicrosecond            -1L
-#define kDurationMillisecond            1L
-#define kDurationSecond                 ( 1000L * kDurationMillisecond )
-#define kDurationMinute                 ( 60L * kDurationSecond )
-#define kDurationHour                   ( 60L * kDurationMinute )
-#define kDurationDay                    ( 24L * kDurationHour )
-#define kDurationForever                0x7FFFFFFFL
-
-// Seconds <-> Minutes <-> Hours <-> Days <-> Weeks <-> Months <-> Years conversions
-
-#define kSecondsPerHour                 ( 60 * 60 )             // 3600
-#define kSecondsPerDay                  ( 60 * 60 * 24 )        // 86400
-#define kSecondsPerWeek                 ( 60 * 60 * 24 * 7 )    // 604800
-#define kMinutesPerDay                  ( 60 * 24 )             // 1440
-
-
-/*!    @defined    VersionStages
-
-    @abstract    NumVersion-style version stages.
- */
-
-#define kVersionStageDevelopment        0x20
-#define kVersionStageAlpha              0x40
-#define kVersionStageBeta               0x60
-#define kVersionStageFinal              0x80
-
-
-/*!    @function    NumVersionBuild
-
-    @abstract    Builds a 32-bit Mac-style NumVersion value (e.g. NumVersionBuild( 1, 2, 3, kVersionStageBeta, 4 ) -> 1.2.3b4).
- */
-
-#define NumVersionBuild( MAJOR, MINOR, BUGFIX, STAGE, REV ) \
-    ( ( ( ( MAJOR )  & 0xFF ) << 24 ) |                     \
-      ( ( ( MINOR )  & 0x0F ) << 20 ) |                     \
-      ( ( ( BUGFIX ) & 0x0F ) << 16 ) |                     \
-      ( ( ( STAGE )  & 0xFF ) <<  8 ) |                     \
-      ( ( ( REV )    & 0xFF )       ) )
-
-#define NumVersionExtractMajor( VERSION )               ( (uint8_t)( ( ( VERSION ) >> 24 ) & 0xFF ) )
-#define NumVersionExtractMinorAndBugFix( VERSION )      ( (uint8_t)( ( ( VERSION ) >> 16 ) & 0xFF ) )
-#define NumVersionExtractMinor( VERSION )               ( (uint8_t)( ( ( VERSION ) >> 20 ) & 0x0F ) )
-#define NumVersionExtractBugFix( VERSION )              ( (uint8_t)( ( ( VERSION ) >> 16 ) & 0x0F ) )
-#define NumVersionExtractStage( VERSION )               ( (uint8_t)( ( ( VERSION ) >>  8 ) & 0xFF ) )
-#define NumVersionExtractRevision( VERSION )            ( (uint8_t)(   ( VERSION )         & 0xFF ) )
-
-
-/*!    @function    NumVersionCompare
-
-    @abstract    Compares two NumVersion values and returns the following values:
-
-        left < right -> -1
-        left > right ->  1
-        left = right ->  0
- */
-
-#if ( TARGET_LANGUAGE_C_LIKE )
-int NumVersionCompare( uint32_t inLeft, uint32_t inRight );
-#endif
-
-#if 0
-#pragma mark == Binary Constants ==
-#endif
-
-
-/*!    @defined    binary_4
-
-    @abstract    Macro to generate an 4-bit constant using binary notation (e.g. binary_4( 1010 ) == 0xA).
- */
-
-#define binary_4( a )                       binary_4_hex_wrap( hex_digit4( a ) )
-#define binary_4_hex_wrap( a )              binary_4_hex( a )
-#define binary_4_hex( a )                   ( 0x ## a )
-
-
-/*!    @defined    binary_8
-
-    @abstract    Macro to generate an 8-bit constant using binary notation (e.g. binary_8( 01111011 ) == 0x7B).
- */
-
-#define binary_8( a )                       binary_8_hex_wrap( hex_digit8( a ) )
-#define binary_8_hex_wrap( a )              binary_8_hex( a )
-#define binary_8_hex( a )                   ( 0x ## a )
-
-
-/*!    @defined    binary_16
-
-    @abstract    Macro to generate an 16-bit constant using binary notation (e.g. binary_16( 01111011, 01111011 ) == 0x7B7B).
- */
-
-#define binary_16( a, b )                   binary_16_hex_wrap( hex_digit8( a ), hex_digit8( b ) )
-#define binary_16_hex_wrap( a, b )          binary_16_hex( a, b )
-#define binary_16_hex( a, b )               ( 0x ## a ## b )
-
-
-/*!    @defined    binary_32
-
-    @abstract    Macro to generate an 32-bit constant using binary notation
-                (e.g. binary_32( 01111011, 01111011, 01111011, 01111011 ) == 0x7B7B7B7B).
- */
-
-#define binary_32( a, b, c, d )             binary_32_hex_wrap( hex_digit8( a ), hex_digit8( b ), hex_digit8( c ), hex_digit8( d ) )
-#define binary_32_hex_wrap( a, b, c, d )    binary_32_hex( a, b, c, d )
-#define binary_32_hex( a, b, c, d )         ( 0x ## a ## b ## c ## d )
-
-// Binary Constant Helpers
-
-#define hex_digit8( a )                     HEX_DIGIT_ ## a
-#define hex_digit4( a )                     HEX_DIGIT_ ## 0000 ## a
-
-
-#if 0
-#pragma mark == Debugging ==
-#endif
-
-
-/*!    @function    CommonServicesTest
-
-    @abstract    Unit test.
- */
-
-#if ( DEBUG )
-    #if ( TARGET_LANGUAGE_C_LIKE )
-OSStatus    CommonServicesTest( void );
-    #endif
-#endif
-
-#ifdef  __cplusplus
-}
-#endif
-
-#endif  // __COMMON_SERVICES__
diff --git a/sd/source/ui/remotecontrol/mDNSResponder/DebugServices.c b/sd/source/ui/remotecontrol/mDNSResponder/DebugServices.c
deleted file mode 100644
index 7f57d88..0000000
--- a/sd/source/ui/remotecontrol/mDNSResponder/DebugServices.c
+++ /dev/null
@@ -1,2978 +0,0 @@
-/* -*- Mode: C; tab-width: 4 -*-
- *
- * Copyright (c) 1997-2004 Apple Computer, Inc. All rights reserved.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
-
-    To Do:
-
-    - Use StackWalk on Windows to optionally print stack frames.
- */
-
-#if 0
-#pragma mark == Includes ==
-#endif
-
-
-// Includes
-#if ( !KERNEL )
-    #include    <ctype.h>
-    #include    <stdio.h>
-    #include    <string.h>
-#endif
-
-#include    "CommonServices.h"
-
-#include    "DebugServices.h"
-
-#if ( DEBUG )
-
-#if ( TARGET_OS_VXWORKS )
-    #include    "intLib.h"
-#endif
-
-#if ( TARGET_OS_WIN32 )
-    #include    <time.h>
-
-    #if ( !TARGET_OS_WINDOWS_CE )
-        #include    <fcntl.h>
-        #include    <io.h>
-    #endif
-#endif
-
-#if ( DEBUG_IDEBUG_ENABLED && TARGET_API_MAC_OSX_KERNEL )
-    #include    <IOKit/IOLib.h>
-#endif
-
-// If MDNS_DEBUGMSGS is defined (even if defined 0), it is aware of mDNS and it is probably safe to include mDNSEmbeddedAPI.h.
-#if ( defined( MDNS_DEBUGMSGS ) )
-    #include    "mDNSEmbeddedAPI.h"
-#endif
-
-#if 0
-#pragma mark == Macros ==
-#endif
-
-
-// Macros
-#define DebugIsPrint( C )       ( ( ( C ) >= 0x20 ) && ( ( C ) <= 0x7E ) )
-
-#if 0
-#pragma mark == Prototypes ==
-#endif
-
-
-// Prototypes
-static OSStatus DebugPrint( DebugLevel inLevel, char *inData, size_t inSize );
-
-// fprintf
-#if ( DEBUG_FPRINTF_ENABLED )
-static OSStatus DebugFPrintFInit( DebugOutputTypeFlags inFlags, const char *inFilename );
-static void     DebugFPrintFPrint( char *inData, size_t inSize );
-#endif
-
-// iDebug (Mac OS X user and kernel)
-#if ( DEBUG_IDEBUG_ENABLED )
-static OSStatus DebugiDebugInit( void );
-static void     DebugiDebugPrint( char *inData, size_t inSize );
-#endif
-
-// kprintf (Mac OS X Kernel)
-#if ( DEBUG_KPRINTF_ENABLED )
-static void DebugKPrintFPrint( char *inData, size_t inSize );
-#endif
-
-// Mac OS X IOLog (Mac OS X Kernel)
-#if ( DEBUG_MAC_OS_X_IOLOG_ENABLED )
-static void DebugMacOSXIOLogPrint( char *inData, size_t inSize );
-#endif
-
-// Mac OS X Log
-#if ( TARGET_OS_MAC )
-static OSStatus DebugMacOSXLogInit( void );
-static void     DebugMacOSXLogPrint( char *inData, size_t inSize );
-#endif
-
-// Windows Debugger
-#if ( TARGET_OS_WIN32 )
-static void DebugWindowsDebuggerPrint( char *inData, size_t inSize );
-#endif
-
-// Windows Event Log
-#if ( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE )
-static OSStatus DebugWindowsEventLogInit( const char *inName, HMODULE inModule );
-static void DebugWindowsEventLogPrint( DebugLevel inLevel, char *inData, size_t inSize );
-#endif
-
-// DebugLib support
-#if ( DEBUG_CORE_SERVICE_ASSERTS_ENABLED )
-static pascal void
-DebugAssertOutputHandler(
-    OSType inComponentSignature,
-    UInt32 inOptions,
-    const char *        inAssertionString,
-    const char *        inExceptionString,
-    const char *        inErrorString,
-    const char *        inFileName,
-    long inLineNumber,
-    void *              inValue,
-    ConstStr255Param inOutputMsg );
-#endif
-
-// Utilities
-static char *   DebugNumVersionToString( uint32_t inVersion, char *inString );
-
-#if ( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE )
-static void DebugWinEnableConsole( void );
-#endif
-
-#if ( TARGET_OS_WIN32 )
-static TCHAR *
-DebugWinCharToTCharString(
-    const char *    inCharString,
-    size_t inCharCount,
-    TCHAR *         outTCharString,
-    size_t inTCharCountMax,
-    size_t *        outTCharCount );
-#endif
-
-#if 0
-#pragma mark == Globals ==
-#endif
-
-
-// Private Globals
-#if ( TARGET_OS_VXWORKS )
-// TCP States for inetstatShow.
-
-extern char **  pTcpstates;         // defined in tcpLib.c
-
-const char *        kDebugTCPStates[] =
-{
-    "(0)  TCPS_CLOSED",
-    "(1)  TCPS_LISTEN",
-    "(2)  TCPS_SYN_SENT",
-    "(3)  TCPS_SYN_RECEIVED",
-    "(4)  TCPS_ESTABLISHED",
-    "(5)  TCPS_CLOSE_WAIT",
-    "(6)  TCPS_FIN_WAIT_1",
-    "(7)  TCPS_CLOSING",
-    "(8)  TCPS_LAST_ACK",
-    "(9)  TCPS_FIN_WAIT_2",
-    "(10) TCPS_TIME_WAIT",
-};
-#endif
-
-// General
-static bool gDebugInitialized               = false;
-static DebugOutputType gDebugOutputType                = kDebugOutputTypeNone;
-static DebugLevel gDebugPrintLevelMin             = kDebugLevelInfo;
-static DebugLevel gDebugPrintLevelMax             = kDebugLevelMax;
-static DebugLevel gDebugBreakLevel                = kDebugLevelAssert;
-#if ( DEBUG_CORE_SERVICE_ASSERTS_ENABLED )
-static DebugAssertOutputHandlerUPP gDebugAssertOutputHandlerUPP    = NULL;
-#endif
-
-// Custom
-static DebugOutputFunctionPtr gDebugCustomOutputFunction      = NULL;
-static void *                               gDebugCustomOutputContext       = NULL;
-
-// fprintf
-
-#if ( DEBUG_FPRINTF_ENABLED )
-static FILE *                           gDebugFPrintFFile               = NULL;
-#endif
-
-// MacOSXLog
-#if ( TARGET_OS_MAC )
-typedef int ( *DebugMacOSXLogFunctionPtr )( const char *inFormat, ... );
-
-static DebugMacOSXLogFunctionPtr gDebugMacOSXLogFunction         = NULL;
-#endif
-
-// WindowsEventLog
-#if ( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE )
-static HANDLE gDebugWindowsEventLogEventSource = NULL;
-#endif
-
-#if 0
-#pragma mark -
-#pragma mark == General ==
-#endif
-
-
-// DebugInitialize
-DEBUG_EXPORT OSStatus   DebugInitialize( DebugOutputType inType, ... )
-{
-    OSStatus err;
-    DebugOutputType type;
-    va_list args;
-
-    va_start( args, inType );
-
-#if ( TARGET_OS_VXWORKS )
-    // Set up the TCP state strings if they are not already set up by VxWorks (normally not set up for some reason).
-
-    if( !pTcpstates )
-    {
-        pTcpstates = (char **) kDebugTCPStates;
-    }
-#endif
-
-    // Set up DebugLib stuff (if building with Debugging.h).
-
-#if ( DEBUG_CORE_SERVICE_ASSERTS_ENABLED )
-    if( !gDebugAssertOutputHandlerUPP )
-    {
-        gDebugAssertOutputHandlerUPP = NewDebugAssertOutputHandlerUPP( DebugAssertOutputHandler );
-        check( gDebugAssertOutputHandlerUPP );
-        if( gDebugAssertOutputHandlerUPP )
-        {
-            InstallDebugAssertOutputHandler( gDebugAssertOutputHandlerUPP );
-        }
-    }
-#endif
-
-    // Pre-process meta-output kind to pick an appropriate output kind for the platform.
-
-    type = inType;
-    if( type == kDebugOutputTypeMetaConsole )
-    {
-        #if ( TARGET_OS_MAC )
-        type = kDebugOutputTypeMacOSXLog;
-        #elif ( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE )
-            #if ( DEBUG_FPRINTF_ENABLED )
-        type = kDebugOutputTypeFPrintF;
-            #else
-        type = kDebugOutputTypeWindowsDebugger;
-            #endif
-        #elif ( TARGET_API_MAC_OSX_KERNEL )
-            #if ( DEBUG_MAC_OS_X_IOLOG_ENABLED )
-        type = kDebugOutputTypeMacOSXIOLog;
-            #elif ( DEBUG_IDEBUG_ENABLED )
-        type = kDebugOutputTypeiDebug;
-            #elif ( DEBUG_KPRINTF_ENABLED )
-        type = kDebugOutputTypeKPrintF;
-            #endif
-        #elif ( TARGET_OS_VXWORKS )
-            #if ( DEBUG_FPRINTF_ENABLED )
-        type = kDebugOutputTypeFPrintF;
-            #else
-                #error target is VxWorks, but fprintf output is disabled
-            #endif
-        #else
-            #if ( DEBUG_FPRINTF_ENABLED )
-        type = kDebugOutputTypeFPrintF;
-            #endif
-        #endif
-    }
-
-    // Process output kind
-    gDebugOutputType = type;
-    switch( type )
-    {
-    case kDebugOutputTypeNone:
-        err = kNoErr;
-        break;
-
-    case kDebugOutputTypeCustom:
-        gDebugCustomOutputFunction = va_arg( args, DebugOutputFunctionPtr );
-        gDebugCustomOutputContext  = va_arg( args, void * );
-        err = kNoErr;
-        break;
-
-#if ( DEBUG_FPRINTF_ENABLED )
-    case kDebugOutputTypeFPrintF:
-        if( inType == kDebugOutputTypeMetaConsole )
-        {
-            err = DebugFPrintFInit( kDebugOutputTypeFlagsStdErr, NULL );
-        }
-        else
-        {
-            DebugOutputTypeFlags flags;
-            const char *                filename;
-
-            flags = (DebugOutputTypeFlags) va_arg( args, unsigned int );
-            if( ( flags & kDebugOutputTypeFlagsTypeMask ) == kDebugOutputTypeFlagsFile )
-            {
-                filename = va_arg( args, const char * );
-            }
-            else
-            {
-                filename = NULL;
-            }
-            err = DebugFPrintFInit( flags, filename );
-        }
-        break;
-#endif
-
-#if ( DEBUG_IDEBUG_ENABLED )
-    case kDebugOutputTypeiDebug:
-        err = DebugiDebugInit();
-        break;
-#endif
-
-#if ( DEBUG_KPRINTF_ENABLED )
-    case kDebugOutputTypeKPrintF:
-        err = kNoErr;
-        break;
-#endif
-
-#if ( DEBUG_MAC_OS_X_IOLOG_ENABLED )
-    case kDebugOutputTypeMacOSXIOLog:
-        err = kNoErr;
-        break;
-#endif
-
-#if ( TARGET_OS_MAC )
-    case kDebugOutputTypeMacOSXLog:
-        err = DebugMacOSXLogInit();
-        break;
-#endif
-
-#if ( TARGET_OS_WIN32 )
-    case kDebugOutputTypeWindowsDebugger:
-        err = kNoErr;
-        break;
-#endif
-
-#if ( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE )
-    case kDebugOutputTypeWindowsEventLog:
-    {
-        const char *        name;
-        HMODULE module;
-
-        name   = va_arg( args, const char * );
-        module = va_arg( args, HMODULE );
-        err = DebugWindowsEventLogInit( name, module );
-    }
-    break;
-#endif
-
-    default:
-        err = kParamErr;
-        goto exit;
-    }
-    gDebugInitialized = true;
-
-exit:
-    va_end( args );
-    return err;
-}
-
-
-// DebugFinalize
-DEBUG_EXPORT void       DebugFinalize( void )
-{
-#if ( DEBUG_CORE_SERVICE_ASSERTS_ENABLED )
-    check( gDebugAssertOutputHandlerUPP );
-    if( gDebugAssertOutputHandlerUPP )
-    {
-        InstallDebugAssertOutputHandler( NULL );
-        DisposeDebugAssertOutputHandlerUPP( gDebugAssertOutputHandlerUPP );
-        gDebugAssertOutputHandlerUPP = NULL;
-    }
-#endif
-}
-
-
-// DebugGetProperty
-DEBUG_EXPORT OSStatus   DebugGetProperty( DebugPropertyTag inTag, ... )
-{
-    OSStatus err;
-    va_list args;
-    DebugLevel *        level;
-
-    va_start( args, inTag );
-    switch( inTag )
-    {
-    case kDebugPropertyTagPrintLevelMin:
-        level  = va_arg( args, DebugLevel * );
-        *level = gDebugPrintLevelMin;
-        err = kNoErr;
-        break;
-
-    case kDebugPropertyTagPrintLevelMax:
-        level  = va_arg( args, DebugLevel * );
-        *level = gDebugPrintLevelMax;
-        err = kNoErr;
-        break;
-
-    case kDebugPropertyTagBreakLevel:
-        level  = va_arg( args, DebugLevel * );
-        *level = gDebugBreakLevel;
-        err = kNoErr;
-        break;
-
-    default:
-        err = kUnsupportedErr;
-        break;
-    }
-    va_end( args );
-    return err;
-}
-
-
-// DebugSetProperty
-DEBUG_EXPORT OSStatus   DebugSetProperty( DebugPropertyTag inTag, ... )
-{
-    OSStatus err;
-    va_list args;
-    DebugLevel level;
-
-    va_start( args, inTag );
-    switch( inTag )
-    {
-    case kDebugPropertyTagPrintLevelMin:
-        level  = va_arg( args, DebugLevel );
-        gDebugPrintLevelMin = level;
-        err = kNoErr;
-        break;
-
-    case kDebugPropertyTagPrintLevelMax:
-        level  = va_arg( args, DebugLevel );
-        gDebugPrintLevelMax = level;
-        err = kNoErr;
-        break;
-
-    case kDebugPropertyTagBreakLevel:
-        level  = va_arg( args, DebugLevel );
-        gDebugBreakLevel = level;
-        err = kNoErr;
-        break;
-
-    default:
-        err = kUnsupportedErr;
-        break;
-    }
-    va_end( args );
-    return err;
-}
-
-#if 0
-#pragma mark -
-#pragma mark == Output ==
-#endif
-
-
-// DebugPrintF
-DEBUG_EXPORT size_t DebugPrintF( DebugLevel inLevel, const char *inFormat, ... )
-{
-    va_list args;
-    size_t n;
-
-    // Skip if the level is not in the enabled range..
-
-    if( ( inLevel < gDebugPrintLevelMin ) || ( inLevel > gDebugPrintLevelMax ) )
-    {
-        n = 0;
-        goto exit;
-    }
-
-    va_start( args, inFormat );
-    n = DebugPrintFVAList( inLevel, inFormat, args );
-    va_end( args );
-
-exit:
-    return n;
-}
-
-
-// DebugPrintFVAList
-DEBUG_EXPORT size_t DebugPrintFVAList( DebugLevel inLevel, const char *inFormat, va_list inArgs )
-{
-    size_t n;
-    char buffer[ 512 ];
-
-    // Skip if the level is not in the enabled range..
-
-    if( ( inLevel < gDebugPrintLevelMin ) || ( inLevel > gDebugPrintLevelMax ) )
-    {
-        n = 0;
-        goto exit;
-    }
-
-    n = DebugSNPrintFVAList( buffer, sizeof( buffer ), inFormat, inArgs );
-    DebugPrint( inLevel, buffer, (size_t) n );
-
-exit:
-    return n;
-}
-
-
-// DebugPrint
-static OSStatus DebugPrint( DebugLevel inLevel, char *inData, size_t inSize )
-{
-    OSStatus err;
-
-    // Skip if the level is not in the enabled range..
-
-    if( ( inLevel < gDebugPrintLevelMin ) || ( inLevel > gDebugPrintLevelMax ) )
-    {
-        err = kRangeErr;
-        goto exit;
-    }
-
-    // Printing is not safe at interrupt time so check for this and warn with an interrupt safe mechanism (if available).
-
-    if( DebugTaskLevel() & kDebugInterruptLevelMask )
-    {
-        #if ( TARGET_OS_VXWORKS )
-        logMsg( "\ncannot print at interrupt time\n\n", 1, 2, 3, 4, 5, 6 );
-        #endif
-
-        err = kExecutionStateErr;
-        goto exit;
-    }
-
-    // Initialize the debugging library if it hasn't already been initialized (allows for zero-config usage).
-
-    if( !gDebugInitialized )
-    {
-        debug_initialize( kDebugOutputTypeMetaConsole );
-    }
-
-    // Print based on the current output type.
-
-    switch( gDebugOutputType )
-    {
-    case kDebugOutputTypeNone:
-        break;
-
-    case kDebugOutputTypeCustom:
-        if( gDebugCustomOutputFunction )
-        {
-            gDebugCustomOutputFunction( inData, inSize, gDebugCustomOutputContext );
-        }
-        break;
-
-#if ( DEBUG_FPRINTF_ENABLED )
-    case kDebugOutputTypeFPrintF:
-        DebugFPrintFPrint( inData, inSize );
-        break;
-#endif
-
-#if ( DEBUG_IDEBUG_ENABLED )
-    case kDebugOutputTypeiDebug:
-        DebugiDebugPrint( inData, inSize );
-        break;
-#endif
-
-#if ( DEBUG_KPRINTF_ENABLED )
-    case kDebugOutputTypeKPrintF:
-        DebugKPrintFPrint( inData, inSize );
-        break;
-#endif
-
-#if ( DEBUG_MAC_OS_X_IOLOG_ENABLED )
-    case kDebugOutputTypeMacOSXIOLog:
-        DebugMacOSXIOLogPrint( inData, inSize );
-        break;
-#endif
-
-#if ( TARGET_OS_MAC )
-    case kDebugOutputTypeMacOSXLog:
-        DebugMacOSXLogPrint( inData, inSize );
-        break;
-#endif
-
-#if ( TARGET_OS_WIN32 )
-    case kDebugOutputTypeWindowsDebugger:
-        DebugWindowsDebuggerPrint( inData, inSize );
-        break;
-#endif
-
-#if ( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE )
-    case kDebugOutputTypeWindowsEventLog:
-        DebugWindowsEventLogPrint( inLevel, inData, inSize );
-        break;
-#endif
-
-    default:
-        break;
-    }
-    err = kNoErr;
-
-exit:
-    return err;
-}
-
-
-// DebugPrintAssert
-
-// Warning: This routine relies on several of the strings being string constants that will exist forever because the
-//        underlying logMsg API that does the printing is asynchronous so it cannot use temporary/stack-based
-//        pointer variables (e.g. local strings). The debug macros that invoke this function only use constant
-//        constant strings, but if this function is invoked directly from other places, it must use constant strings.
-DEBUG_EXPORT void
-DebugPrintAssert(
-    int_least32_t inErrorCode,
-    const char *    inAssertString,
-    const char *    inMessage,
-    const char *    inFilename,
-    int_least32_t inLineNumber,
-    const char *    inFunction )
-{
-    // Skip if the level is not in the enabled range..
-    if( ( kDebugLevelAssert < gDebugPrintLevelMin ) || ( kDebugLevelAssert > gDebugPrintLevelMax ) )
-    {
-        return;
-    }
-
-    if( inErrorCode != 0 )
-    {
-        DebugPrintF(
-            kDebugLevelAssert,
-            "\n"
-            "[ASSERT] error:  %ld (%m)\n"
-            "[ASSERT] where:  \"%s\", line %ld, \"%s\"\n"
-            "\n",
-            inErrorCode, inErrorCode,
-            inFilename ? inFilename : "",
-            inLineNumber,
-            inFunction ? inFunction : "" );
-    }
-    else
-    {
-        DebugPrintF(
-            kDebugLevelAssert,
-            "\n"
-            "[ASSERT] assert: \"%s\" %s\n"
-            "[ASSERT] where:  \"%s\", line %ld, \"%s\"\n"
-            "\n",
-            inAssertString ? inAssertString : "",
-            inMessage ? inMessage : "",
-            inFilename ? inFilename : "",
-            inLineNumber,
-            inFunction ? inFunction : "" );
-    }
-
-    // Break into the debugger if enabled
-    #if ( TARGET_OS_WIN32 )
-    if( gDebugBreakLevel <= kDebugLevelAssert )
-    {
-        if( IsDebuggerPresent() )
-        {
-            DebugBreak();
-        }
-    }
-    #endif
-}
-
-#if 0
-#pragma mark -
-#endif
-
-#if ( DEBUG_FPRINTF_ENABLED )
-
-// DebugFPrintFInit
-static OSStatus DebugFPrintFInit( DebugOutputTypeFlags inFlags, const char *inFilename )
-{
-    OSStatus err;
-    DebugOutputTypeFlags typeFlags;
-
-    typeFlags = inFlags & kDebugOutputTypeFlagsTypeMask;
-    if( typeFlags == kDebugOutputTypeFlagsStdOut )
-    {
-        #if ( TARGET_OS_WIN32 )
-        DebugWinEnableConsole();
-        #endif
-
-        gDebugFPrintFFile = stdout;
-    }
-    else if( typeFlags == kDebugOutputTypeFlagsStdErr )
-    {
-        #if ( TARGET_OS_WIN32 )
-        DebugWinEnableConsole();
-        #endif
-
-        gDebugFPrintFFile = stdout;
-    }
-    else if( typeFlags == kDebugOutputTypeFlagsFile )
-    {
-        require_action_quiet( inFilename && ( *inFilename != '\0' ), exit, err = kOpenErr );
-
-        gDebugFPrintFFile = fopen( inFilename, "a" );
-        require_action_quiet( gDebugFPrintFFile, exit, err = kOpenErr );
-    }
-    else
-    {
-        err = kParamErr;
-        goto exit;
-    }
-    err = kNoErr;
-
-exit:
-    return err;
-}
-
-
-// DebugFPrintFPrint
-static void DebugFPrintFPrint( char *inData, size_t inSize )
-{
-    char *      p;
-    char *      q;
-
-    // Convert \r to \n. fprintf will interpret \n and convert to whatever is appropriate for the platform.
-    p = inData;
-    q = p + inSize;
-    while( p < q )
-    {
-        if( *p == '\r' )
-        {
-            *p = '\n';
-        }
-        ++p;
-    }
-
-    // Write the data and flush.
-    if( gDebugFPrintFFile )
-    {
-        fprintf( gDebugFPrintFFile, "%.*s", (int) inSize, inData );
-        fflush( gDebugFPrintFFile );
-    }
-}
-#endif  // DEBUG_FPRINTF_ENABLED
-
-#if ( DEBUG_IDEBUG_ENABLED )
-
-// DebugiDebugInit
-static OSStatus DebugiDebugInit( void )
-{
-    OSStatus err;
-
-    #if ( TARGET_API_MAC_OSX_KERNEL )
-
-    extern uint32_t *       _giDebugReserved1;
-
-    // Emulate the iDebugSetOutputType macro in iDebugServices.h.
-    // Note: This is not thread safe, but neither is iDebugServices.h nor iDebugKext.
-    if( !_giDebugReserved1 )
-    {
-        _giDebugReserved1 = (uint32_t *) IOMalloc( sizeof( uint32_t ) );
-        require_action_quiet( _giDebugReserved1, exit, err = kNoMemoryErr );
-    }
-    *_giDebugReserved1 = 0x00010000U;
-    err = kNoErr;
-exit:
-    #else
-
-    __private_extern__ void iDebugSetOutputTypeInternal( uint32_t inType );
-
-    iDebugSetOutputTypeInternal( 0x00010000U );
-    err = kNoErr;
-
-    #endif
-
-    return err;
-}
-
-
-// DebugiDebugPrint
-static void DebugiDebugPrint( char *inData, size_t inSize )
-{
-    #if ( TARGET_API_MAC_OSX_KERNEL )
-
-    // Locally declared here so we do not need to include iDebugKext.h.
-    // Note: IOKit uses a global namespace for all code and only a partial link occurs at build time. When the
-    // KEXT is loaded, the runtime linker will link in this extern'd symbol (assuming iDebug is present).
-    // _giDebugLogInternal is actually part of IOKit proper so this should link even if iDebug is not present.
-
-    typedef void ( *iDebugLogFunctionPtr )( uint32_t inLevel, uint32_t inTag, const char *inFormat, ... );
-
-    extern iDebugLogFunctionPtr _giDebugLogInternal;
-
-    if( _giDebugLogInternal )
-    {
-        _giDebugLogInternal( 0, 0, "%.*s", (int) inSize, inData );
-    }
-
-    #else
-
-    __private_extern__ void iDebugLogInternal( uint32_t inLevel, uint32_t inTag, const char *inFormat, ... );
-
-    iDebugLogInternal( 0, 0, "%.*s", (int) inSize, inData );
-
-    #endif
-}
-#endif
-
-#if ( DEBUG_KPRINTF_ENABLED )
-
-// DebugKPrintFPrint
-static void DebugKPrintFPrint( char *inData, size_t inSize )
-{
-    extern void kprintf( const char *inFormat, ... );
-
-    kprintf( "%.*s", (int) inSize, inData );
-}
-#endif
-
-#if ( DEBUG_MAC_OS_X_IOLOG_ENABLED )
-
-// DebugMacOSXIOLogPrint
-static void DebugMacOSXIOLogPrint( char *inData, size_t inSize )
-{
-    extern void IOLog( const char *inFormat, ... );
-
-    IOLog( "%.*s", (int) inSize, inData );
-}
-#endif
-
-#if ( TARGET_OS_MAC )
-
-// DebugMacOSXLogInit
-static OSStatus DebugMacOSXLogInit( void )
-{
-    OSStatus err;
-    CFStringRef path;
-    CFURLRef url;
-    CFBundleRef bundle;
-    CFStringRef functionName;
-    void *          functionPtr;
-
-    bundle = NULL;
-
-    // Create a bundle reference for System.framework.
-
-    path = CFSTR( "/System/Library/Frameworks/System.framework" );
-    url = CFURLCreateWithFileSystemPath( NULL, path, kCFURLPOSIXPathStyle, true );
-    require_action_quiet( url, exit, err = memFullErr );
-
-    bundle = CFBundleCreate( NULL, url );
-    CFRelease( url );
-    require_action_quiet( bundle, exit, err = memFullErr );
-
-    // Get a ptr to the system's "printf" function from System.framework.
-
-    functionName = CFSTR( "printf" );
-    functionPtr = CFBundleGetFunctionPointerForName( bundle, functionName );
-    require_action_quiet( functionPtr, exit, err = memFullErr );
-
-    // Success! Note: The bundle cannot be released because it would invalidate the function ptr.
-
-    gDebugMacOSXLogFunction = (DebugMacOSXLogFunctionPtr) functionPtr;
-    bundle = NULL;
-    err = noErr;
-
-exit:
-    if( bundle )
-    {
-        CFRelease( bundle );
-    }
-    return err;
-}
-
-// DebugMacOSXLogPrint
-static void DebugMacOSXLogPrint( char *inData, size_t inSize )
-{
-    if( gDebugMacOSXLogFunction )
-    {
-        gDebugMacOSXLogFunction( "%.*s", (int) inSize, inData );
-    }
-}
-#endif
-
-#if ( TARGET_OS_WIN32 )
-
-// DebugWindowsDebuggerPrint
-void    DebugWindowsDebuggerPrint( char *inData, size_t inSize )
-{
-    TCHAR buffer[ 512 ];
-    const char *        src;
-    const char *        end;
-    TCHAR *             dst;
-    char c;
-
-    // Copy locally and null terminate the string. This also converts from char to TCHAR in case we are
-    // building with UNICODE enabled since the input is always char. Also convert \r to \n in the process.
-    src = inData;
-    if( inSize >= sizeof_array( buffer ) )
-    {
-        inSize = sizeof_array( buffer ) - 1;
-    }
-    end = src + inSize;
-    dst = buffer;
-    while( src < end )
-    {
-        c = *src++;
-        if( c == '\r' )
-        {
-            c = '\n';
-        }
-        *dst++ = (TCHAR) c;
-    }
-    *dst = 0;
-
-    // Print out the string to the debugger.
-    OutputDebugString( buffer );
-}
-#endif
-
-#if ( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE )
-
-// DebugWindowsEventLogInit
-static OSStatus DebugWindowsEventLogInit( const char *inName, HMODULE inModule )
-{
-    OSStatus err;
-    HKEY key;
-    TCHAR name[ 128 ];
-    const char *        src;
-    TCHAR path[ MAX_PATH ];
-    size_t size;
-    DWORD typesSupported;
-    DWORD n;
-
-    key = NULL;
-
-    // Use a default name if needed then convert the name to TCHARs so it works on ANSI or Unicode builds.
-    if( !inName || ( *inName == '\0' ) )
-    {
-        inName = "DefaultApp";
-    }
-    DebugWinCharToTCharString( inName, kSizeCString, name, sizeof( name ), NULL );
-
-    // Build the path string using the fixed registry path and app name.
-    src = "SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\";
-    DebugWinCharToTCharString( src, kSizeCString, path, sizeof_array( path ), &size );
-    DebugWinCharToTCharString( inName, kSizeCString, path + size, sizeof_array( path ) - size, NULL );
-
-    // Add/Open the source name as a sub-key under the Application key in the EventLog registry key.
-    err = RegCreateKeyEx( HKEY_LOCAL_MACHINE, path, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &key, NULL );
-    require_noerr_quiet( err, exit );
-
-    // Set the path in the EventMessageFile subkey. Add 1 to the TCHAR count to include the null terminator.
-    n = GetModuleFileName( inModule, path, sizeof_array( path ) );
-    err = translate_errno( n > 0, (OSStatus) GetLastError(), kParamErr );
-    require_noerr_quiet( err, exit );
-    n += 1;
-    n *= sizeof( TCHAR );
-
-    err = RegSetValueEx( key, TEXT( "EventMessageFile" ), 0, REG_EXPAND_SZ, (const LPBYTE) path, n );
-    require_noerr_quiet( err, exit );
-
-    // Set the supported event types in the TypesSupported subkey.
-    typesSupported = EVENTLOG_SUCCESS | EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE | EVENTLOG_INFORMATION_TYPE |
-                     EVENTLOG_AUDIT_SUCCESS | EVENTLOG_AUDIT_FAILURE;
-    err = RegSetValueEx( key, TEXT( "TypesSupported" ), 0, REG_DWORD, (const LPBYTE) &typesSupported, sizeof( DWORD ) );
-    require_noerr_quiet( err, exit );
-
-    // Set up the event source.
-    gDebugWindowsEventLogEventSource = RegisterEventSource( NULL, name );
-    err = translate_errno( gDebugWindowsEventLogEventSource, (OSStatus) GetLastError(), kParamErr );
-    require_noerr_quiet( err, exit );
-
-exit:
-    if( key )
-    {
-        RegCloseKey( key );
-    }
-    return err;
-}
-
-
-// DebugWindowsEventLogPrint
-static void DebugWindowsEventLogPrint( DebugLevel inLevel, char *inData, size_t inSize )
-{
-    WORD type;
-    TCHAR buffer[ 512 ];
-    const char *        src;
-    const char *        end;
-    TCHAR *             dst;
-    char c;
-    const TCHAR *       array[ 1 ];
-
-    // Map the debug level to a Windows EventLog type
-    if( inLevel <= kDebugLevelNotice )
-    {
-        type = EVENTLOG_INFORMATION_TYPE;
-    }
-    else if( inLevel <= kDebugLevelWarning )
-    {
-        type = EVENTLOG_WARNING_TYPE;
-    }
-    else
-    {
-        type = EVENTLOG_ERROR_TYPE;
-    }
-
-    // Copy locally and null terminate the string. This also converts from char to TCHAR in case we are
-    // building with UNICODE enabled since the input is always char. Also convert \r to \n in the process.
-    src = inData;
-    if( inSize >= sizeof_array( buffer ) )
-    {
-        inSize = sizeof_array( buffer ) - 1;
-    }
-    end = src + inSize;
-    dst = buffer;
-    while( src < end )
-    {
-        c = *src++;
-        if( c == '\r' )
-        {
-            c = '\n';
-        }
-        *dst++ = (TCHAR) c;
-    }
-    *dst = 0;
-
-    // Add the string to the event log.
-    array[ 0 ] = buffer;
-    if( gDebugWindowsEventLogEventSource )
-    {
-        ReportEvent( gDebugWindowsEventLogEventSource, type, 0, 0x20000001L, NULL, 1, 0, array, NULL );
-    }
-}
-#endif  // TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE
-
-#if ( DEBUG_CORE_SERVICE_ASSERTS_ENABLED )
-
-// DebugAssertOutputHandler
-static pascal void
-DebugAssertOutputHandler(
-    OSType inComponentSignature,
-    UInt32 inOptions,
-    const char *        inAssertString,
-    const char *        inExceptionString,
-    const char *        inErrorString,
-    const char *        inFileName,
-    long inLineNumber,
-    void *              inValue,
-    ConstStr255Param inOutputMsg )
-{
-    DEBUG_UNUSED( inComponentSignature );
-    DEBUG_UNUSED( inOptions );
-    DEBUG_UNUSED( inExceptionString );
-    DEBUG_UNUSED( inValue );
-    DEBUG_UNUSED( inOutputMsg );
-
-    DebugPrintAssert( 0, inAssertString, inErrorString, inFileName, (int_least32_t) inLineNumber, "" );
-}
-#endif
-
-#if 0
-#pragma mark -
-#pragma mark == Utilities ==
-#endif
-
-
-// DebugSNPrintF
-
-// Stolen from mDNS.c's mDNS_snprintf/mDNS_vsnprintf with the following changes:
-
-// Changed names to avoid name collisions with the mDNS versions.
-// Changed types to standard C types since mDNSEmbeddedAPI.h may not be available.
-// Conditionalized mDNS stuff so it can be used with or with mDNSEmbeddedAPI.h.
-// Added 64-bit support for %d (%lld), %i (%lli), %u (%llu), %o (%llo), %x (%llx), and %b (%llb).
-// Added %@   - Cocoa/CoreFoundation object. Param is the object. Strings are used directly. Others use CFCopyDescription.
-// Added %.8a - FIbre Channel address. Arg=ptr to address.
-// Added %##a - IPv4 (if AF_INET defined) or IPv6 (if AF_INET6 defined) sockaddr. Arg=ptr to sockaddr.
-// Added %b   - Binary representation of integer (e.g. 01101011). Modifiers and arg=the same as %d, %x, etc.
-// Added %C   - Mac-style FourCharCode (e.g. 'APPL'). Arg=32-bit value to print as a Mac-style FourCharCode.
-// Added %H   - Hex Dump (e.g. "\x6b\xa7" -> "6B A7"). 1st arg=ptr, 2nd arg=size, 3rd arg=max size.
-// Added %#H  - Hex Dump & ASCII (e.g. "\x41\x62" -> "6B A7 'Ab'"). 1st arg=ptr, 2nd arg=size, 3rd arg=max size.
-// Added %m   - Error Message (e.g. 0 -> "kNoErr"). Modifiers and error code args are the same as %d, %x, etc.
-// Added %S   - UTF-16 string. Host order if no BOM. Precision is UTF-16 char count. BOM counts in any precision. Arg=ptr.
-// Added %#S  - Big Endian UTF-16 string (unless BOM overrides). Otherwise the same as %S.
-// Added %##S - Little Endian UTF-16 string (unless BOM overrides). Otherwise the same as %S.
-// Added %U   - Universally Unique Identifier (UUID) (e.g. 6ba7b810-9dad-11d1-80b4-00c04fd430c8). Arg=ptr to 16-byte UUID.
-
-
-DEBUG_EXPORT size_t DebugSNPrintF(char *sbuffer, size_t buflen, const char *fmt, ...)
-{
-    size_t length;
-
-    va_list ptr;
-    va_start(ptr,fmt);
-    length = DebugSNPrintFVAList(sbuffer, buflen, fmt, ptr);
-    va_end(ptr);
-
-    return length;
-}
-
-
-// DebugSNPrintFVAList    - va_list version of DebugSNPrintF. See DebugSNPrintF for more info.
-DEBUG_EXPORT size_t DebugSNPrintFVAList(char *sbuffer, size_t buflen, const char *fmt, va_list arg)
-{
-    static const struct DebugSNPrintF_format
-    {
-        unsigned leftJustify : 1;
-        unsigned forceSign : 1;
-        unsigned zeroPad : 1;
-        unsigned havePrecision : 1;
-        unsigned hSize : 1;
-        char lSize;
-        char altForm;
-        char sign;              // +, - or space
-        unsigned int fieldWidth;
-        unsigned int precision;
-    } DebugSNPrintF_format_default = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
-
-    size_t nwritten = 0;
-    int c;
-    if (buflen == 0) return 0;
-    buflen--;       // Pre-reserve one space in the buffer for the terminating nul
-    if (buflen == 0) goto exit;
-
-    for (c = *fmt; c != 0; c = *++fmt)
-    {
-        if (c != '%')
-        {
-            *sbuffer++ = (char)c;
-            if (++nwritten >= buflen) goto exit;
-        }
-        else
-        {
-            size_t i=0, j;
-            // The mDNS Vsprintf Argument Conversion Buffer is used as a temporary holding area for
-            // generating decimal numbers, hexdecimal numbers, IP addresses, domain name strings, etc.
-            // The size needs to be enough for a 256-byte domain name plus some error text.
-            #define mDNS_VACB_Size 300
-            char mDNS_VACB[mDNS_VACB_Size];
-            #define mDNS_VACB_Lim (&mDNS_VACB[mDNS_VACB_Size])
-            #define mDNS_VACB_Remain(s) ((size_t)(mDNS_VACB_Lim - s))
-            char *s = mDNS_VACB_Lim;
-            const char *digits = "0123456789ABCDEF";
-            struct DebugSNPrintF_format F = DebugSNPrintF_format_default;
-
-            for(;;) //  decode flags
-            {
-                c = *++fmt;
-                if      (c == '-') F.leftJustify = 1;
-                else if (c == '+') F.forceSign = 1;
-                else if (c == ' ') F.sign = ' ';
-                else if (c == '#') F.altForm++;
-                else if (c == '0') F.zeroPad = 1;
-                else break;
-            }
-
-            if (c == '*')   //  decode field width
-            {
-                int f = va_arg(arg, int);
-                if (f < 0) { f = -f; F.leftJustify = 1; }
-                F.fieldWidth = (unsigned int)f;
-                c = *++fmt;
-            }
-            else
-            {
-                for (; c >= '0' && c <= '9'; c = *++fmt)
-                    F.fieldWidth = (10 * F.fieldWidth) + (c - '0');
-            }
-
-            if (c == '.')   //  decode precision
-            {
-                if ((c = *++fmt) == '*')
-                { F.precision = va_arg(arg, unsigned int); c = *++fmt; }
-                else for (; c >= '0' && c <= '9'; c = *++fmt)
-                        F.precision = (10 * F.precision) + (c - '0');
-                F.havePrecision = 1;
-            }
-
-            if (F.leftJustify) F.zeroPad = 0;
-
-conv:
-            switch (c)  //  perform appropriate conversion
-            {
-                #if TYPE_LONGLONG_NATIVE
-                unsigned_long_long_compat n;
-                unsigned_long_long_compat base;
-                #else
-                unsigned long n;
-                unsigned long base;
-                #endif
-            case 'h':  F.hSize = 1; c = *++fmt; goto conv;
-            case 'l':       // fall through
-            case 'L':  F.lSize++; c = *++fmt; goto conv;
-            case 'd':
-            case 'i':  base = 10;
-                goto canBeSigned;
-            case 'u':  base = 10;
-                goto notSigned;
-            case 'o':  base = 8;
-                goto notSigned;
-            case 'b':  base = 2;
-                goto notSigned;
-            case 'p':  n = va_arg(arg, uintptr_t);
-                F.havePrecision = 1;
-                F.precision = (sizeof(uintptr_t) == 4) ? 8 : 16;
-                F.sign = 0;
-                base = 16;
-                c = 'x';
-                goto number;
-            case 'x':  digits = "0123456789abcdef";
-            case 'X':  base = 16;
-                goto notSigned;
-canBeSigned:
-                            #if TYPE_LONGLONG_NATIVE
-                if (F.lSize == 1) n = (unsigned_long_long_compat)va_arg(arg, long);
-                else if (F.lSize == 2) n = (unsigned_long_long_compat)va_arg(arg, long_long_compat);
-                else n = (unsigned_long_long_compat)va_arg(arg, int);
-                            #else
-                if (F.lSize == 1) n = (unsigned long)va_arg(arg, long);
-                else if (F.lSize == 2) goto exit;
-                else n = (unsigned long)va_arg(arg, int);
-                            #endif
-                if (F.hSize) n = (short) n;
-                            #if TYPE_LONGLONG_NATIVE
-                if ((long_long_compat) n < 0) { n = (unsigned_long_long_compat)-(long_long_compat)n; F.sign = '-'; }
-                            #else
-                if ((long) n < 0) { n = (unsigned long)-(long)n; F.sign = '-'; }
-                            #endif
-                else if (F.forceSign) F.sign = '+';
-                goto number;
-
-notSigned:  if (F.lSize == 1) n = va_arg(arg, unsigned long);
-                else if (F.lSize == 2)
-                {
-                                #if TYPE_LONGLONG_NATIVE
-                    n = va_arg(arg, unsigned_long_long_compat);
-                                #else
-                    goto exit;
-                                #endif
-                }
-                else n = va_arg(arg, unsigned int);
-                if (F.hSize) n = (unsigned short) n;
-                F.sign = 0;
-                goto number;
-
-number:     if (!F.havePrecision)
-                {
-                    if (F.zeroPad)
-                    {
-                        F.precision = F.fieldWidth;
-                        if (F.altForm) F.precision -= 2;
-                        if (F.sign) --F.precision;
-                    }
-                    if (F.precision < 1) F.precision = 1;
-                }
-                if (F.precision > mDNS_VACB_Size - 1)
-                    F.precision = mDNS_VACB_Size - 1;
-                for (i = 0; n; n /= base, i++) *--s = (char)(digits[n % base]);
-                for (; i < F.precision; i++) *--s = '0';
-                if (F.altForm) { *--s = (char)c; *--s = '0'; i += 2; }
-                if (F.sign) { *--s = F.sign; i++; }
-                break;
-
-            case 'a':  {
-                unsigned char *a = va_arg(arg, unsigned char *);
-                char pre[4] = "";
-                char post[32] = "";
-                if (!a) { static char emsg[] = "<<NULL>>"; s = emsg; i = sizeof(emsg)-1; }
-                else
-                {
-                    s = mDNS_VACB;              // Adjust s to point to the start of the buffer, not the end
-                    if (F.altForm == 1)
-                    {
-                                    #if (defined(MDNS_DEBUGMSGS))
-                        mDNSAddr *ip = (mDNSAddr*)a;
-                        switch (ip->type)
-                        {
-                        case mDNSAddrType_IPv4: F.precision =  4; a = (unsigned char *)&ip->ip.v4; break;
-                        case mDNSAddrType_IPv6: F.precision = 16; a = (unsigned char *)&ip->ip.v6; break;
-                        default:                F.precision =  0; break;
-                        }
-                                    #else
-                        F.precision = 0;                    // mDNSEmbeddedAPI.h not included so no mDNSAddr support
-                                    #endif
-                    }
-                    else if (F.altForm == 2)
-                    {
-                                    #ifdef AF_INET
-                        const struct sockaddr *sa;
-                        unsigned char *port;
-                        sa = (const struct sockaddr*)a;
-                        switch (sa->sa_family)
-                        {
-                        case AF_INET:  F.precision =  4; a = (unsigned char*)&((const struct sockaddr_in *)a)->sin_addr;
-                            port = (unsigned char*)&((const struct sockaddr_in *)sa)->sin_port;
-                            DebugSNPrintF(post, sizeof(post), ":%d", (port[0] << 8) | port[1]); break;
-                                            #ifdef AF_INET6
-                        case AF_INET6: F.precision = 16; a = (unsigned char*)&((const struct sockaddr_in6 *)a)->sin6_addr;
-                            pre[0] = '['; pre[1] = '\0';
-                            port = (unsigned char*)&((const struct sockaddr_in6 *)sa)->sin6_port;
-                            DebugSNPrintF(post, sizeof(post), "%%%d]:%d",
-                                          (int)((const struct sockaddr_in6 *)sa)->sin6_scope_id,
-                                          (port[0] << 8) | port[1]); break;
-                                            #endif
-                        default:       F.precision =  0; break;
-                        }
-                                    #else
-                        F.precision = 0;                    // socket interfaces not included so no sockaddr support
-                                    #endif
-                    }
-                    switch (F.precision)
-                    {
-                    case  4: i = DebugSNPrintF(mDNS_VACB, sizeof(mDNS_VACB), "%d.%d.%d.%d%s",
-                                               a[0], a[1], a[2], a[3], post); break;
-                    case  6: i = DebugSNPrintF(mDNS_VACB, sizeof(mDNS_VACB), "%02X:%02X:%02X:%02X:%02X:%02X",
-                                               a[0], a[1], a[2], a[3], a[4], a[5]); break;
-                    case  8: i = DebugSNPrintF(mDNS_VACB, sizeof(mDNS_VACB), "%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X",
-                                               a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7]); break;
-                    case 16: i = DebugSNPrintF(mDNS_VACB, sizeof(mDNS_VACB),
-                                               "%s%02X%02X:%02X%02X:%02X%02X:%02X%02X:%02X%02X:%02X%02X:%02X%02X:%02X%02X%s",
-                                               pre, a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8],
-                                               a[9], a[10], a[11], a[12], a[13], a[14], a[15], post); break;
-                    default: i = DebugSNPrintF(mDNS_VACB, sizeof(mDNS_VACB), "%s", "<< ERROR: Must specify address size "
-                                               "(i.e. %.4a=IPv4, %.6a=Ethernet, %.8a=Fibre Channel %.16a=IPv6) >>"); break;
-                    }
-                }
-            }
-            break;
-
-            case 'U':  {
-                unsigned char *a = va_arg(arg, unsigned char *);
-                if (!a) { static char emsg[] = "<<NULL>>"; s = emsg; i = sizeof(emsg)-1; }
-                else
-                {
-                    s = mDNS_VACB;              // Adjust s to point to the start of the buffer, not the end
-                    i = DebugSNPrintF(mDNS_VACB, sizeof(mDNS_VACB), "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
-                                      *((uint32_t*) &a[0]), *((uint16_t*) &a[4]), *((uint16_t*) &a[6]),
-                                      a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15]); break;
-                }
-            }
-            break;
-
-            case 'c':  *--s = (char)va_arg(arg, int); i = 1; break;
-
-            case 'C':  if (F.lSize) n = va_arg(arg, unsigned long);
-                else n = va_arg(arg, unsigned int);
-                if (F.hSize) n = (unsigned short) n;
-                c = (int)( n        & 0xFF); *--s = (char)(DebugIsPrint(c) ? c : '^');
-                c = (int)((n >>  8) & 0xFF); *--s = (char)(DebugIsPrint(c) ? c : '^');
-                c = (int)((n >> 16) & 0xFF); *--s = (char)(DebugIsPrint(c) ? c : '^');
-                c = (int)((n >> 24) & 0xFF); *--s = (char)(DebugIsPrint(c) ? c : '^');
-                i = 4;
-                break;
-
-            case 's':  s = va_arg(arg, char *);
-                if (!s) { static char emsg[] = "<<NULL>>"; s = emsg; i = sizeof(emsg)-1; }
-                else switch (F.altForm)
-                    {
-                    case 0: i=0;
-                        if (F.havePrecision)                                // C string
-                        {
-                            while((i < F.precision) && s[i]) i++;
-                            // Make sure we don't truncate in the middle of a UTF-8 character.
-                            // If the last character is part of a multi-byte UTF-8 character, back up to the start of it.
-                            j=0;
-                            while((i > 0) && ((c = s[i-1]) & 0x80)) { j++; i--; if((c & 0xC0) != 0x80) break;}
-                            // If the actual count of UTF-8 characters matches the encoded UTF-8 count, add it back.
-                            if((j > 1) && (j <= 6))
-                            {
-                                int test = (0xFF << (8-j)) & 0xFF;
-                                int mask = test | (1 << ((8-j)-1));
-                                if((c & mask) == test) i += j;
-                            }
-                        }
-                        else
-                            while(s[i]) i++;
-                        break;
-                    case 1: i = (unsigned char) *s++; break;                // Pascal string
-                    case 2: {                                               // DNS label-sequence name
-                        unsigned char *a = (unsigned char *)s;
-                        s = mDNS_VACB;                  // Adjust s to point to the start of the buffer, not the end
-                        if (*a == 0) *s++ = '.';                    // Special case for root DNS name
-                        while (*a)
-                        {
-                            if (*a > 63) { s += DebugSNPrintF(s, mDNS_VACB_Remain(s), "<<INVALID LABEL LENGTH %u>>", *a); break; }
-                            if (s + *a >= &mDNS_VACB[254]) { s += DebugSNPrintF(s, mDNS_VACB_Remain(s), "<<NAME TOO LONG>>"); break; }
-                            s += DebugSNPrintF(s, mDNS_VACB_Remain(s), "%#s.", a);
-                            a += 1 + *a;
-                        }
-                        i = (size_t)(s - mDNS_VACB);
-                        s = mDNS_VACB;                  // Reset s back to the start of the buffer
-                        break;
-                    }
-                    }
-                if (F.havePrecision && i > F.precision)                 // Make sure we don't truncate in the middle of a UTF-8 character
-                { i = F.precision; while (i>0 && (s[i] & 0xC0) == 0x80) i--;}
-                break;
-
-            case 'S':   {       // UTF-16 string
-                unsigned char *a = va_arg(arg, unsigned char *);
-                uint16_t      *u = (uint16_t*)a;
-                if (!u) { static char emsg[] = "<<NULL>>"; s = emsg; i = sizeof(emsg)-1; }
-                if ((!F.havePrecision || F.precision))
-                {
-                    if      ((a[0] == 0xFE) && (a[1] == 0xFF)) { F.altForm = 1; u += 1; a += 2; F.precision--; }                // Big Endian
-                    else if ((a[0] == 0xFF) && (a[1] == 0xFE)) { F.altForm = 2; u += 1; a += 2; F.precision--; }                // Little Endian
-                }
-                s = mDNS_VACB;              // Adjust s to point to the start of the buffer, not the end
-                switch (F.altForm)
-                {
-                case 0: while ((!F.havePrecision || (i < F.precision)) && u[i] && mDNS_VACB_Remain(s))                  // Host Endian
-                    { c = u[i]; *s++ = (char)(DebugIsPrint(c) ? c : '^'); i++; }
-                    break;
-                case 1: while ((!F.havePrecision || (i < F.precision)) && u[i] && mDNS_VACB_Remain(s))                  // Big Endian
-                    { c = ((a[0] << 8) | a[1]) & 0xFF; *s++ = (char)(DebugIsPrint(c) ? c : '^'); i++; a += 2; }
-                    break;
-                case 2: while ((!F.havePrecision || (i < F.precision)) && u[i] && mDNS_VACB_Remain(s))                  // Little Endian
-                    { c = ((a[1] << 8) | a[0]) & 0xFF; *s++ = (char)(DebugIsPrint(c) ? c : '^'); i++; a += 2; }
-                    break;
-                }
-            }
-                s = mDNS_VACB;              // Reset s back to the start of the buffer
-                break;
-
-            #if TARGET_OS_MAC
-            case '@':   {       // Cocoa/CoreFoundation object
-                CFTypeRef cfObj;
-                CFStringRef cfStr;
-                cfObj = (CFTypeRef) va_arg(arg, void *);
-                cfStr = (CFGetTypeID(cfObj) == CFStringGetTypeID()) ? (CFStringRef)CFRetain(cfObj) : CFCopyDescription(cfObj);
-                s = mDNS_VACB;              // Adjust s to point to the start of the buffer, not the end
-                if (cfStr)
-                {
-                    CFRange range;
-                    CFIndex m;
-                    range = CFRangeMake(0, CFStringGetLength(cfStr));
-                    m = 0;

... etc. - the rest is truncated


More information about the Libreoffice-commits mailing list