147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt/* -*- Mode: C; tab-width: 4 -*- 247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * 347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * Copyright (c) 1997-2004 Apple Computer, Inc. All rights reserved. 447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * 547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * Licensed under the Apache License, Version 2.0 (the "License"); 647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * you may not use this file except in compliance with the License. 747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * You may obtain a copy of the License at 847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * 947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * http://www.apache.org/licenses/LICENSE-2.0 1047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * 1147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * Unless required by applicable law or agreed to in writing, software 1247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * distributed under the License is distributed on an "AS IS" BASIS, 1347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * See the License for the specific language governing permissions and 1547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt * limitations under the License. 1647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 1747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt To Do: 1847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 1947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt - Use StackWalk on Windows to optionally print stack frames. 2047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt*/ 2147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 2247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if 0 2347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#pragma mark == Includes == 2447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 2547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 2647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 2747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Includes 2847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 2947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 3047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( !KERNEL ) 3147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #include <ctype.h> 3247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #include <stdio.h> 3347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #include <string.h> 3447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 3547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 3647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#include "CommonServices.h" 3747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 3847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#include "DebugServices.h" 3947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 4047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( DEBUG ) 4147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 4247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_OS_VXWORKS ) 4347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #include "intLib.h" 4447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 4547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 4647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_OS_WIN32 ) 4747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #include <time.h> 4847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 4947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #if( !TARGET_OS_WINDOWS_CE ) 5047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #include <fcntl.h> 5147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #include <io.h> 5247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #endif 5347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 5447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 5547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( DEBUG_IDEBUG_ENABLED && TARGET_API_MAC_OSX_KERNEL ) 5647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #include <IOKit/IOLib.h> 5747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 5847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 5947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// If MDNS_DEBUGMSGS is defined (even if defined 0), it is aware of mDNS and it is probably safe to include mDNSEmbeddedAPI.h. 6047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 6147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( defined( MDNS_DEBUGMSGS ) ) 6247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #include "mDNSEmbeddedAPI.h" 6347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 6447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 6547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if 0 6647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#pragma mark == Macros == 6747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 6847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 6947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 7047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Macros 7147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 7247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 7347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#define DebugIsPrint( C ) ( ( ( C ) >= 0x20 ) && ( ( C ) <= 0x7E ) ) 7447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 7547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if 0 7647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#pragma mark == Prototypes == 7747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 7847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 7947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 8047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Prototypes 8147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 8247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 8347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltstatic OSStatus DebugPrint( DebugLevel inLevel, char *inData, size_t inSize ); 8447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 8547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// fprintf 8647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 8747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( DEBUG_FPRINTF_ENABLED ) 8847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt static OSStatus DebugFPrintFInit( DebugOutputTypeFlags inFlags, const char *inFilename ); 8947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt static void DebugFPrintFPrint( char *inData, size_t inSize ); 9047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 9147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 9247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// iDebug (Mac OS X user and kernel) 9347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 9447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( DEBUG_IDEBUG_ENABLED ) 9547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt static OSStatus DebugiDebugInit( void ); 9647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt static void DebugiDebugPrint( char *inData, size_t inSize ); 9747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 9847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 9947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// kprintf (Mac OS X Kernel) 10047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 10147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( DEBUG_KPRINTF_ENABLED ) 10247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt static void DebugKPrintFPrint( char *inData, size_t inSize ); 10347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 10447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 10547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Mac OS X IOLog (Mac OS X Kernel) 10647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 10747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( DEBUG_MAC_OS_X_IOLOG_ENABLED ) 10847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt static void DebugMacOSXIOLogPrint( char *inData, size_t inSize ); 10947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 11047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 11147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Mac OS X Log 11247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 11347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_OS_MAC ) 11447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt static OSStatus DebugMacOSXLogInit( void ); 11547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt static void DebugMacOSXLogPrint( char *inData, size_t inSize ); 11647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 11747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 11847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Windows Debugger 11947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 12047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_OS_WIN32 ) 12147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt static void DebugWindowsDebuggerPrint( char *inData, size_t inSize ); 12247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 12347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 12447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Windows Event Log 12547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 12647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE ) 12747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt static OSStatus DebugWindowsEventLogInit( const char *inName, HMODULE inModule ); 12847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt static void DebugWindowsEventLogPrint( DebugLevel inLevel, char *inData, size_t inSize ); 12947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 13047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 13147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// DebugLib support 13247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 13347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( DEBUG_CORE_SERVICE_ASSERTS_ENABLED ) 13447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt static pascal void 13547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugAssertOutputHandler( 13647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt OSType inComponentSignature, 13747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt UInt32 inOptions, 13847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const char * inAssertionString, 13947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const char * inExceptionString, 14047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const char * inErrorString, 14147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const char * inFileName, 14247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt long inLineNumber, 14347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt void * inValue, 14447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ConstStr255Param inOutputMsg ); 14547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 14647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 14747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Utilities 14847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 14947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltstatic char * DebugNumVersionToString( uint32_t inVersion, char *inString ); 15047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 15147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE ) 15247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt static void DebugWinEnableConsole( void ); 15347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 15447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 15547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_OS_WIN32 ) 15647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt static TCHAR * 15747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugWinCharToTCharString( 15847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const char * inCharString, 15947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt size_t inCharCount, 16047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt TCHAR * outTCharString, 16147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt size_t inTCharCountMax, 16247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt size_t * outTCharCount ); 16347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 16447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 16547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if 0 16647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#pragma mark == Globals == 16747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 16847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 16947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 17047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Private Globals 17147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 17247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 17347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_OS_VXWORKS ) 17447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // TCP States for inetstatShow. 17547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 17647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt extern char ** pTcpstates; // defined in tcpLib.c 17747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 17847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const char * kDebugTCPStates[] = 17947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 18047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "(0) TCPS_CLOSED", 18147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "(1) TCPS_LISTEN", 18247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "(2) TCPS_SYN_SENT", 18347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "(3) TCPS_SYN_RECEIVED", 18447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "(4) TCPS_ESTABLISHED", 18547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "(5) TCPS_CLOSE_WAIT", 18647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "(6) TCPS_FIN_WAIT_1", 18747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "(7) TCPS_CLOSING", 18847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "(8) TCPS_LAST_ACK", 18947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "(9) TCPS_FIN_WAIT_2", 19047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "(10) TCPS_TIME_WAIT", 19147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt }; 19247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 19347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 19447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// General 19547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 19647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltstatic bool gDebugInitialized = false; 19747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltstatic DebugOutputType gDebugOutputType = kDebugOutputTypeNone; 19847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltstatic DebugLevel gDebugPrintLevelMin = kDebugLevelInfo; 19947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltstatic DebugLevel gDebugPrintLevelMax = kDebugLevelMax; 20047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltstatic DebugLevel gDebugBreakLevel = kDebugLevelAssert; 20147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( DEBUG_CORE_SERVICE_ASSERTS_ENABLED ) 20247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt static DebugAssertOutputHandlerUPP gDebugAssertOutputHandlerUPP = NULL; 20347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 20447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 20547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Custom 20647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 20747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltstatic DebugOutputFunctionPtr gDebugCustomOutputFunction = NULL; 20847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltstatic void * gDebugCustomOutputContext = NULL; 20947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 21047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// fprintf 21147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 21247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( DEBUG_FPRINTF_ENABLED ) 21347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt static FILE * gDebugFPrintFFile = NULL; 21447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 21547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 21647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// MacOSXLog 21747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 21847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_OS_MAC ) 21947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt typedef int ( *DebugMacOSXLogFunctionPtr )( const char *inFormat, ... ); 22047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 22147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt static DebugMacOSXLogFunctionPtr gDebugMacOSXLogFunction = NULL; 22247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 22347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 22447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// WindowsEventLog 22547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 22647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 22747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE ) 22847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt static HANDLE gDebugWindowsEventLogEventSource = NULL; 22947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 23047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 23147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if 0 23247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#pragma mark - 23347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#pragma mark == General == 23447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 23547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 23647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 23747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// DebugInitialize 23847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 23947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 24047e4cebad7397422144bb03a21f3f7682c062c4aRobert GreenwaltDEBUG_EXPORT OSStatus DebugInitialize( DebugOutputType inType, ... ) 24147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 24247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt OSStatus err; 24347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugOutputType type; 24447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt va_list args; 24547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 24647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt va_start( args, inType ); 24747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 24847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_OS_VXWORKS ) 24947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Set up the TCP state strings if they are not already set up by VxWorks (normally not set up for some reason). 25047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 25147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( !pTcpstates ) 25247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 25347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt pTcpstates = (char **) kDebugTCPStates; 25447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 25547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 25647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 25747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Set up DebugLib stuff (if building with Debugging.h). 25847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 25947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( DEBUG_CORE_SERVICE_ASSERTS_ENABLED ) 26047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( !gDebugAssertOutputHandlerUPP ) 26147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 26247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt gDebugAssertOutputHandlerUPP = NewDebugAssertOutputHandlerUPP( DebugAssertOutputHandler ); 26347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt check( gDebugAssertOutputHandlerUPP ); 26447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( gDebugAssertOutputHandlerUPP ) 26547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 26647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt InstallDebugAssertOutputHandler( gDebugAssertOutputHandlerUPP ); 26747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 26847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 26947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 27047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 27147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Pre-process meta-output kind to pick an appropriate output kind for the platform. 27247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 27347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt type = inType; 27447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( type == kDebugOutputTypeMetaConsole ) 27547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 27647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #if( TARGET_OS_MAC ) 27747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt type = kDebugOutputTypeMacOSXLog; 27847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #elif( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE ) 27947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #if( DEBUG_FPRINTF_ENABLED ) 28047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt type = kDebugOutputTypeFPrintF; 28147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #else 28247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt type = kDebugOutputTypeWindowsDebugger; 28347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #endif 28447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #elif( TARGET_API_MAC_OSX_KERNEL ) 28547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #if( DEBUG_MAC_OS_X_IOLOG_ENABLED ) 28647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt type = kDebugOutputTypeMacOSXIOLog; 28747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #elif( DEBUG_IDEBUG_ENABLED ) 28847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt type = kDebugOutputTypeiDebug; 28947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #elif( DEBUG_KPRINTF_ENABLED ) 29047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt type = kDebugOutputTypeKPrintF; 29147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #endif 29247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #elif( TARGET_OS_VXWORKS ) 29347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #if( DEBUG_FPRINTF_ENABLED ) 29447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt type = kDebugOutputTypeFPrintF; 29547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #else 29647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #error target is VxWorks, but fprintf output is disabled 29747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #endif 29847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #else 29947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #if( DEBUG_FPRINTF_ENABLED ) 30047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt type = kDebugOutputTypeFPrintF; 30147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #endif 30247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #endif 30347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 30447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 30547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Process output kind. 30647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 30747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt gDebugOutputType = type; 30847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt switch( type ) 30947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 31047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case kDebugOutputTypeNone: 31147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = kNoErr; 31247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 31347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 31447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case kDebugOutputTypeCustom: 31547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt gDebugCustomOutputFunction = va_arg( args, DebugOutputFunctionPtr ); 31647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt gDebugCustomOutputContext = va_arg( args, void * ); 31747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = kNoErr; 31847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 31947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 32047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( DEBUG_FPRINTF_ENABLED ) 32147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case kDebugOutputTypeFPrintF: 32247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( inType == kDebugOutputTypeMetaConsole ) 32347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 32447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = DebugFPrintFInit( kDebugOutputTypeFlagsStdErr, NULL ); 32547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 32647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else 32747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 32847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugOutputTypeFlags flags; 32947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const char * filename; 33047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 33147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt flags = (DebugOutputTypeFlags) va_arg( args, unsigned int ); 33247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( ( flags & kDebugOutputTypeFlagsTypeMask ) == kDebugOutputTypeFlagsFile ) 33347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 33447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt filename = va_arg( args, const char * ); 33547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 33647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else 33747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 33847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt filename = NULL; 33947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 34047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = DebugFPrintFInit( flags, filename ); 34147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 34247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 34347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 34447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 34547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( DEBUG_IDEBUG_ENABLED ) 34647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case kDebugOutputTypeiDebug: 34747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = DebugiDebugInit(); 34847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 34947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 35047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 35147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( DEBUG_KPRINTF_ENABLED ) 35247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case kDebugOutputTypeKPrintF: 35347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = kNoErr; 35447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 35547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 35647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 35747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( DEBUG_MAC_OS_X_IOLOG_ENABLED ) 35847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case kDebugOutputTypeMacOSXIOLog: 35947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = kNoErr; 36047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 36147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 36247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 36347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_OS_MAC ) 36447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case kDebugOutputTypeMacOSXLog: 36547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = DebugMacOSXLogInit(); 36647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 36747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 36847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 36947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_OS_WIN32 ) 37047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case kDebugOutputTypeWindowsDebugger: 37147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = kNoErr; 37247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 37347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 37447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 37547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE ) 37647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case kDebugOutputTypeWindowsEventLog: 37747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 37847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const char * name; 37947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt HMODULE module; 38047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 38147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt name = va_arg( args, const char * ); 38247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt module = va_arg( args, HMODULE ); 38347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = DebugWindowsEventLogInit( name, module ); 38447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 38547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 38647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 38747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 38847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt default: 38947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = kParamErr; 39047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt goto exit; 39147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 39247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt gDebugInitialized = true; 39347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 39447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltexit: 39547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt va_end( args ); 39647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt return( err ); 39747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} 39847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 39947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 40047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// DebugFinalize 40147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 40247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 40347e4cebad7397422144bb03a21f3f7682c062c4aRobert GreenwaltDEBUG_EXPORT void DebugFinalize( void ) 40447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 40547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( DEBUG_CORE_SERVICE_ASSERTS_ENABLED ) 40647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt check( gDebugAssertOutputHandlerUPP ); 40747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( gDebugAssertOutputHandlerUPP ) 40847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 40947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt InstallDebugAssertOutputHandler( NULL ); 41047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DisposeDebugAssertOutputHandlerUPP( gDebugAssertOutputHandlerUPP ); 41147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt gDebugAssertOutputHandlerUPP = NULL; 41247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 41347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 41447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} 41547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 41647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 41747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// DebugGetProperty 41847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 41947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 42047e4cebad7397422144bb03a21f3f7682c062c4aRobert GreenwaltDEBUG_EXPORT OSStatus DebugGetProperty( DebugPropertyTag inTag, ... ) 42147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 42247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt OSStatus err; 42347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt va_list args; 42447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugLevel * level; 42547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 42647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt va_start( args, inTag ); 42747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt switch( inTag ) 42847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 42947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case kDebugPropertyTagPrintLevelMin: 43047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt level = va_arg( args, DebugLevel * ); 43147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *level = gDebugPrintLevelMin; 43247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = kNoErr; 43347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 43447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 43547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case kDebugPropertyTagPrintLevelMax: 43647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt level = va_arg( args, DebugLevel * ); 43747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *level = gDebugPrintLevelMax; 43847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = kNoErr; 43947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 44047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 44147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case kDebugPropertyTagBreakLevel: 44247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt level = va_arg( args, DebugLevel * ); 44347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *level = gDebugBreakLevel; 44447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = kNoErr; 44547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 44647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 44747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt default: 44847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = kUnsupportedErr; 44947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 45047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 45147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt va_end( args ); 45247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt return( err ); 45347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} 45447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 45547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 45647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// DebugSetProperty 45747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 45847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 45947e4cebad7397422144bb03a21f3f7682c062c4aRobert GreenwaltDEBUG_EXPORT OSStatus DebugSetProperty( DebugPropertyTag inTag, ... ) 46047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 46147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt OSStatus err; 46247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt va_list args; 46347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugLevel level; 46447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 46547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt va_start( args, inTag ); 46647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt switch( inTag ) 46747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 46847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case kDebugPropertyTagPrintLevelMin: 46947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt level = va_arg( args, DebugLevel ); 47047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt gDebugPrintLevelMin = level; 47147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = kNoErr; 47247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 47347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 47447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case kDebugPropertyTagPrintLevelMax: 47547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt level = va_arg( args, DebugLevel ); 47647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt gDebugPrintLevelMax = level; 47747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = kNoErr; 47847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 47947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 48047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case kDebugPropertyTagBreakLevel: 48147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt level = va_arg( args, DebugLevel ); 48247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt gDebugBreakLevel = level; 48347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = kNoErr; 48447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 48547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 48647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt default: 48747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = kUnsupportedErr; 48847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 48947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 49047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt va_end( args ); 49147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt return( err ); 49247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} 49347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 49447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if 0 49547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#pragma mark - 49647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#pragma mark == Output == 49747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 49847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 49947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 50047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// DebugPrintF 50147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 50247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 50347e4cebad7397422144bb03a21f3f7682c062c4aRobert GreenwaltDEBUG_EXPORT size_t DebugPrintF( DebugLevel inLevel, const char *inFormat, ... ) 50447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 50547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt va_list args; 50647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt size_t n; 50747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 50847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Skip if the level is not in the enabled range.. 50947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 51047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( ( inLevel < gDebugPrintLevelMin ) || ( inLevel > gDebugPrintLevelMax ) ) 51147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 51247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt n = 0; 51347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt goto exit; 51447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 51547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 51647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt va_start( args, inFormat ); 51747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt n = DebugPrintFVAList( inLevel, inFormat, args ); 51847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt va_end( args ); 51947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 52047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltexit: 52147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt return( n ); 52247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} 52347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 52447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 52547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// DebugPrintFVAList 52647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 52747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 52847e4cebad7397422144bb03a21f3f7682c062c4aRobert GreenwaltDEBUG_EXPORT size_t DebugPrintFVAList( DebugLevel inLevel, const char *inFormat, va_list inArgs ) 52947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 53047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt size_t n; 53147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char buffer[ 512 ]; 53247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 53347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Skip if the level is not in the enabled range.. 53447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 53547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( ( inLevel < gDebugPrintLevelMin ) || ( inLevel > gDebugPrintLevelMax ) ) 53647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 53747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt n = 0; 53847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt goto exit; 53947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 54047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 54147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt n = DebugSNPrintFVAList( buffer, sizeof( buffer ), inFormat, inArgs ); 54247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugPrint( inLevel, buffer, (size_t) n ); 54347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 54447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltexit: 54547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt return( n ); 54647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} 54747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 54847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 54947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// DebugPrint 55047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 55147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 55247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltstatic OSStatus DebugPrint( DebugLevel inLevel, char *inData, size_t inSize ) 55347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 55447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt OSStatus err; 55547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 55647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Skip if the level is not in the enabled range.. 55747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 55847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( ( inLevel < gDebugPrintLevelMin ) || ( inLevel > gDebugPrintLevelMax ) ) 55947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 56047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = kRangeErr; 56147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt goto exit; 56247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 56347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 56447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Printing is not safe at interrupt time so check for this and warn with an interrupt safe mechanism (if available). 56547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 56647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( DebugTaskLevel() & kDebugInterruptLevelMask ) 56747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 56847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #if( TARGET_OS_VXWORKS ) 56947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt logMsg( "\ncannot print at interrupt time\n\n", 1, 2, 3, 4, 5, 6 ); 57047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #endif 57147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 57247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = kExecutionStateErr; 57347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt goto exit; 57447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 57547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 57647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Initialize the debugging library if it hasn't already been initialized (allows for zero-config usage). 57747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 57847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( !gDebugInitialized ) 57947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 58047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt debug_initialize( kDebugOutputTypeMetaConsole ); 58147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 58247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 58347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Print based on the current output type. 58447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 58547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt switch( gDebugOutputType ) 58647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 58747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case kDebugOutputTypeNone: 58847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 58947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 59047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case kDebugOutputTypeCustom: 59147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( gDebugCustomOutputFunction ) 59247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 59347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt gDebugCustomOutputFunction( inData, inSize, gDebugCustomOutputContext ); 59447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 59547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 59647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 59747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( DEBUG_FPRINTF_ENABLED ) 59847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case kDebugOutputTypeFPrintF: 59947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugFPrintFPrint( inData, inSize ); 60047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 60147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 60247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 60347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( DEBUG_IDEBUG_ENABLED ) 60447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case kDebugOutputTypeiDebug: 60547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugiDebugPrint( inData, inSize ); 60647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 60747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 60847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 60947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( DEBUG_KPRINTF_ENABLED ) 61047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case kDebugOutputTypeKPrintF: 61147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugKPrintFPrint( inData, inSize ); 61247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 61347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 61447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 61547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( DEBUG_MAC_OS_X_IOLOG_ENABLED ) 61647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case kDebugOutputTypeMacOSXIOLog: 61747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugMacOSXIOLogPrint( inData, inSize ); 61847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 61947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 62047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 62147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_OS_MAC ) 62247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case kDebugOutputTypeMacOSXLog: 62347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugMacOSXLogPrint( inData, inSize ); 62447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 62547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 62647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 62747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_OS_WIN32 ) 62847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case kDebugOutputTypeWindowsDebugger: 62947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugWindowsDebuggerPrint( inData, inSize ); 63047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 63147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 63247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 63347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE ) 63447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case kDebugOutputTypeWindowsEventLog: 63547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugWindowsEventLogPrint( inLevel, inData, inSize ); 63647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 63747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 63847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 63947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt default: 64047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 64147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 64247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = kNoErr; 64347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 64447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltexit: 64547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt return( err ); 64647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} 64747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 64847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 64947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// DebugPrintAssert 65047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// 65147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Warning: This routine relies on several of the strings being string constants that will exist forever because the 65247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// underlying logMsg API that does the printing is asynchronous so it cannot use temporary/stack-based 65347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// pointer variables (e.g. local strings). The debug macros that invoke this function only use constant 65447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// constant strings, but if this function is invoked directly from other places, it must use constant strings. 65547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 65647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 65747e4cebad7397422144bb03a21f3f7682c062c4aRobert GreenwaltDEBUG_EXPORT void 65847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugPrintAssert( 65947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt int_least32_t inErrorCode, 66047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const char * inAssertString, 66147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const char * inMessage, 66247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const char * inFilename, 66347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt int_least32_t inLineNumber, 66447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const char * inFunction ) 66547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 66647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Skip if the level is not in the enabled range.. 66747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 66847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( ( kDebugLevelAssert < gDebugPrintLevelMin ) || ( kDebugLevelAssert > gDebugPrintLevelMax ) ) 66947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 67047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt return; 67147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 67247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 67347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( inErrorCode != 0 ) 67447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 67547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugPrintF( 67647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt kDebugLevelAssert, 67747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "\n" 67847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "[ASSERT] error: %ld (%m)\n" 67947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "[ASSERT] where: \"%s\", line %ld, \"%s\"\n" 68047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "\n", 68147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt inErrorCode, inErrorCode, 68247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt inFilename ? inFilename : "", 68347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt inLineNumber, 68447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt inFunction ? inFunction : "" ); 68547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 68647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else 68747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 68847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugPrintF( 68947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt kDebugLevelAssert, 69047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "\n" 69147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "[ASSERT] assert: \"%s\" %s\n" 69247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "[ASSERT] where: \"%s\", line %ld, \"%s\"\n" 69347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "\n", 69447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt inAssertString ? inAssertString : "", 69547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt inMessage ? inMessage : "", 69647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt inFilename ? inFilename : "", 69747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt inLineNumber, 69847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt inFunction ? inFunction : "" ); 69947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 70047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 70147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Break into the debugger if enabled. 70247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 70347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #if( TARGET_OS_WIN32 ) 70447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( gDebugBreakLevel <= kDebugLevelAssert ) 70547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 70647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( IsDebuggerPresent() ) 70747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 70847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugBreak(); 70947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 71047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 71147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #endif 71247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} 71347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 71447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if 0 71547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#pragma mark - 71647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 71747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 71847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( DEBUG_FPRINTF_ENABLED ) 71947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 72047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// DebugFPrintFInit 72147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 72247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 72347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltstatic OSStatus DebugFPrintFInit( DebugOutputTypeFlags inFlags, const char *inFilename ) 72447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 72547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt OSStatus err; 72647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugOutputTypeFlags typeFlags; 72747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 72847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt typeFlags = inFlags & kDebugOutputTypeFlagsTypeMask; 72947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( typeFlags == kDebugOutputTypeFlagsStdOut ) 73047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 73147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #if( TARGET_OS_WIN32 ) 73247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugWinEnableConsole(); 73347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #endif 73447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 73547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt gDebugFPrintFFile = stdout; 73647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 73747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else if( typeFlags == kDebugOutputTypeFlagsStdErr ) 73847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 73947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #if( TARGET_OS_WIN32 ) 74047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugWinEnableConsole(); 74147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #endif 74247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 74347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt gDebugFPrintFFile = stdout; 74447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 74547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else if( typeFlags == kDebugOutputTypeFlagsFile ) 74647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 74747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action_quiet( inFilename && ( *inFilename != '\0' ), exit, err = kOpenErr ); 74847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 74947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt gDebugFPrintFFile = fopen( inFilename, "a" ); 75047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action_quiet( gDebugFPrintFFile, exit, err = kOpenErr ); 75147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 75247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else 75347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 75447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = kParamErr; 75547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt goto exit; 75647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 75747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = kNoErr; 75847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 75947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltexit: 76047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt return( err ); 76147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} 76247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 76347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 76447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// DebugFPrintFPrint 76547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 76647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 76747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltstatic void DebugFPrintFPrint( char *inData, size_t inSize ) 76847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 76947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char * p; 77047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char * q; 77147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 77247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Convert \r to \n. fprintf will interpret \n and convert to whatever is appropriate for the platform. 77347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 77447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt p = inData; 77547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt q = p + inSize; 77647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt while( p < q ) 77747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 77847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( *p == '\r' ) 77947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 78047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *p = '\n'; 78147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 78247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ++p; 78347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 78447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 78547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Write the data and flush. 78647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 78747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( gDebugFPrintFFile ) 78847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 78947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt fprintf( gDebugFPrintFFile, "%.*s", (int) inSize, inData ); 79047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt fflush( gDebugFPrintFFile ); 79147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 79247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} 79347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif // DEBUG_FPRINTF_ENABLED 79447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 79547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( DEBUG_IDEBUG_ENABLED ) 79647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 79747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// DebugiDebugInit 79847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 79947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 80047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltstatic OSStatus DebugiDebugInit( void ) 80147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 80247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt OSStatus err; 80347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 80447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #if( TARGET_API_MAC_OSX_KERNEL ) 80547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 80647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt extern uint32_t * _giDebugReserved1; 80747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 80847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Emulate the iDebugSetOutputType macro in iDebugServices.h. 80947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Note: This is not thread safe, but neither is iDebugServices.h nor iDebugKext. 81047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 81147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( !_giDebugReserved1 ) 81247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 81347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt _giDebugReserved1 = (uint32_t *) IOMalloc( sizeof( uint32_t ) ); 81447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action_quiet( _giDebugReserved1, exit, err = kNoMemoryErr ); 81547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 81647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *_giDebugReserved1 = 0x00010000U; 81747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = kNoErr; 81847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltexit: 81947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #else 82047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 82147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt __private_extern__ void iDebugSetOutputTypeInternal( uint32_t inType ); 82247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 82347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt iDebugSetOutputTypeInternal( 0x00010000U ); 82447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = kNoErr; 82547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 82647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #endif 82747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 82847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt return( err ); 82947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} 83047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 83147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 83247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// DebugiDebugPrint 83347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 83447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 83547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltstatic void DebugiDebugPrint( char *inData, size_t inSize ) 83647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 83747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #if( TARGET_API_MAC_OSX_KERNEL ) 83847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 83947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Locally declared here so we do not need to include iDebugKext.h. 84047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Note: IOKit uses a global namespace for all code and only a partial link occurs at build time. When the 84147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // KEXT is loaded, the runtime linker will link in this extern'd symbol (assuming iDebug is present). 84247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // _giDebugLogInternal is actually part of IOKit proper so this should link even if iDebug is not present. 84347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 84447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt typedef void ( *iDebugLogFunctionPtr )( uint32_t inLevel, uint32_t inTag, const char *inFormat, ... ); 84547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 84647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt extern iDebugLogFunctionPtr _giDebugLogInternal; 84747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 84847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( _giDebugLogInternal ) 84947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 85047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt _giDebugLogInternal( 0, 0, "%.*s", (int) inSize, inData ); 85147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 85247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 85347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #else 85447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 85547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt __private_extern__ void iDebugLogInternal( uint32_t inLevel, uint32_t inTag, const char *inFormat, ... ); 85647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 85747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt iDebugLogInternal( 0, 0, "%.*s", (int) inSize, inData ); 85847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 85947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #endif 86047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} 86147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 86247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 86347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( DEBUG_KPRINTF_ENABLED ) 86447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 86547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// DebugKPrintFPrint 86647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 86747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 86847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltstatic void DebugKPrintFPrint( char *inData, size_t inSize ) 86947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 87047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt extern void kprintf( const char *inFormat, ... ); 87147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 87247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt kprintf( "%.*s", (int) inSize, inData ); 87347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} 87447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 87547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 87647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( DEBUG_MAC_OS_X_IOLOG_ENABLED ) 87747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 87847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// DebugMacOSXIOLogPrint 87947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 88047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 88147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltstatic void DebugMacOSXIOLogPrint( char *inData, size_t inSize ) 88247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 88347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt extern void IOLog( const char *inFormat, ... ); 88447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 88547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt IOLog( "%.*s", (int) inSize, inData ); 88647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} 88747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 88847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 88947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_OS_MAC ) 89047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 89147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// DebugMacOSXLogInit 89247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 89347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 89447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltstatic OSStatus DebugMacOSXLogInit( void ) 89547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 89647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt OSStatus err; 89747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CFStringRef path; 89847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CFURLRef url; 89947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CFBundleRef bundle; 90047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CFStringRef functionName; 90147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt void * functionPtr; 90247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 90347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt bundle = NULL; 90447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 90547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Create a bundle reference for System.framework. 90647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 90747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt path = CFSTR( "/System/Library/Frameworks/System.framework" ); 90847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt url = CFURLCreateWithFileSystemPath( NULL, path, kCFURLPOSIXPathStyle, true ); 90947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action_quiet( url, exit, err = memFullErr ); 91047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 91147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt bundle = CFBundleCreate( NULL, url ); 91247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CFRelease( url ); 91347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action_quiet( bundle, exit, err = memFullErr ); 91447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 91547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Get a ptr to the system's "printf" function from System.framework. 91647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 91747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt functionName = CFSTR( "printf" ); 91847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt functionPtr = CFBundleGetFunctionPointerForName( bundle, functionName ); 91947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action_quiet( functionPtr, exit, err = memFullErr ); 92047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 92147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Success! Note: The bundle cannot be released because it would invalidate the function ptr. 92247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 92347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt gDebugMacOSXLogFunction = (DebugMacOSXLogFunctionPtr) functionPtr; 92447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt bundle = NULL; 92547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = noErr; 92647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 92747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltexit: 92847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( bundle ) 92947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 93047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CFRelease( bundle ); 93147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 93247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt return( err ); 93347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} 93447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 93547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 93647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// DebugMacOSXLogPrint 93747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 93847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 93947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltstatic void DebugMacOSXLogPrint( char *inData, size_t inSize ) 94047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 94147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( gDebugMacOSXLogFunction ) 94247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 94347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt gDebugMacOSXLogFunction( "%.*s", (int) inSize, inData ); 94447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 94547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} 94647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 94747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 94847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_OS_WIN32 ) 94947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 95047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// DebugWindowsDebuggerPrint 95147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 95247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 95347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltvoid DebugWindowsDebuggerPrint( char *inData, size_t inSize ) 95447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 95547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt TCHAR buffer[ 512 ]; 95647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const char * src; 95747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const char * end; 95847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt TCHAR * dst; 95947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char c; 96047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 96147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Copy locally and null terminate the string. This also converts from char to TCHAR in case we are 96247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // building with UNICODE enabled since the input is always char. Also convert \r to \n in the process. 96347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 96447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt src = inData; 96547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( inSize >= sizeof_array( buffer ) ) 96647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 96747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt inSize = sizeof_array( buffer ) - 1; 96847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 96947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt end = src + inSize; 97047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt dst = buffer; 97147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt while( src < end ) 97247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 97347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt c = *src++; 97447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( c == '\r' ) 97547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 97647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt c = '\n'; 97747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 97847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *dst++ = (TCHAR) c; 97947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 98047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *dst = 0; 98147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 98247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Print out the string to the debugger. 98347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 98447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt OutputDebugString( buffer ); 98547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} 98647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 98747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 98847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE ) 98947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 99047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// DebugWindowsEventLogInit 99147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 99247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 99347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltstatic OSStatus DebugWindowsEventLogInit( const char *inName, HMODULE inModule ) 99447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 99547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt OSStatus err; 99647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt HKEY key; 99747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt TCHAR name[ 128 ]; 99847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const char * src; 99947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt TCHAR path[ MAX_PATH ]; 100047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt size_t size; 100147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DWORD typesSupported; 100247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DWORD n; 100347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 100447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt key = NULL; 100547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 100647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Use a default name if needed then convert the name to TCHARs so it works on ANSI or Unicode builds. 100747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 100847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( !inName || ( *inName == '\0' ) ) 100947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 101047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt inName = "DefaultApp"; 101147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 101247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugWinCharToTCharString( inName, kSizeCString, name, sizeof( name ), NULL ); 101347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 101447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Build the path string using the fixed registry path and app name. 101547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 101647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt src = "SYSTEM\\CurrentControlSet\\Services\\EventLog\\Application\\"; 101747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugWinCharToTCharString( src, kSizeCString, path, sizeof_array( path ), &size ); 101847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugWinCharToTCharString( inName, kSizeCString, path + size, sizeof_array( path ) - size, NULL ); 101947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 102047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Add/Open the source name as a sub-key under the Application key in the EventLog registry key. 102147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 102247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = RegCreateKeyEx( HKEY_LOCAL_MACHINE, path, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &key, NULL ); 102347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_noerr_quiet( err, exit ); 102447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 102547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Set the path in the EventMessageFile subkey. Add 1 to the TCHAR count to include the null terminator. 102647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 102747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt n = GetModuleFileName( inModule, path, sizeof_array( path ) ); 102847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = translate_errno( n > 0, (OSStatus) GetLastError(), kParamErr ); 102947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_noerr_quiet( err, exit ); 103047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt n += 1; 103147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt n *= sizeof( TCHAR ); 103247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 103347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = RegSetValueEx( key, TEXT( "EventMessageFile" ), 0, REG_EXPAND_SZ, (const LPBYTE) path, n ); 103447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_noerr_quiet( err, exit ); 103547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 103647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Set the supported event types in the TypesSupported subkey. 103747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 103847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt typesSupported = EVENTLOG_SUCCESS | EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE | EVENTLOG_INFORMATION_TYPE | 103947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt EVENTLOG_AUDIT_SUCCESS | EVENTLOG_AUDIT_FAILURE; 104047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = RegSetValueEx( key, TEXT( "TypesSupported" ), 0, REG_DWORD, (const LPBYTE) &typesSupported, sizeof( DWORD ) ); 104147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_noerr_quiet( err, exit ); 104247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 104347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Set up the event source. 104447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 104547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt gDebugWindowsEventLogEventSource = RegisterEventSource( NULL, name ); 104647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = translate_errno( gDebugWindowsEventLogEventSource, (OSStatus) GetLastError(), kParamErr ); 104747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_noerr_quiet( err, exit ); 104847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 104947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltexit: 105047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( key ) 105147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 105247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt RegCloseKey( key ); 105347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 105447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt return( err ); 105547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} 105647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 105747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 105847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// DebugWindowsEventLogPrint 105947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 106047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 106147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltstatic void DebugWindowsEventLogPrint( DebugLevel inLevel, char *inData, size_t inSize ) 106247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 106347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt WORD type; 106447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt TCHAR buffer[ 512 ]; 106547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const char * src; 106647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const char * end; 106747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt TCHAR * dst; 106847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char c; 106947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const TCHAR * array[ 1 ]; 107047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 107147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Map the debug level to a Windows EventLog type. 107247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 107347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( inLevel <= kDebugLevelNotice ) 107447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 107547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt type = EVENTLOG_INFORMATION_TYPE; 107647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 107747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else if( inLevel <= kDebugLevelWarning ) 107847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 107947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt type = EVENTLOG_WARNING_TYPE; 108047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 108147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else 108247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 108347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt type = EVENTLOG_ERROR_TYPE; 108447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 108547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 108647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Copy locally and null terminate the string. This also converts from char to TCHAR in case we are 108747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // building with UNICODE enabled since the input is always char. Also convert \r to \n in the process. 108847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 108947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt src = inData; 109047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( inSize >= sizeof_array( buffer ) ) 109147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 109247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt inSize = sizeof_array( buffer ) - 1; 109347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 109447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt end = src + inSize; 109547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt dst = buffer; 109647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt while( src < end ) 109747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 109847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt c = *src++; 109947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( c == '\r' ) 110047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 110147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt c = '\n'; 110247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 110347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *dst++ = (TCHAR) c; 110447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 110547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *dst = 0; 110647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 110747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Add the the string to the event log. 110847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 110947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt array[ 0 ] = buffer; 111047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( gDebugWindowsEventLogEventSource ) 111147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 111247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ReportEvent( gDebugWindowsEventLogEventSource, type, 0, 0x20000001L, NULL, 1, 0, array, NULL ); 111347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 111447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} 111547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif // TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE 111647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 111747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( DEBUG_CORE_SERVICE_ASSERTS_ENABLED ) 111847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 111947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// DebugAssertOutputHandler 112047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 112147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 112247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltstatic pascal void 112347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugAssertOutputHandler( 112447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt OSType inComponentSignature, 112547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt UInt32 inOptions, 112647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const char * inAssertString, 112747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const char * inExceptionString, 112847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const char * inErrorString, 112947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const char * inFileName, 113047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt long inLineNumber, 113147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt void * inValue, 113247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ConstStr255Param inOutputMsg ) 113347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 113447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DEBUG_UNUSED( inComponentSignature ); 113547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DEBUG_UNUSED( inOptions ); 113647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DEBUG_UNUSED( inExceptionString ); 113747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DEBUG_UNUSED( inValue ); 113847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DEBUG_UNUSED( inOutputMsg ); 113947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 114047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugPrintAssert( 0, inAssertString, inErrorString, inFileName, (int_least32_t) inLineNumber, "" ); 114147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} 114247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 114347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 114447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if 0 114547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#pragma mark - 114647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#pragma mark == Utilities == 114747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 114847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 114947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 115047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// DebugSNPrintF 115147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// 115247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Stolen from mDNS.c's mDNS_snprintf/mDNS_vsnprintf with the following changes: 115347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// 115447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Changed names to avoid name collisions with the mDNS versions. 115547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Changed types to standard C types since mDNSEmbeddedAPI.h may not be available. 115647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Conditionalized mDNS stuff so it can be used with or with mDNSEmbeddedAPI.h. 115747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Added 64-bit support for %d (%lld), %i (%lli), %u (%llu), %o (%llo), %x (%llx), and %b (%llb). 115847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Added %@ - Cocoa/CoreFoundation object. Param is the object. Strings are used directly. Others use CFCopyDescription. 115947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Added %.8a - FIbre Channel address. Arg=ptr to address. 116047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Added %##a - IPv4 (if AF_INET defined) or IPv6 (if AF_INET6 defined) sockaddr. Arg=ptr to sockaddr. 116147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Added %b - Binary representation of integer (e.g. 01101011). Modifiers and arg=the same as %d, %x, etc. 116247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Added %C - Mac-style FourCharCode (e.g. 'APPL'). Arg=32-bit value to print as a Mac-style FourCharCode. 116347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Added %H - Hex Dump (e.g. "\x6b\xa7" -> "6B A7"). 1st arg=ptr, 2nd arg=size, 3rd arg=max size. 116447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Added %#H - Hex Dump & ASCII (e.g. "\x41\x62" -> "6B A7 'Ab'"). 1st arg=ptr, 2nd arg=size, 3rd arg=max size. 116547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Added %m - Error Message (e.g. 0 -> "kNoErr"). Modifiers and error code args are the same as %d, %x, etc. 116647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Added %S - UTF-16 string. Host order if no BOM. Precision is UTF-16 char count. BOM counts in any precision. Arg=ptr. 116747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Added %#S - Big Endian UTF-16 string (unless BOM overrides). Otherwise the same as %S. 116847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Added %##S - Little Endian UTF-16 string (unless BOM overrides). Otherwise the same as %S. 116947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// Added %U - Universally Unique Identifier (UUID) (e.g. 6ba7b810-9dad-11d1-80b4-00c04fd430c8). Arg=ptr to 16-byte UUID. 117047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 117147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 117247e4cebad7397422144bb03a21f3f7682c062c4aRobert GreenwaltDEBUG_EXPORT size_t DebugSNPrintF(char *sbuffer, size_t buflen, const char *fmt, ...) 117347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 117447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt size_t length; 117547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 117647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt va_list ptr; 117747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt va_start(ptr,fmt); 117847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt length = DebugSNPrintFVAList(sbuffer, buflen, fmt, ptr); 117947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt va_end(ptr); 118047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 118147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt return(length); 118247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 118347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 118447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 118547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// DebugSNPrintFVAList - va_list version of DebugSNPrintF. See DebugSNPrintF for more info. 118647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 118747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 118847e4cebad7397422144bb03a21f3f7682c062c4aRobert GreenwaltDEBUG_EXPORT size_t DebugSNPrintFVAList(char *sbuffer, size_t buflen, const char *fmt, va_list arg) 118947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 119047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt static const struct DebugSNPrintF_format 119147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 119247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt unsigned leftJustify : 1; 119347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt unsigned forceSign : 1; 119447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt unsigned zeroPad : 1; 119547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt unsigned havePrecision : 1; 119647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt unsigned hSize : 1; 119747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char lSize; 119847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char altForm; 119947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char sign; // +, - or space 120047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt unsigned int fieldWidth; 120147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt unsigned int precision; 120247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } DebugSNPrintF_format_default = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; 120347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 120447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt size_t nwritten = 0; 120547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt int c; 120647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (buflen == 0) return(0); 120747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt buflen--; // Pre-reserve one space in the buffer for the terminating nul 120847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (buflen == 0) goto exit; 120947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 121047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt for (c = *fmt; c != 0; c = *++fmt) 121147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 121247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (c != '%') 121347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 121447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *sbuffer++ = (char)c; 121547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (++nwritten >= buflen) goto exit; 121647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 121747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else 121847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 121947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt size_t i=0, j; 122047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // The mDNS Vsprintf Argument Conversion Buffer is used as a temporary holding area for 122147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // generating decimal numbers, hexdecimal numbers, IP addresses, domain name strings, etc. 122247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // The size needs to be enough for a 256-byte domain name plus some error text. 122347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #define mDNS_VACB_Size 300 122447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char mDNS_VACB[mDNS_VACB_Size]; 122547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #define mDNS_VACB_Lim (&mDNS_VACB[mDNS_VACB_Size]) 122647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #define mDNS_VACB_Remain(s) ((size_t)(mDNS_VACB_Lim - s)) 122747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char *s = mDNS_VACB_Lim; 122847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const char *digits = "0123456789ABCDEF"; 122947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt struct DebugSNPrintF_format F = DebugSNPrintF_format_default; 123047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 123147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt for(;;) // decode flags 123247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 123347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt c = *++fmt; 123447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (c == '-') F.leftJustify = 1; 123547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else if (c == '+') F.forceSign = 1; 123647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else if (c == ' ') F.sign = ' '; 123747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else if (c == '#') F.altForm++; 123847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else if (c == '0') F.zeroPad = 1; 123947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else break; 124047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 124147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 124247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (c == '*') // decode field width 124347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 124447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt int f = va_arg(arg, int); 124547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (f < 0) { f = -f; F.leftJustify = 1; } 124647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt F.fieldWidth = (unsigned int)f; 124747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt c = *++fmt; 124847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 124947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else 125047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 125147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt for (; c >= '0' && c <= '9'; c = *++fmt) 125247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt F.fieldWidth = (10 * F.fieldWidth) + (c - '0'); 125347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 125447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 125547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (c == '.') // decode precision 125647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 125747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if ((c = *++fmt) == '*') 125847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { F.precision = va_arg(arg, unsigned int); c = *++fmt; } 125947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else for (; c >= '0' && c <= '9'; c = *++fmt) 126047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt F.precision = (10 * F.precision) + (c - '0'); 126147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt F.havePrecision = 1; 126247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 126347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 126447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (F.leftJustify) F.zeroPad = 0; 126547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 126647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt conv: 126747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt switch (c) // perform appropriate conversion 126847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 126947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #if TYPE_LONGLONG_NATIVE 127047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt unsigned_long_long_compat n; 127147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt unsigned_long_long_compat base; 127247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #else 127347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt unsigned long n; 127447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt unsigned long base; 127547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #endif 127647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case 'h' : F.hSize = 1; c = *++fmt; goto conv; 127747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case 'l' : // fall through 127847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case 'L' : F.lSize++; c = *++fmt; goto conv; 127947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case 'd' : 128047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case 'i' : base = 10; 128147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt goto canBeSigned; 128247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case 'u' : base = 10; 128347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt goto notSigned; 128447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case 'o' : base = 8; 128547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt goto notSigned; 128647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case 'b' : base = 2; 128747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt goto notSigned; 128847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case 'p' : n = va_arg(arg, uintptr_t); 128947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt F.havePrecision = 1; 129047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt F.precision = (sizeof(uintptr_t) == 4) ? 8 : 16; 129147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt F.sign = 0; 129247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt base = 16; 129347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt c = 'x'; 129447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt goto number; 129547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case 'x' : digits = "0123456789abcdef"; 129647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case 'X' : base = 16; 129747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt goto notSigned; 129847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt canBeSigned: 129947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #if TYPE_LONGLONG_NATIVE 130047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (F.lSize == 1) n = (unsigned_long_long_compat)va_arg(arg, long); 130147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else if (F.lSize == 2) n = (unsigned_long_long_compat)va_arg(arg, long_long_compat); 130247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else n = (unsigned_long_long_compat)va_arg(arg, int); 130347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #else 130447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (F.lSize == 1) n = (unsigned long)va_arg(arg, long); 130547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else if (F.lSize == 2) goto exit; 130647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else n = (unsigned long)va_arg(arg, int); 130747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #endif 130847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (F.hSize) n = (short) n; 130947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #if TYPE_LONGLONG_NATIVE 131047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if ((long_long_compat) n < 0) { n = (unsigned_long_long_compat)-(long_long_compat)n; F.sign = '-'; } 131147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #else 131247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if ((long) n < 0) { n = (unsigned long)-(long)n; F.sign = '-'; } 131347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #endif 131447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else if (F.forceSign) F.sign = '+'; 131547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt goto number; 131647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 131747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt notSigned: if (F.lSize == 1) n = va_arg(arg, unsigned long); 131847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else if (F.lSize == 2) 131947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 132047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #if TYPE_LONGLONG_NATIVE 132147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt n = va_arg(arg, unsigned_long_long_compat); 132247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #else 132347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt goto exit; 132447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #endif 132547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 132647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else n = va_arg(arg, unsigned int); 132747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (F.hSize) n = (unsigned short) n; 132847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt F.sign = 0; 132947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt goto number; 133047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 133147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt number: if (!F.havePrecision) 133247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 133347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (F.zeroPad) 133447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 133547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt F.precision = F.fieldWidth; 133647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (F.altForm) F.precision -= 2; 133747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (F.sign) --F.precision; 133847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 133947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (F.precision < 1) F.precision = 1; 134047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 134147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (F.precision > mDNS_VACB_Size - 1) 134247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt F.precision = mDNS_VACB_Size - 1; 134347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt for (i = 0; n; n /= base, i++) *--s = (char)(digits[n % base]); 134447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt for (; i < F.precision; i++) *--s = '0'; 134547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (F.altForm) { *--s = (char)c; *--s = '0'; i += 2; } 134647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (F.sign) { *--s = F.sign; i++; } 134747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 134847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 134947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case 'a' : { 135047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt unsigned char *a = va_arg(arg, unsigned char *); 135147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char pre[4] = ""; 135247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char post[32] = ""; 135347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (!a) { static char emsg[] = "<<NULL>>"; s = emsg; i = sizeof(emsg)-1; } 135447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else 135547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 135647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s = mDNS_VACB; // Adjust s to point to the start of the buffer, not the end 135747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (F.altForm == 1) 135847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 135947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #if(defined(MDNS_DEBUGMSGS)) 136047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt mDNSAddr *ip = (mDNSAddr*)a; 136147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt switch (ip->type) 136247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 136347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case mDNSAddrType_IPv4: F.precision = 4; a = (unsigned char *)&ip->ip.v4; break; 136447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case mDNSAddrType_IPv6: F.precision = 16; a = (unsigned char *)&ip->ip.v6; break; 136547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt default: F.precision = 0; break; 136647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 136747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #else 136847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt F.precision = 0; // mDNSEmbeddedAPI.h not included so no mDNSAddr support 136947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #endif 137047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 137147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else if (F.altForm == 2) 137247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 137347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #ifdef AF_INET 137447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const struct sockaddr *sa; 137547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt unsigned char *port; 137647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt sa = (const struct sockaddr*)a; 137747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt switch (sa->sa_family) 137847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 137947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case AF_INET: F.precision = 4; a = (unsigned char*)&((const struct sockaddr_in *)a)->sin_addr; 138047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt port = (unsigned char*)&((const struct sockaddr_in *)sa)->sin_port; 138147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF(post, sizeof(post), ":%d", (port[0] << 8) | port[1]); break; 138247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #ifdef AF_INET6 138347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case AF_INET6: F.precision = 16; a = (unsigned char*)&((const struct sockaddr_in6 *)a)->sin6_addr; 138447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt pre[0] = '['; pre[1] = '\0'; 138547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt port = (unsigned char*)&((const struct sockaddr_in6 *)sa)->sin6_port; 138647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF(post, sizeof(post), "%%%d]:%d", 138747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt (int)((const struct sockaddr_in6 *)sa)->sin6_scope_id, 138847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt (port[0] << 8) | port[1]); break; 138947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #endif 139047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt default: F.precision = 0; break; 139147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 139247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #else 139347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt F.precision = 0; // socket interfaces not included so no sockaddr support 139447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #endif 139547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 139647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt switch (F.precision) 139747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 139847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case 4: i = DebugSNPrintF(mDNS_VACB, sizeof(mDNS_VACB), "%d.%d.%d.%d%s", 139947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt a[0], a[1], a[2], a[3], post); break; 140047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case 6: i = DebugSNPrintF(mDNS_VACB, sizeof(mDNS_VACB), "%02X:%02X:%02X:%02X:%02X:%02X", 140147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt a[0], a[1], a[2], a[3], a[4], a[5]); break; 140247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case 8: i = DebugSNPrintF(mDNS_VACB, sizeof(mDNS_VACB), "%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X", 140347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7]); break; 140447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case 16: i = DebugSNPrintF(mDNS_VACB, sizeof(mDNS_VACB), 140547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%s%02X%02X:%02X%02X:%02X%02X:%02X%02X:%02X%02X:%02X%02X:%02X%02X:%02X%02X%s", 140647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt pre, a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], 140747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt a[9], a[10], a[11], a[12], a[13], a[14], a[15], post); break; 140847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt default: i = DebugSNPrintF(mDNS_VACB, sizeof(mDNS_VACB), "%s", "<< ERROR: Must specify address size " 140947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "(i.e. %.4a=IPv4, %.6a=Ethernet, %.8a=Fibre Channel %.16a=IPv6) >>"); break; 141047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 141147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 141247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 141347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 141447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 141547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case 'U' : { 141647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt unsigned char *a = va_arg(arg, unsigned char *); 141747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (!a) { static char emsg[] = "<<NULL>>"; s = emsg; i = sizeof(emsg)-1; } 141847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else 141947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 142047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s = mDNS_VACB; // Adjust s to point to the start of the buffer, not the end 142147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt i = DebugSNPrintF(mDNS_VACB, sizeof(mDNS_VACB), "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x", 142247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *((uint32_t*) &a[0]), *((uint16_t*) &a[4]), *((uint16_t*) &a[6]), 142347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt a[8], a[9], a[10], a[11], a[12], a[13], a[14], a[15]); break; 142447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 142547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 142647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 142747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 142847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case 'c' : *--s = (char)va_arg(arg, int); i = 1; break; 142947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 143047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case 'C' : if (F.lSize) n = va_arg(arg, unsigned long); 143147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else n = va_arg(arg, unsigned int); 143247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (F.hSize) n = (unsigned short) n; 143347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt c = (int)( n & 0xFF); *--s = (char)(DebugIsPrint(c) ? c : '^'); 143447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt c = (int)((n >> 8) & 0xFF); *--s = (char)(DebugIsPrint(c) ? c : '^'); 143547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt c = (int)((n >> 16) & 0xFF); *--s = (char)(DebugIsPrint(c) ? c : '^'); 143647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt c = (int)((n >> 24) & 0xFF); *--s = (char)(DebugIsPrint(c) ? c : '^'); 143747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt i = 4; 143847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 143947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 144047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case 's' : s = va_arg(arg, char *); 144147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (!s) { static char emsg[] = "<<NULL>>"; s = emsg; i = sizeof(emsg)-1; } 144247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else switch (F.altForm) 144347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 144447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case 0: i=0; 144547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (F.havePrecision) // C string 144647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 144747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt while((i < F.precision) && s[i]) i++; 144847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Make sure we don't truncate in the middle of a UTF-8 character. 144947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // If the last character is part of a multi-byte UTF-8 character, back up to the start of it. 145047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt j=0; 145147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt while((i > 0) && ((c = s[i-1]) & 0x80)) { j++; i--; if((c & 0xC0) != 0x80) break; } 145247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // If the actual count of UTF-8 characters matches the encoded UTF-8 count, add it back. 145347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if((j > 1) && (j <= 6)) 145447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 145547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt int test = (0xFF << (8-j)) & 0xFF; 145647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt int mask = test | (1 << ((8-j)-1)); 145747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if((c & mask) == test) i += j; 145847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 145947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 146047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else 146147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt while(s[i]) i++; 146247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 146347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case 1: i = (unsigned char) *s++; break; // Pascal string 146447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case 2: { // DNS label-sequence name 146547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt unsigned char *a = (unsigned char *)s; 146647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s = mDNS_VACB; // Adjust s to point to the start of the buffer, not the end 146747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (*a == 0) *s++ = '.'; // Special case for root DNS name 146847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt while (*a) 146947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 147047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (*a > 63) { s += DebugSNPrintF(s, mDNS_VACB_Remain(s), "<<INVALID LABEL LENGTH %u>>", *a); break; } 147147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (s + *a >= &mDNS_VACB[254]) { s += DebugSNPrintF(s, mDNS_VACB_Remain(s), "<<NAME TOO LONG>>"); break; } 147247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s += DebugSNPrintF(s, mDNS_VACB_Remain(s), "%#s.", a); 147347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt a += 1 + *a; 147447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 147547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt i = (size_t)(s - mDNS_VACB); 147647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s = mDNS_VACB; // Reset s back to the start of the buffer 147747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 147847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 147947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 148047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (F.havePrecision && i > F.precision) // Make sure we don't truncate in the middle of a UTF-8 character 148147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { i = F.precision; while (i>0 && (s[i] & 0xC0) == 0x80) i--; } 148247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 148347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 148447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case 'S': { // UTF-16 string 148547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt unsigned char *a = va_arg(arg, unsigned char *); 148647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt uint16_t *u = (uint16_t*)a; 148747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (!u) { static char emsg[] = "<<NULL>>"; s = emsg; i = sizeof(emsg)-1; } 148847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if ((!F.havePrecision || F.precision)) 148947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 149047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if ((a[0] == 0xFE) && (a[1] == 0xFF)) { F.altForm = 1; u += 1; a += 2; F.precision--; } // Big Endian 149147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else if ((a[0] == 0xFF) && (a[1] == 0xFE)) { F.altForm = 2; u += 1; a += 2; F.precision--; } // Little Endian 149247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 149347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s = mDNS_VACB; // Adjust s to point to the start of the buffer, not the end 149447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt switch (F.altForm) 149547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 149647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case 0: while ((!F.havePrecision || (i < F.precision)) && u[i] && mDNS_VACB_Remain(s)) // Host Endian 149747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { c = u[i]; *s++ = (char)(DebugIsPrint(c) ? c : '^'); i++; } 149847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 149947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case 1: while ((!F.havePrecision || (i < F.precision)) && u[i] && mDNS_VACB_Remain(s)) // Big Endian 150047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { c = ((a[0] << 8) | a[1]) & 0xFF; *s++ = (char)(DebugIsPrint(c) ? c : '^'); i++; a += 2; } 150147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 150247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case 2: while ((!F.havePrecision || (i < F.precision)) && u[i] && mDNS_VACB_Remain(s)) // Little Endian 150347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { c = ((a[1] << 8) | a[0]) & 0xFF; *s++ = (char)(DebugIsPrint(c) ? c : '^'); i++; a += 2; } 150447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 150547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 150647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 150747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s = mDNS_VACB; // Reset s back to the start of the buffer 150847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 150947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 151047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #if TARGET_OS_MAC 151147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case '@': { // Cocoa/CoreFoundation object 151247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CFTypeRef cfObj; 151347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CFStringRef cfStr; 151447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt cfObj = (CFTypeRef) va_arg(arg, void *); 151547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt cfStr = (CFGetTypeID(cfObj) == CFStringGetTypeID()) ? (CFStringRef)CFRetain(cfObj) : CFCopyDescription(cfObj); 151647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s = mDNS_VACB; // Adjust s to point to the start of the buffer, not the end 151747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (cfStr) 151847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 151947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CFRange range; 152047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CFIndex m; 152147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt range = CFRangeMake(0, CFStringGetLength(cfStr)); 152247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt m = 0; 152347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CFStringGetBytes(cfStr, range, kCFStringEncodingUTF8, '^', false, (UInt8*)mDNS_VACB, (CFIndex)sizeof(mDNS_VACB), &m); 152447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CFRelease(cfStr); 152547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt i = (size_t) m; 152647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 152747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else 152847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 152947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt i = DebugSNPrintF(mDNS_VACB, sizeof(mDNS_VACB), "%s", "ERROR: <invalid CF object>" ); 153047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 153147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 153247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (F.havePrecision && i > F.precision) // Make sure we don't truncate in the middle of a UTF-8 character 153347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { i = F.precision; while (i>0 && (s[i] & 0xC0) == 0x80) i--; } 153447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 153547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #endif 153647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 153747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case 'm' : { // Error Message 153847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt long err; 153947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (F.lSize) err = va_arg(arg, long); 154047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else err = va_arg(arg, int); 154147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (F.hSize) err = (short)err; 154247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugGetErrorString(err, mDNS_VACB, sizeof(mDNS_VACB)); 154347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s = mDNS_VACB; // Adjust s to point to the start of the buffer, not the end 154447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt for(i=0;s[i];i++) {} 154547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 154647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 154747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 154847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case 'H' : { // Hex Dump 154947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt void *a = va_arg(arg, void *); 155047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt size_t size = (size_t)va_arg(arg, int); 155147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt size_t max = (size_t)va_arg(arg, int); 155247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugFlags flags = 155347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt kDebugFlagsNoAddress | kDebugFlagsNoOffset | kDebugFlagsNoNewLine | 155447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt kDebugFlags8BitSeparator | kDebugFlagsNo32BitSeparator | 155547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt kDebugFlagsNo16ByteHexPad | kDebugFlagsNoByteCount; 155647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (F.altForm == 0) flags |= kDebugFlagsNoASCII; 155747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt size = (max < size) ? max : size; 155847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s = mDNS_VACB; // Adjust s to point to the start of the buffer, not the end 155947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt i = DebugHexDump(kDebugLevelMax, 0, NULL, 0, 0, NULL, 0, a, a, size, flags, mDNS_VACB, sizeof(mDNS_VACB)); 156047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 156147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 156247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 156347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case 'v' : { // Version 156447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt uint32_t version; 156547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt version = va_arg(arg, unsigned int); 156647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugNumVersionToString(version, mDNS_VACB); 156747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s = mDNS_VACB; // Adjust s to point to the start of the buffer, not the end 156847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt for(i=0;s[i];i++) {} 156947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 157047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 157147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 157247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case 'n' : s = va_arg(arg, char *); 157347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (F.hSize) * (short *) s = (short)nwritten; 157447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else if (F.lSize) * (long *) s = (long)nwritten; 157547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else * (int *) s = (int)nwritten; 157647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt continue; 157747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 157847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt default: s = mDNS_VACB; 157947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt i = DebugSNPrintF(mDNS_VACB, sizeof(mDNS_VACB), "<<UNKNOWN FORMAT CONVERSION CODE %%%c>>", c); 158047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 158147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case '%' : *sbuffer++ = (char)c; 158247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (++nwritten >= buflen) goto exit; 158347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 158447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 158547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 158647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (i < F.fieldWidth && !F.leftJustify) // Pad on the left 158747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt do { 158847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *sbuffer++ = ' '; 158947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (++nwritten >= buflen) goto exit; 159047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } while (i < --F.fieldWidth); 159147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 159247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (i > buflen - nwritten) // Make sure we don't truncate in the middle of a UTF-8 character 159347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { i = buflen - nwritten; while (i>0 && (s[i] & 0xC0) == 0x80) i--; } 159447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt for (j=0; j<i; j++) *sbuffer++ = *s++; // Write the converted result 159547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt nwritten += i; 159647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (nwritten >= buflen) goto exit; 159747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 159847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt for (; i < F.fieldWidth; i++) // Pad on the right 159947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 160047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *sbuffer++ = ' '; 160147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if (++nwritten >= buflen) goto exit; 160247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 160347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 160447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 160547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt exit: 160647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *sbuffer++ = 0; 160747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt return(nwritten); 160847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 160947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 161047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 161147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// DebugGetErrorString 161247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 161347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 161447e4cebad7397422144bb03a21f3f7682c062c4aRobert GreenwaltDEBUG_EXPORT const char * DebugGetErrorString( int_least32_t inErrorCode, char *inBuffer, size_t inBufferSize ) 161547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 161647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const char * s; 161747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char * dst; 161847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char * end; 161947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE ) 162047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char buffer[ 256 ]; 162147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 162247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 162347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt switch( inErrorCode ) 162447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 162547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #define CaseErrorString( X, STR ) case X: s = STR; break 162647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #define CaseErrorStringify( X ) case X: s = # X; break 162747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #define CaseErrorStringifyHardCode( VALUE, X ) case VALUE: s = # X; break 162847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 162947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // General Errors 163047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 163147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorString( 0, "no error" ); 163247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorString( 1, "in-progress/waiting" ); 163347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorString( -1, "catch-all unknown error" ); 163447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 163547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // ACP Errors 163647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 163747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -2, kACPBadRequestErr ); 163847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -3, kACPNoMemoryErr ); 163947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -4, kACPBadParamErr ); 164047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -5, kACPNotFoundErr ); 164147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -6, kACPBadChecksumErr ); 164247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -7, kACPCommandNotHandledErr ); 164347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -8, kACPNetworkErr ); 164447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -9, kACPDuplicateCommandHandlerErr ); 164547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -10, kACPUnknownPropertyErr ); 164647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -11, kACPImmutablePropertyErr ); 164747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -12, kACPBadPropertyValueErr ); 164847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -13, kACPNoResourcesErr ); 164947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -14, kACPBadOptionErr ); 165047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -15, kACPBadSizeErr ); 165147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -16, kACPBadPasswordErr ); 165247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -17, kACPNotInitializedErr ); 165347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -18, kACPNonReadablePropertyErr ); 165447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -19, kACPBadVersionErr ); 165547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -20, kACPBadSignatureErr ); 165647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -21, kACPBadIndexErr ); 165747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -22, kACPUnsupportedErr ); 165847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -23, kACPInUseErr ); 165947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -24, kACPParamCountErr ); 166047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -25, kACPIDErr ); 166147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -26, kACPFormatErr ); 166247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -27, kACPUnknownUserErr ); 166347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -28, kACPAccessDeniedErr ); 166447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -29, kACPIncorrectFWErr ); 166547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 166647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Common Services Errors 166747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 166847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kUnknownErr ); 166947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kOptionErr ); 167047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kSelectorErr ); 167147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kExecutionStateErr ); 167247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kPathErr ); 167347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kParamErr ); 167447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kParamCountErr ); 167547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kCommandErr ); 167647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kIDErr ); 167747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kStateErr ); 167847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kRangeErr ); 167947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kRequestErr ); 168047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kResponseErr ); 168147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kChecksumErr ); 168247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kNotHandledErr ); 168347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kVersionErr ); 168447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kSignatureErr ); 168547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kFormatErr ); 168647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kNotInitializedErr ); 168747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kAlreadyInitializedErr ); 168847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kNotInUseErr ); 168947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kInUseErr ); 169047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kTimeoutErr ); 169147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kCanceledErr ); 169247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kAlreadyCanceledErr ); 169347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kCannotCancelErr ); 169447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kDeletedErr ); 169547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kNotFoundErr ); 169647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kNoMemoryErr ); 169747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kNoResourcesErr ); 169847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kDuplicateErr ); 169947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kImmutableErr ); 170047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kUnsupportedDataErr ); 170147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kIntegrityErr ); 170247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kIncompatibleErr ); 170347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kUnsupportedErr ); 170447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kUnexpectedErr ); 170547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kValueErr ); 170647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kNotReadableErr ); 170747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kNotWritableErr ); 170847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kBadReferenceErr ); 170947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kFlagErr ); 171047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kMalformedErr ); 171147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kSizeErr ); 171247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kNameErr ); 171347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kNotReadyErr ); 171447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kReadErr ); 171547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kWriteErr ); 171647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kMismatchErr ); 171747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kDateErr ); 171847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kUnderrunErr ); 171947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kOverrunErr ); 172047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kEndingErr ); 172147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kConnectionErr ); 172247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kAuthenticationErr ); 172347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kOpenErr ); 172447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kTypeErr ); 172547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kSkipErr ); 172647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kNoAckErr ); 172747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kCollisionErr ); 172847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kBackoffErr ); 172947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kNoAddressAckErr ); 173047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kBusyErr ); 173147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringify( kNoSpaceErr ); 173247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 173347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // mDNS/DNS-SD Errors 173447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 173547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -65537, mStatus_UnknownErr ); 173647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -65538, mStatus_NoSuchNameErr ); 173747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -65539, mStatus_NoMemoryErr ); 173847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -65540, mStatus_BadParamErr ); 173947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -65541, mStatus_BadReferenceErr ); 174047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -65542, mStatus_BadStateErr ); 174147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -65543, mStatus_BadFlagsErr ); 174247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -65544, mStatus_UnsupportedErr ); 174347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -65545, mStatus_NotInitializedErr ); 174447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -65546, mStatus_NoCache ); 174547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -65547, mStatus_AlreadyRegistered ); 174647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -65548, mStatus_NameConflict ); 174747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -65549, mStatus_Invalid ); 174847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -65550, mStatus_GrowCache ); 174947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -65551, mStatus_BadInterfaceErr ); 175047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -65552, mStatus_Incompatible ); 175147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -65791, mStatus_ConfigChanged ); 175247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -65792, mStatus_MemFree ); 175347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 175447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // RSP Errors 175547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 175647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -400000, kRSPUnknownErr ); 175747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -400050, kRSPParamErr ); 175847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -400108, kRSPNoMemoryErr ); 175947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -405246, kRSPRangeErr ); 176047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -409057, kRSPSizeErr ); 176147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -400200, kRSPHardwareErr ); 176247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -401712, kRSPTimeoutErr ); 176347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -402053, kRSPUnsupportedErr ); 176447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -402419, kRSPIDErr ); 176547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -403165, kRSPFlagErr ); 176647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorString( -200000, "kRSPControllerStatusBase - 0x50" ); 176747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorString( -200080, "kRSPCommandSucceededErr - 0x50" ); 176847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorString( -200001, "kRSPCommandFailedErr - 0x01" ); 176947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorString( -200051, "kRSPChecksumErr - 0x33" ); 177047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorString( -200132, "kRSPCommandTimeoutErr - 0x84" ); 177147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorString( -200034, "kRSPPasswordRequiredErr - 0x22 OBSOLETE" ); 177247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorString( -200128, "kRSPCanceledErr - 0x02 Async" ); 177347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 177447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // XML Errors 177547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 177647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -100043, kXMLNotFoundErr ); 177747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -100050, kXMLParamErr ); 177847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -100108, kXMLNoMemoryErr ); 177947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -100206, kXMLFormatErr ); 178047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -100586, kXMLNoRootElementErr ); 178147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -101703, kXMLWrongDataTypeErr ); 178247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -101726, kXMLKeyErr ); 178347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -102053, kXMLUnsupportedErr ); 178447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -102063, kXMLMissingElementErr ); 178547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -103026, kXMLParseErr ); 178647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -103159, kXMLBadDataErr ); 178747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -103170, kXMLBadNameErr ); 178847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -105246, kXMLRangeErr ); 178947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -105251, kXMLUnknownElementErr ); 179047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -108739, kXMLMalformedInputErr ); 179147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -109057, kXMLBadSizeErr ); 179247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -101730, kXMLMissingChildElementErr ); 179347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -102107, kXMLMissingParentElementErr ); 179447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -130587, kXMLNonRootElementErr ); 179547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( -102015, kXMLDateErr ); 179647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 179747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #if( __MACH__ ) 179847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 179947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Mach Errors 180047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 180147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x00002000, MACH_MSG_IPC_SPACE ); 180247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x00001000, MACH_MSG_VM_SPACE ); 180347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x00000800, MACH_MSG_IPC_KERNEL ); 180447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x00000400, MACH_MSG_VM_KERNEL ); 180547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x10000001, MACH_SEND_IN_PROGRESS ); 180647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x10000002, MACH_SEND_INVALID_DATA ); 180747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x10000003, MACH_SEND_INVALID_DEST ); 180847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x10000004, MACH_SEND_TIMED_OUT ); 180947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x10000007, MACH_SEND_INTERRUPTED ); 181047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x10000008, MACH_SEND_MSG_TOO_SMALL ); 181147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x10000009, MACH_SEND_INVALID_REPLY ); 181247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x1000000A, MACH_SEND_INVALID_RIGHT ); 181347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x1000000B, MACH_SEND_INVALID_NOTIFY ); 181447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x1000000C, MACH_SEND_INVALID_MEMORY ); 181547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x1000000D, MACH_SEND_NO_BUFFER ); 181647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x1000000E, MACH_SEND_TOO_LARGE ); 181747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x1000000F, MACH_SEND_INVALID_TYPE ); 181847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x10000010, MACH_SEND_INVALID_HEADER ); 181947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x10000011, MACH_SEND_INVALID_TRAILER ); 182047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x10000015, MACH_SEND_INVALID_RT_OOL_SIZE ); 182147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x10004001, MACH_RCV_IN_PROGRESS ); 182247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x10004002, MACH_RCV_INVALID_NAME ); 182347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x10004003, MACH_RCV_TIMED_OUT ); 182447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x10004004, MACH_RCV_TOO_LARGE ); 182547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x10004005, MACH_RCV_INTERRUPTED ); 182647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x10004006, MACH_RCV_PORT_CHANGED ); 182747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x10004007, MACH_RCV_INVALID_NOTIFY ); 182847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x10004008, MACH_RCV_INVALID_DATA ); 182947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x10004009, MACH_RCV_PORT_DIED ); 183047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x1000400A, MACH_RCV_IN_SET ); 183147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x1000400B, MACH_RCV_HEADER_ERROR ); 183247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x1000400C, MACH_RCV_BODY_ERROR ); 183347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x1000400D, MACH_RCV_INVALID_TYPE ); 183447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x1000400E, MACH_RCV_SCATTER_SMALL ); 183547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x1000400F, MACH_RCV_INVALID_TRAILER ); 183647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0x10004011, MACH_RCV_IN_PROGRESS_TIMED ); 183747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 183847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Mach OSReturn Errors 183947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 184047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xDC000001, kOSReturnError ); 184147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xDC004001, kOSMetaClassInternal ); 184247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xDC004002, kOSMetaClassHasInstances ); 184347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xDC004003, kOSMetaClassNoInit ); 184447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xDC004004, kOSMetaClassNoTempData ); 184547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xDC004005, kOSMetaClassNoDicts ); 184647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xDC004006, kOSMetaClassNoKModSet ); 184747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xDC004007, kOSMetaClassNoInsKModSet ); 184847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xDC004008, kOSMetaClassNoSuper ); 184947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xDC004009, kOSMetaClassInstNoSuper ); 185047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xDC00400A, kOSMetaClassDuplicateClass ); 185147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 185247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // IOKit Errors 185347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 185447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002BC, kIOReturnError ); 185547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002BD, kIOReturnNoMemory ); 185647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002BE, kIOReturnNoResources ); 185747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002BF, kIOReturnIPCError ); 185847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002C0, kIOReturnNoDevice ); 185947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002C1, kIOReturnNotPrivileged ); 186047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002C2, kIOReturnBadArgument ); 186147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002C3, kIOReturnLockedRead ); 186247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002C4, kIOReturnLockedWrite ); 186347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002C5, kIOReturnExclusiveAccess ); 186447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002C6, kIOReturnBadMessageID ); 186547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002C7, kIOReturnUnsupported ); 186647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002C8, kIOReturnVMError ); 186747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002C9, kIOReturnInternalError ); 186847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002CA, kIOReturnIOError ); 186947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002CC, kIOReturnCannotLock ); 187047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002CD, kIOReturnNotOpen ); 187147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002CE, kIOReturnNotReadable ); 187247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002CF, kIOReturnNotWritable ); 187347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002D0, kIOReturnNotAligned ); 187447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002D1, kIOReturnBadMedia ); 187547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002D2, kIOReturnStillOpen ); 187647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002D3, kIOReturnRLDError ); 187747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002D4, kIOReturnDMAError ); 187847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002D5, kIOReturnBusy ); 187947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002D6, kIOReturnTimeout ); 188047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002D7, kIOReturnOffline ); 188147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002D8, kIOReturnNotReady ); 188247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002D9, kIOReturnNotAttached ); 188347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002DA, kIOReturnNoChannels ); 188447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002DB, kIOReturnNoSpace ); 188547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002DD, kIOReturnPortExists ); 188647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002DE, kIOReturnCannotWire ); 188747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002DF, kIOReturnNoInterrupt ); 188847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002E0, kIOReturnNoFrames ); 188947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002E1, kIOReturnMessageTooLarge ); 189047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002E2, kIOReturnNotPermitted ); 189147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002E3, kIOReturnNoPower ); 189247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002E4, kIOReturnNoMedia ); 189347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002E5, kIOReturnUnformattedMedia ); 189447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002E6, kIOReturnUnsupportedMode ); 189547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002E7, kIOReturnUnderrun ); 189647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002E8, kIOReturnOverrun ); 189747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002E9, kIOReturnDeviceError ); 189847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002EA, kIOReturnNoCompletion ); 189947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002EB, kIOReturnAborted ); 190047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002EC, kIOReturnNoBandwidth ); 190147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002ED, kIOReturnNotResponding ); 190247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002EE, kIOReturnIsoTooOld ); 190347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002EF, kIOReturnIsoTooNew ); 190447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00002F0, kIOReturnNotFound ); 190547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE0000001, kIOReturnInvalid ); 190647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 190747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // IOKit FireWire Errors 190847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 190947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE0008010, kIOFireWireResponseBase ); 191047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE0008020, kIOFireWireBusReset ); 191147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE0008001, kIOConfigNoEntry ); 191247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE0008002, kIOFireWirePending ); 191347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE0008003, kIOFireWireLastDCLToken ); 191447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE0008004, kIOFireWireConfigROMInvalid ); 191547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE0008005, kIOFireWireAlreadyRegistered ); 191647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE0008006, kIOFireWireMultipleTalkers ); 191747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE0008007, kIOFireWireChannelActive ); 191847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE0008008, kIOFireWireNoListenerOrTalker ); 191947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE0008009, kIOFireWireNoChannels ); 192047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE000800A, kIOFireWireChannelNotAvailable ); 192147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE000800B, kIOFireWireSeparateBus ); 192247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE000800C, kIOFireWireBadSelfIDs ); 192347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE000800D, kIOFireWireLowCableVoltage ); 192447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE000800E, kIOFireWireInsufficientPower ); 192547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE000800F, kIOFireWireOutOfTLabels ); 192647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE0008101, kIOFireWireBogusDCLProgram ); 192747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE0008102, kIOFireWireTalkingAndListening ); 192847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE0008103, kIOFireWireHardwareSlept ); 192947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00087D0, kIOFWMessageServiceIsRequestingClose ); 193047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00087D1, kIOFWMessagePowerStateChanged ); 193147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE00087D2, kIOFWMessageTopologyChanged ); 193247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 193347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // IOKit USB Errors 193447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 193547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE0004061, kIOUSBUnknownPipeErr ); 193647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE0004060, kIOUSBTooManyPipesErr ); 193747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE000405F, kIOUSBNoAsyncPortErr ); 193847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE000405E, kIOUSBNotEnoughPipesErr ); 193947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE000405D, kIOUSBNotEnoughPowerErr ); 194047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE0004057, kIOUSBEndpointNotFound ); 194147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE0004056, kIOUSBConfigNotFound ); 194247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE0004051, kIOUSBTransactionTimeout ); 194347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE0004050, kIOUSBTransactionReturned ); 194447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE000404F, kIOUSBPipeStalled ); 194547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE000404E, kIOUSBInterfaceNotFound ); 194647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE000404D, kIOUSBLowLatencyBufferNotPreviouslyAllocated ); 194747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE000404C, kIOUSBLowLatencyFrameListNotPreviouslyAllocated ); 194847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE000404B, kIOUSBHighSpeedSplitError ); 194947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE0004010, kIOUSBLinkErr ); 195047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE000400F, kIOUSBNotSent2Err ); 195147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE000400E, kIOUSBNotSent1Err ); 195247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE000400D, kIOUSBBufferUnderrunErr ); 195347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE000400C, kIOUSBBufferOverrunErr ); 195447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE000400B, kIOUSBReserved2Err ); 195547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE000400A, kIOUSBReserved1Err ); 195647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE0004007, kIOUSBWrongPIDErr ); 195747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE0004006, kIOUSBPIDCheckErr ); 195847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE0004003, kIOUSBDataToggleErr ); 195947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE0004002, kIOUSBBitstufErr ); 196047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt CaseErrorStringifyHardCode( 0xE0004001, kIOUSBCRCErr ); 196147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 196247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #endif // __MACH__ 196347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 196447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Other Errors 196547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 196647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt default: 196747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s = NULL; 196847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #if( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE ) 196947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( inBuffer && ( inBufferSize > 0 ) ) 197047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 197147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DWORD n; 197247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 197347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt n = FormatMessageA( FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, (DWORD) inErrorCode, 197447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt MAKELANGID( LANG_NEUTRAL, SUBLANG_DEFAULT ), buffer, sizeof( buffer ), NULL ); 197547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( n > 0 ) 197647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 197747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Remove any trailing CR's or LF's since some messages have them. 197847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 197947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt while( ( n > 0 ) && isspace( ( (unsigned char *) buffer )[ n - 1 ] ) ) 198047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 198147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt buffer[ --n ] = '\0'; 198247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 198347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s = buffer; 198447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 198547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 198647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #endif 198747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 198847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( !s ) 198947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 199047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #if( !TARGET_API_MAC_OSX_KERNEL && !TARGET_OS_WINDOWS_CE ) 199147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s = strerror( inErrorCode ); 199247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #endif 199347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( !s ) 199447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 199547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s = "<unknown error code>"; 199647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 199747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 199847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 199947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 200047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 200147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Copy the string to the output buffer. If no buffer is supplied or it is empty, return an empty string. 200247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 200347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( inBuffer && ( inBufferSize > 0 ) ) 200447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 200547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt dst = inBuffer; 200647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt end = dst + ( inBufferSize - 1 ); 200747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt while( ( ( end - dst ) > 0 ) && ( *s != '\0' ) ) 200847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 200947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *dst++ = *s++; 201047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 201147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *dst = '\0'; 201247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s = inBuffer; 201347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 201447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt return( s ); 201547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} 201647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 201747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 201847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// DebugHexDump 201947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 202047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 202147e4cebad7397422144bb03a21f3f7682c062c4aRobert GreenwaltDEBUG_EXPORT size_t 202247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugHexDump( 202347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugLevel inLevel, 202447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt int inIndent, 202547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const char * inLabel, 202647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt size_t inLabelSize, 202747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt int inLabelMinWidth, 202847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const char * inType, 202947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt size_t inTypeSize, 203047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const void * inDataStart, 203147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const void * inData, 203247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt size_t inDataSize, 203347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugFlags inFlags, 203447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char * outBuffer, 203547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt size_t inBufferSize ) 203647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 203747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt static const char kHexChars[] = "0123456789ABCDEF"; 203847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const uint8_t * start; 203947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const uint8_t * src; 204047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char * dst; 204147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char * end; 204247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt size_t n; 204347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt int offset; 204447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt int width; 204547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const char * newline; 204647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char separator[ 8 ]; 204747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char * s; 204847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 204947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DEBUG_UNUSED( inType ); 205047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DEBUG_UNUSED( inTypeSize ); 205147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 205247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Set up the function-wide variables. 205347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 205447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( inLabelSize == kSizeCString ) 205547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 205647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt inLabelSize = strlen( inLabel ); 205747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 205847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt start = (const uint8_t *) inData; 205947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt src = start; 206047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt dst = outBuffer; 206147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt end = dst + inBufferSize; 206247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt offset = (int)( (intptr_t) inData - (intptr_t) inDataStart ); 206347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt width = ( (int) inLabelSize > inLabelMinWidth ) ? (int) inLabelSize : inLabelMinWidth; 206447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt newline = ( inFlags & kDebugFlagsNoNewLine ) ? "" : "\n"; 206547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 206647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Set up the separator string. This is used to insert spaces on subsequent "lines" when not using newlines. 206747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 206847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s = separator; 206947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( inFlags & kDebugFlagsNoNewLine ) 207047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 207147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( inFlags & kDebugFlags8BitSeparator ) 207247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 207347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s++ = ' '; 207447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 207547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( inFlags & kDebugFlags16BitSeparator ) 207647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 207747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s++ = ' '; 207847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 207947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( !( inFlags & kDebugFlagsNo32BitSeparator ) ) 208047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 208147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s++ = ' '; 208247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 208347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt check( ( (size_t)( s - separator ) ) < sizeof( separator ) ); 208447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 208547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s = '\0'; 208647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 208747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt for( ;; ) 208847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 208947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char prefixString[ 32 ]; 209047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char hexString[ 64 ]; 209147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char asciiString[ 32 ]; 209247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char byteCountString[ 32 ]; 209347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt int c; 209447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt size_t chunkSize; 209547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt size_t i; 209647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 209747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // If this is a label-only item (i.e. no data), print the label (accounting for prefix string spacing) and exit. 209847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 209947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( inDataSize == 0 ) 210047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 210147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( inLabel && ( inLabelSize > 0 ) ) 210247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 210347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt width = 0; 210447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( !( inFlags & kDebugFlagsNoAddress ) ) 210547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 210647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt width += 8; // "00000000" 210747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( !( inFlags & kDebugFlagsNoOffset ) ) 210847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 210947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt width += 1; // "+" 211047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 211147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 211247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( inFlags & kDebugFlags32BitOffset ) 211347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 211447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt width += 8; // "00000000" 211547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 211647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else if( !( inFlags & kDebugFlagsNoOffset ) ) 211747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 211847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt width += 4; // "0000" 211947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 212047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 212147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( outBuffer ) 212247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 212347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt dst += DebugSNPrintF( dst, (size_t)( end - dst ), "%*s" "%-*.*s" "%.*s" "%s", 212447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt width, "", 212547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ( width > 0 ) ? ": " : "", 212647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt width, (int) inLabelSize, inLabel, 212747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt newline ); 212847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 212947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else 213047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 213147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt dst += DebugPrintF( inLevel, "%*s" "%-*.*s" "%.*s" "%s", 213247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt width, "", 213347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ( width > 0 ) ? ": " : "", 213447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt width, (int) inLabelSize, inLabel, 213547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt newline ); 213647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 213747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 213847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 213947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 214047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 214147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Build the prefix string. It will be in one of the following formats: 214247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // 214347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // 1) "00000000+0000[0000]" (address and offset) 214447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // 2) "00000000" (address only) 214547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // 3) "0000[0000]" (offset only) 214647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // 4) "" (no address or offset) 214747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // 214847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Note: If we're printing multiple "lines", but not printing newlines, a space is used to separate. 214947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 215047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s = prefixString; 215147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( !( inFlags & kDebugFlagsNoAddress ) ) 215247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 215347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s++ = kHexChars[ ( ( (uintptr_t) src ) >> 28 ) & 0xF ]; 215447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s++ = kHexChars[ ( ( (uintptr_t) src ) >> 24 ) & 0xF ]; 215547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s++ = kHexChars[ ( ( (uintptr_t) src ) >> 20 ) & 0xF ]; 215647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s++ = kHexChars[ ( ( (uintptr_t) src ) >> 16 ) & 0xF ]; 215747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s++ = kHexChars[ ( ( (uintptr_t) src ) >> 12 ) & 0xF ]; 215847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s++ = kHexChars[ ( ( (uintptr_t) src ) >> 8 ) & 0xF ]; 215947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s++ = kHexChars[ ( ( (uintptr_t) src ) >> 4 ) & 0xF ]; 216047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s++ = kHexChars[ ( (uintptr_t) src ) & 0xF ]; 216147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 216247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( !( inFlags & kDebugFlagsNoOffset ) ) 216347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 216447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s++ = '+'; 216547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 216647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 216747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( !( inFlags & kDebugFlagsNoOffset ) ) 216847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 216947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( inFlags & kDebugFlags32BitOffset ) 217047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 217147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s++ = kHexChars[ ( offset >> 28 ) & 0xF ]; 217247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s++ = kHexChars[ ( offset >> 24 ) & 0xF ]; 217347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s++ = kHexChars[ ( offset >> 20 ) & 0xF ]; 217447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s++ = kHexChars[ ( offset >> 16 ) & 0xF ]; 217547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 217647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s++ = kHexChars[ ( offset >> 12 ) & 0xF ]; 217747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s++ = kHexChars[ ( offset >> 8 ) & 0xF ]; 217847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s++ = kHexChars[ ( offset >> 4 ) & 0xF ]; 217947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s++ = kHexChars[ offset & 0xF ]; 218047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 218147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( s != prefixString ) 218247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 218347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s++ = ':'; 218447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s++ = ' '; 218547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 218647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt check( ( (size_t)( s - prefixString ) ) < sizeof( prefixString ) ); 218747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s = '\0'; 218847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 218947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Build a hex string with a optional spaces after every 1, 2, and/or 4 bytes to make it easier to read. 219047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Optionally pads the hex string with space to fill the full 16 byte range (so it lines up). 219147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 219247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s = hexString; 219347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt chunkSize = ( inDataSize < 16 ) ? inDataSize : 16; 219447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt n = ( inFlags & kDebugFlagsNo16ByteHexPad ) ? chunkSize : 16; 219547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt for( i = 0; i < n; ++i ) 219647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 219747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( ( inFlags & kDebugFlags8BitSeparator ) && ( i > 0 ) ) 219847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 219947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s++ = ' '; 220047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 220147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( ( inFlags & kDebugFlags16BitSeparator ) && ( i > 0 ) && ( ( i % 2 ) == 0 ) ) 220247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 220347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s++ = ' '; 220447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 220547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( !( inFlags & kDebugFlagsNo32BitSeparator ) && ( i > 0 ) && ( ( i % 4 ) == 0 ) ) 220647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 220747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s++ = ' '; 220847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 220947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( i < chunkSize ) 221047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 221147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s++ = kHexChars[ src[ i ] >> 4 ]; 221247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s++ = kHexChars[ src[ i ] & 0xF ]; 221347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 221447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else 221547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 221647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s++ = ' '; 221747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s++ = ' '; 221847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 221947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 222047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt check( ( (size_t)( s - hexString ) ) < sizeof( hexString ) ); 222147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s = '\0'; 222247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 222347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Build a string with the ASCII version of the data (replaces non-printable characters with '^'). 222447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Optionally pads the string with '`' to fill the full 16 byte range (so it lines up). 222547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 222647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s = asciiString; 222747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( !( inFlags & kDebugFlagsNoASCII ) ) 222847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 222947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s++ = ' '; 223047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s++ = '|'; 223147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt for( i = 0; i < n; ++i ) 223247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 223347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( i < chunkSize ) 223447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 223547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt c = src[ i ]; 223647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( !DebugIsPrint( c ) ) 223747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 223847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt c = '^'; 223947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 224047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 224147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else 224247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 224347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt c = '`'; 224447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 224547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s++ = (char) c; 224647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 224747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s++ = '|'; 224847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt check( ( (size_t)( s - asciiString ) ) < sizeof( asciiString ) ); 224947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 225047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s = '\0'; 225147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 225247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Build a string indicating how bytes are in the hex dump. Only printed on the first line. 225347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 225447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s = byteCountString; 225547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( !( inFlags & kDebugFlagsNoByteCount ) ) 225647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 225747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( src == start ) 225847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 225947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s += DebugSNPrintF( s, sizeof( byteCountString ), " (%d bytes)", (int) inDataSize ); 226047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 226147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 226247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt check( ( (size_t)( s - byteCountString ) ) < sizeof( byteCountString ) ); 226347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *s = '\0'; 226447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 226547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Build the entire line from all the pieces we've previously built. 226647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 226747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( outBuffer ) 226847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 226947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( src == start ) 227047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 227147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt dst += DebugSNPrintF( dst, (size_t)( end - dst ), 227247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%*s" // Indention 227347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%s" // Separator (only if needed) 227447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%s" // Prefix 227547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%-*.*s" // Label 227647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%s" // Separator 227747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%s" // Hex 227847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%s" // ASCII 227947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%s" // Byte Count 228047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%s", // Newline 228147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt inIndent, "", 228247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ( src != start ) ? separator : "", 228347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt prefixString, 228447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt width, (int) inLabelSize, inLabel ? inLabel : "", 228547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ( width > 0 ) ? " " : "", 228647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt hexString, 228747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt asciiString, 228847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt byteCountString, 228947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt newline ); 229047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 229147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else 229247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 229347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt dst += DebugSNPrintF( dst, (size_t)( end - dst ), 229447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%*s" // Indention 229547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%s" // Separator (only if needed) 229647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%s" // Prefix 229747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%*s" // Label Spacing 229847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%s" // Separator 229947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%s" // Hex 230047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%s" // ASCII 230147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%s" // Byte Count 230247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%s", // Newline 230347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt inIndent, "", 230447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ( src != start ) ? separator : "", 230547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt prefixString, 230647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt width, "", 230747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ( width > 0 ) ? " " : "", 230847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt hexString, 230947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt asciiString, 231047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt byteCountString, 231147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt newline ); 231247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 231347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 231447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else 231547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 231647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( src == start ) 231747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 231847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt dst += DebugPrintF( inLevel, 231947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%*s" // Indention 232047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%s" // Separator (only if needed) 232147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%s" // Prefix 232247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%-*.*s" // Label 232347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%s" // Separator 232447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%s" // Hex 232547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%s" // ASCII 232647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%s" // Byte Count 232747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%s", // Newline 232847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt inIndent, "", 232947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ( src != start ) ? separator : "", 233047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt prefixString, 233147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt width, (int) inLabelSize, inLabel, 233247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ( width > 0 ) ? " " : "", 233347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt hexString, 233447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt asciiString, 233547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt byteCountString, 233647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt newline ); 233747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 233847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt else 233947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 234047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt dst += DebugPrintF( inLevel, 234147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%*s" // Indention 234247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%s" // Separator (only if needed) 234347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%s" // Prefix 234447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%*s" // Label Spacing 234547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%s" // Separator 234647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%s" // Hex 234747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%s" // ASCII 234847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%s" // Byte Count 234947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "%s", // Newline 235047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt inIndent, "", 235147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ( src != start ) ? separator : "", 235247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt prefixString, 235347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt width, "", 235447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt ( width > 0 ) ? " " : "", 235547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt hexString, 235647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt asciiString, 235747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt byteCountString, 235847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt newline ); 235947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 236047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 236147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 236247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Move to the next chunk. Exit if there is no more data. 236347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 236447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt offset += (int) chunkSize; 236547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt src += chunkSize; 236647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt inDataSize -= chunkSize; 236747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( inDataSize == 0 ) 236847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 236947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 237047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 237147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 237247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 237347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Note: The "dst - outBuffer" size calculation works even if "outBuffer" is NULL because it's all relative. 237447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 237547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt return( (size_t)( dst - outBuffer ) ); 237647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} 237747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 237847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 237947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// DebugNumVersionToString 238047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 238147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 238247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltstatic char * DebugNumVersionToString( uint32_t inVersion, char *inString ) 238347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 238447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char * s; 238547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt uint8_t majorRev; 238647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt uint8_t minor; 238747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt uint8_t bugFix; 238847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt uint8_t stage; 238947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt uint8_t revision; 239047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 239147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt check( inString ); 239247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 239347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt majorRev = (uint8_t)( ( inVersion >> 24 ) & 0xFF ); 239447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt minor = (uint8_t)( ( inVersion >> 20 ) & 0x0F ); 239547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt bugFix = (uint8_t)( ( inVersion >> 16 ) & 0x0F ); 239647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt stage = (uint8_t)( ( inVersion >> 8 ) & 0xFF ); 239747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt revision = (uint8_t)( inVersion & 0xFF ); 239847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 239947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Convert the major, minor, and bugfix numbers. 240047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 240147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s = inString; 240247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s += sprintf( s, "%u", majorRev ); 240347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s += sprintf( s, ".%u", minor ); 240447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( bugFix != 0 ) 240547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 240647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s += sprintf( s, ".%u", bugFix ); 240747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 240847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 240947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Convert the version stage and non-release revision number. 241047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 241147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt switch( stage ) 241247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 241347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case kVersionStageDevelopment: 241447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s += sprintf( s, "d%u", revision ); 241547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 241647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 241747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case kVersionStageAlpha: 241847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s += sprintf( s, "a%u", revision ); 241947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 242047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 242147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case kVersionStageBeta: 242247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s += sprintf( s, "b%u", revision ); 242347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 242447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 242547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt case kVersionStageFinal: 242647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 242747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // A non-release revision of zero is a special case indicating the software is GM (at the golden master 242847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // stage) and therefore, the non-release revision should not be added to the string. 242947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 243047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( revision != 0 ) 243147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 243247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s += sprintf( s, "f%u", revision ); 243347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 243447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 243547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 243647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt default: 243747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt dlog( kDebugLevelError, "invalid NumVersion stage (0x%02X)\n", stage ); 243847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt break; 243947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 244047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt return( inString ); 244147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} 244247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 244347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 244447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// DebugTaskLevel 244547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 244647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 244747e4cebad7397422144bb03a21f3f7682c062c4aRobert GreenwaltDEBUG_EXPORT uint32_t DebugTaskLevel( void ) 244847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 244947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt uint32_t level; 245047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 245147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt level = 0; 245247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 245347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_OS_VXWORKS ) 245447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( intContext() ) 245547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 245647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt level |= ( ( 1 << kDebugInterruptLevelShift ) & kDebugInterruptLevelMask ); 245747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 245847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 245947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 246047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt return( level ); 246147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} 246247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 246347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE ) 246447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 246547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// DebugWinEnableConsole 246647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 246747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 246847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#pragma warning( disable:4311 ) 246947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 247047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltstatic void DebugWinEnableConsole( void ) 247147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 247247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt static bool sConsoleEnabled = false; 247347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt BOOL result; 247447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt int fileHandle; 247547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt FILE * file; 247647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt int err; 247747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 247847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( sConsoleEnabled ) 247947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 248047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt goto exit; 248147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 248247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 248347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Create console window. 248447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 248547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt result = AllocConsole(); 248647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_quiet( result, exit ); 248747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 248847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Redirect stdin to the console stdin. 248947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 249047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt fileHandle = _open_osfhandle( (long) GetStdHandle( STD_INPUT_HANDLE ), _O_TEXT ); 249147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 249247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #if( defined( __MWERKS__ ) ) 249347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt file = __handle_reopen( (unsigned long) fileHandle, "r", stdin ); 249447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_quiet( file, exit ); 249547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #else 249647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt file = _fdopen( fileHandle, "r" ); 249747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_quiet( file, exit ); 249847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 249947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *stdin = *file; 250047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #endif 250147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 250247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = setvbuf( stdin, NULL, _IONBF, 0 ); 250347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_noerr_quiet( err, exit ); 250447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 250547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Redirect stdout to the console stdout. 250647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 250747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt fileHandle = _open_osfhandle( (long) GetStdHandle( STD_OUTPUT_HANDLE ), _O_TEXT ); 250847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 250947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #if( defined( __MWERKS__ ) ) 251047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt file = __handle_reopen( (unsigned long) fileHandle, "w", stdout ); 251147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_quiet( file, exit ); 251247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #else 251347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt file = _fdopen( fileHandle, "w" ); 251447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_quiet( file, exit ); 251547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 251647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *stdout = *file; 251747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #endif 251847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 251947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = setvbuf( stdout, NULL, _IONBF, 0 ); 252047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_noerr_quiet( err, exit ); 252147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 252247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Redirect stderr to the console stdout. 252347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 252447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt fileHandle = _open_osfhandle( (long) GetStdHandle( STD_OUTPUT_HANDLE ), _O_TEXT ); 252547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 252647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #if( defined( __MWERKS__ ) ) 252747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt file = __handle_reopen( (unsigned long) fileHandle, "w", stderr ); 252847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_quiet( file, exit ); 252947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #else 253047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt file = _fdopen( fileHandle, "w" ); 253147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_quiet( file, exit ); 253247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 253347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *stderr = *file; 253447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #endif 253547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 253647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = setvbuf( stderr, NULL, _IONBF, 0 ); 253747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_noerr_quiet( err, exit ); 253847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 253947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt sConsoleEnabled = true; 254047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 254147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltexit: 254247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt return; 254347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} 254447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 254547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#pragma warning( default:4311 ) 254647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 254747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif // TARGET_OS_WIN32 && !TARGET_OS_WINDOWS_CE 254847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 254947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( TARGET_OS_WIN32 ) 255047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 255147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// DebugWinCharToTCharString 255247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 255347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 255447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltstatic TCHAR * 255547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugWinCharToTCharString( 255647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const char * inCharString, 255747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt size_t inCharCount, 255847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt TCHAR * outTCharString, 255947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt size_t inTCharCountMax, 256047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt size_t * outTCharCount ) 256147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 256247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt const char * src; 256347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt TCHAR * dst; 256447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt TCHAR * end; 256547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 256647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( inCharCount == kSizeCString ) 256747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 256847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt inCharCount = strlen( inCharString ); 256947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 257047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt src = inCharString; 257147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt dst = outTCharString; 257247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( inTCharCountMax > 0 ) 257347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 257447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt inTCharCountMax -= 1; 257547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( inTCharCountMax > inCharCount ) 257647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 257747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt inTCharCountMax = inCharCount; 257847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 257947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 258047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt end = dst + inTCharCountMax; 258147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt while( dst < end ) 258247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 258347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *dst++ = (TCHAR) *src++; 258447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 258547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *dst = 0; 258647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 258747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( outTCharCount ) 258847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 258947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt *outTCharCount = (size_t)( dst - outTCharString ); 259047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 259147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt return( outTCharString ); 259247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} 259347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 259447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 259547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if 0 259647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#pragma mark - 259747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#pragma mark == Debugging == 259847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 259947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 260047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 260147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt// DebugServicesTest 260247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt//=========================================================================================================================== 260347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 260447e4cebad7397422144bb03a21f3f7682c062c4aRobert GreenwaltDEBUG_EXPORT OSStatus DebugServicesTest( void ) 260547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt{ 260647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt OSStatus err; 260747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt char s[ 512 ]; 260847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt uint8_t * p; 260947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt uint8_t data[] = 261047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 261147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 0x11, 0x22, 0x33, 0x44, 261247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 0x55, 0x66, 261347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 0x77, 0x88, 0x99, 0xAA, 261447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 0xBB, 0xCC, 0xDD, 261547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 0xEE, 261647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 0xFF, 261747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 261847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80, 0x90, 0xA0, 261947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 0x11, 0x21, 0x31, 0x41, 0x51, 0x61, 0x71, 0x81, 0x91, 0xA1 262047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt }; 262147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 262247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt debug_initialize( kDebugOutputTypeMetaConsole ); 262347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 262447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // check's 262547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 262647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt check( 0 && "SHOULD SEE: check" ); 262747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt check( 1 && "SHOULD *NOT* SEE: check (valid)" ); 262847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt check_string( 0, "SHOULD SEE: check_string" ); 262947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt check_string( 1, "SHOULD *NOT* SEE: check_string (valid)" ); 263047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt check_noerr( -123 ); 263147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt check_noerr( 10038 ); 263247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt check_noerr( 22 ); 263347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt check_noerr( 0 ); 263447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt check_noerr_string( -6712, "SHOULD SEE: check_noerr_string" ); 263547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt check_noerr_string( 0, "SHOULD *NOT* SEE: check_noerr_string (valid)" ); 263647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt check_translated_errno( 0 >= 0 && "SHOULD *NOT* SEE", -384, -999 ); 263747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt check_translated_errno( -1 >= 0 && "SHOULD SEE", -384, -999 ); 263847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt check_translated_errno( -1 >= 0 && "SHOULD SEE", 0, -999 ); 263947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt check_ptr_overlap( "SHOULD *NOT* SEE" ? 10 : 0, 10, 22, 10 ); 264047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt check_ptr_overlap( "SHOULD SEE" ? 10 : 0, 10, 5, 10 ); 264147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt check_ptr_overlap( "SHOULD SEE" ? 10 : 0, 10, 12, 6 ); 264247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt check_ptr_overlap( "SHOULD SEE" ? 12 : 0, 6, 10, 10 ); 264347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt check_ptr_overlap( "SHOULD SEE" ? 12 : 0, 10, 10, 10 ); 264447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt check_ptr_overlap( "SHOULD *NOT* SEE" ? 22 : 0, 10, 10, 10 ); 264547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt check_ptr_overlap( "SHOULD *NOT* SEE" ? 10 : 0, 10, 20, 10 ); 264647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt check_ptr_overlap( "SHOULD *NOT* SEE" ? 20 : 0, 10, 10, 10 ); 264747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 264847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // require's 264947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 265047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require( 0 && "SHOULD SEE", require1 ); 265147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { err = kResponseErr; goto exit; } 265247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire1: 265347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require( 1 && "SHOULD *NOT* SEE", require2 ); 265447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt goto require2Good; 265547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire2: 265647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { err = kResponseErr; goto exit; } 265747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire2Good: 265847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_string( 0 && "SHOULD SEE", require3, "SHOULD SEE: require_string" ); 265947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { err = kResponseErr; goto exit; } 266047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire3: 266147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_string( 1 && "SHOULD *NOT* SEE", require4, "SHOULD *NOT* SEE: require_string (valid)" ); 266247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt goto require4Good; 266347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire4: 266447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { err = kResponseErr; goto exit; } 266547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire4Good: 266647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_quiet( 0 && "SHOULD SEE", require5 ); 266747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { err = kResponseErr; goto exit; } 266847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire5: 266947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_quiet( 1 && "SHOULD *NOT* SEE", require6 ); 267047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt goto require6Good; 267147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire6: 267247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { err = kResponseErr; goto exit; } 267347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire6Good: 267447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_noerr( -1, require7 ); 267547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { err = kResponseErr; goto exit; } 267647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire7: 267747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_noerr( 0, require8 ); 267847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt goto require8Good; 267947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire8: 268047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { err = kResponseErr; goto exit; } 268147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire8Good: 268247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_noerr_string( -2, require9, "SHOULD SEE: require_noerr_string"); 268347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { err = kResponseErr; goto exit; } 268447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire9: 268547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_noerr_string( 0, require10, "SHOULD *NOT* SEE: require_noerr_string (valid)" ); 268647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt goto require10Good; 268747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire10: 268847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { err = kResponseErr; goto exit; } 268947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire10Good: 269047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_noerr_action_string( -3, require11, dlog( kDebugLevelMax, "action 1 (expected)\n" ), "require_noerr_action_string" ); 269147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { err = kResponseErr; goto exit; } 269247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire11: 269347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_noerr_action_string( 0, require12, dlog( kDebugLevelMax, "action 2\n" ), "require_noerr_action_string (valid)" ); 269447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt goto require12Good; 269547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire12: 269647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { err = kResponseErr; goto exit; } 269747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire12Good: 269847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_noerr_quiet( -4, require13 ); 269947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { err = kResponseErr; goto exit; } 270047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire13: 270147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_noerr_quiet( 0, require14 ); 270247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt goto require14Good; 270347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire14: 270447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { err = kResponseErr; goto exit; } 270547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire14Good: 270647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_noerr_action( -5, require15, dlog( kDebugLevelMax, "SHOULD SEE: action 3 (expected)\n" ) ); 270747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { err = kResponseErr; goto exit; } 270847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire15: 270947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_noerr_action( 0, require16, dlog( kDebugLevelMax, "SHOULD *NOT* SEE: action 4\n" ) ); 271047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt goto require16Good; 271147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire16: 271247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { err = kResponseErr; goto exit; } 271347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire16Good: 271447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_noerr_action_quiet( -4, require17, dlog( kDebugLevelMax, "SHOULD SEE: action 5 (expected)\n" ) ); 271547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { err = kResponseErr; goto exit; } 271647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire17: 271747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_noerr_action_quiet( 0, require18, dlog( kDebugLevelMax, "SHOULD *NOT* SEE: action 6\n" ) ); 271847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt goto require18Good; 271947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire18: 272047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { err = kResponseErr; goto exit; } 272147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire18Good: 272247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( 0 && "SHOULD SEE", require19, dlog( kDebugLevelMax, "SHOULD SEE: action 7 (expected)\n" ) ); 272347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { err = kResponseErr; goto exit; } 272447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire19: 272547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( 1 && "SHOULD *NOT* SEE", require20, dlog( kDebugLevelMax, "SHOULD *NOT* SEE: action 8\n" ) ); 272647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt goto require20Good; 272747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire20: 272847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { err = kResponseErr; goto exit; } 272947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire20Good: 273047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action_quiet( 0, require21, dlog( kDebugLevelMax, "SHOULD SEE: action 9 (expected)\n" ) ); 273147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { err = kResponseErr; goto exit; } 273247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire21: 273347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action_quiet( 1, require22, dlog( kDebugLevelMax, "SHOULD *NOT* SEE: action 10\n" ) ); 273447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt goto require22Good; 273547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire22: 273647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { err = kResponseErr; goto exit; } 273747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire22Good: 273847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action_string( 0, require23, dlog( kDebugLevelMax, "SHOULD SEE: action 11 (expected)\n" ), "SHOULD SEE: require_action_string" ); 273947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { err = kResponseErr; goto exit; } 274047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire23: 274147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action_string( 1, require24, dlog( kDebugLevelMax, "SHOULD *NOT* SEE: action 12\n" ), "SHOULD *NOT* SEE: require_action_string" ); 274247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt goto require24Good; 274347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire24: 274447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { err = kResponseErr; goto exit; } 274547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire24Good: 274647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 274747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( defined( __MWERKS__ ) ) 274847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #if( defined( __cplusplus ) && __option( exceptions ) ) 274947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #define COMPILER_HAS_EXCEPTIONS 1 275047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #else 275147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #define COMPILER_HAS_EXCEPTIONS 0 275247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #endif 275347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#else 275447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #if( defined( __cplusplus ) ) 275547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #define COMPILER_HAS_EXCEPTIONS 1 275647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #else 275747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #define COMPILER_HAS_EXCEPTIONS 0 275847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #endif 275947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 276047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 276147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#if( COMPILER_HAS_EXCEPTIONS ) 276247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt try 276347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 276447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_throw( 1 && "SHOULD *NOT* SEE" ); 276547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_throw( 0 && "SHOULD SEE" ); 276647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 276747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt catch( ... ) 276847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 276947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt goto require26Good; 277047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 277147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { err = kResponseErr; goto exit; } 277247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltrequire26Good: 277347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif 277447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 277547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // translate_errno 277647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 277747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = translate_errno( 1 != -1, -123, -567 ); 277847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require( ( err == 0 ) && "SHOULD *NOT* SEE", exit ); 277947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 278047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = translate_errno( -1 != -1, -123, -567 ); 278147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require( ( err == -123 ) && "SHOULD *NOT* SEE", exit ); 278247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 278347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = translate_errno( -1 != -1, 0, -567 ); 278447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require( ( err == -567 ) && "SHOULD *NOT* SEE", exit ); 278547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 278647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // debug_string 278747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 278847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt debug_string( "debug_string" ); 278947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 279047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // DebugSNPrintF 279147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 279247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF( s, sizeof( s ), "%d", 1234 ); 279347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "1234" ) == 0, exit, err = -1 ); 279447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 279547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF( s, sizeof( s ), "%X", 0x2345 ); 279647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "2345" ) == 0, exit, err = -1 ); 279747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 279847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF( s, sizeof( s ), "%#s", "\05test" ); 279947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "test" ) == 0, exit, err = -1 ); 280047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 280147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF( s, sizeof( s ), "%##s", "\03www\05apple\03com" ); 280247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "www.apple.com." ) == 0, exit, err = -1 ); 280347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 280447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF( s, sizeof( s ), "%ld", (long) INT32_C( 2147483647 ) ); 280547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "2147483647" ) == 0, exit, err = -1 ); 280647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 280747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF( s, sizeof( s ), "%lu", (unsigned long) UINT32_C( 4294967295 ) ); 280847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "4294967295" ) == 0, exit, err = -1 ); 280947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 281047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #if( TYPE_LONGLONG_NATIVE ) 281147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF( s, sizeof( s ), "%lld", (long_long_compat) INT64_C( 9223372036854775807 ) ); 281247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "9223372036854775807" ) == 0, exit, err = -1 ); 281347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 281447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF( s, sizeof( s ), "%lld", (long_long_compat) INT64_C( -9223372036854775807 ) ); 281547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "-9223372036854775807" ) == 0, exit, err = -1 ); 281647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 281747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF( s, sizeof( s ), "%llu", (unsigned_long_long_compat) UINT64_C( 18446744073709551615 ) ); 281847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "18446744073709551615" ) == 0, exit, err = -1 ); 281947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #endif 282047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 282147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF( s, sizeof( s ), "%lb", (unsigned long) binary_32( 01111011, 01111011, 01111011, 01111011 ) ); 282247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "1111011011110110111101101111011" ) == 0, exit, err = -1 ); 282347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 282447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF( s, sizeof( s ), "%C", 0x41624364 ); // 'AbCd' 282547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "AbCd" ) == 0, exit, err = -1 ); 282647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 282747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #if( defined( MDNS_DEBUGMSGS ) ) 282847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 282947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt mDNSAddr maddr; 283047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 283147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt memset( &maddr, 0, sizeof( maddr ) ); 283247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt maddr.type = mDNSAddrType_IPv4; 283347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt maddr.ip.v4.b[ 0 ] = 127; 283447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt maddr.ip.v4.b[ 1 ] = 0; 283547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt maddr.ip.v4.b[ 2 ] = 0; 283647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt maddr.ip.v4.b[ 3 ] = 1; 283747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF( s, sizeof( s ), "%#a", &maddr ); 283847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "127.0.0.1" ) == 0, exit, err = -1 ); 283947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 284047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt memset( &maddr, 0, sizeof( maddr ) ); 284147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt maddr.type = mDNSAddrType_IPv6; 284247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt maddr.ip.v6.b[ 0 ] = 0xFE; 284347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt maddr.ip.v6.b[ 1 ] = 0x80; 284447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt maddr.ip.v6.b[ 15 ] = 0x01; 284547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF( s, sizeof( s ), "%#a", &maddr ); 284647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "FE80:0000:0000:0000:0000:0000:0000:0001" ) == 0, exit, err = -1 ); 284747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 284847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #endif 284947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 285047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #if( AF_INET ) 285147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 285247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt struct sockaddr_in sa4; 285347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 285447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt memset( &sa4, 0, sizeof( sa4 ) ); 285547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt sa4.sin_family = AF_INET; 285647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt p = (uint8_t *) &sa4.sin_port; 285747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt p[ 0 ] = (uint8_t)( ( 80 >> 8 ) & 0xFF ); 285847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt p[ 1 ] = (uint8_t)( 80 & 0xFF ); 285947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt p = (uint8_t *) &sa4.sin_addr.s_addr; 286047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt p[ 0 ] = (uint8_t)( ( INADDR_LOOPBACK >> 24 ) & 0xFF ); 286147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt p[ 1 ] = (uint8_t)( ( INADDR_LOOPBACK >> 16 ) & 0xFF ); 286247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt p[ 2 ] = (uint8_t)( ( INADDR_LOOPBACK >> 8 ) & 0xFF ); 286347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt p[ 3 ] = (uint8_t)( INADDR_LOOPBACK & 0xFF ); 286447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF( s, sizeof( s ), "%##a", &sa4 ); 286547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "127.0.0.1:80" ) == 0, exit, err = -1 ); 286647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 286747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #endif 286847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 286947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #if( AF_INET6 ) 287047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 287147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt struct sockaddr_in6 sa6; 287247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 287347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt memset( &sa6, 0, sizeof( sa6 ) ); 287447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt sa6.sin6_family = AF_INET6; 287547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt p = (uint8_t *) &sa6.sin6_port; 287647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt p[ 0 ] = (uint8_t)( ( 80 >> 8 ) & 0xFF ); 287747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt p[ 1 ] = (uint8_t)( 80 & 0xFF ); 287847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt sa6.sin6_addr.s6_addr[ 0 ] = 0xFE; 287947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt sa6.sin6_addr.s6_addr[ 1 ] = 0x80; 288047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt sa6.sin6_addr.s6_addr[ 15 ] = 0x01; 288147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt sa6.sin6_scope_id = 2; 288247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF( s, sizeof( s ), "%##a", &sa6 ); 288347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "[FE80:0000:0000:0000:0000:0000:0000:0001%2]:80" ) == 0, exit, err = -1 ); 288447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 288547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #endif 288647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 288747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Unicode 288847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 288947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF(s, sizeof(s), "%.*s", 4, "tes" ); 289047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "tes" ) == 0, exit, err = kResponseErr ); 289147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 289247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF(s, sizeof(s), "%.*s", 4, "test" ); 289347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "test" ) == 0, exit, err = kResponseErr ); 289447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 289547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF(s, sizeof(s), "%.*s", 4, "testing" ); 289647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "test" ) == 0, exit, err = kResponseErr ); 289747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 289847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF(s, sizeof(s), "%.*s", 4, "te\xC3\xA9" ); 289947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "te\xC3\xA9" ) == 0, exit, err = kResponseErr ); 290047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 290147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF(s, sizeof(s), "%.*s", 4, "te\xC3\xA9ing" ); 290247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "te\xC3\xA9" ) == 0, exit, err = kResponseErr ); 290347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 290447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF(s, sizeof(s), "%.*s", 4, "tes\xC3\xA9ing" ); 290547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "tes" ) == 0, exit, err = kResponseErr ); 290647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 290747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF(s, sizeof(s), "%.*s", 4, "t\xed\x9f\xbf" ); 290847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "t\xed\x9f\xbf" ) == 0, exit, err = kResponseErr ); 290947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 291047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF(s, sizeof(s), "%.*s", 4, "t\xed\x9f\xbfing" ); 291147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "t\xed\x9f\xbf" ) == 0, exit, err = kResponseErr ); 291247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 291347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF(s, sizeof(s), "%.*s", 4, "te\xed\x9f\xbf" ); 291447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "te" ) == 0, exit, err = kResponseErr ); 291547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 291647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF(s, sizeof(s), "%.*s", 4, "te\xed\x9f\xbfing" ); 291747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "te" ) == 0, exit, err = kResponseErr ); 291847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 291947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF(s, sizeof(s), "%.*s", 7, "te\xC3\xA9\xed\x9f\xbfing" ); 292047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "te\xC3\xA9\xed\x9f\xbf" ) == 0, exit, err = kResponseErr ); 292147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 292247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF(s, sizeof(s), "%.*s", 6, "te\xC3\xA9\xed\x9f\xbfing" ); 292347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "te\xC3\xA9" ) == 0, exit, err = kResponseErr ); 292447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 292547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF(s, sizeof(s), "%.*s", 5, "te\xC3\xA9\xed\x9f\xbfing" ); 292647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "te\xC3\xA9" ) == 0, exit, err = kResponseErr ); 292747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 292847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #if( TARGET_RT_BIG_ENDIAN ) 292947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF( s, sizeof( s ), "%S", "\x00" "a" "\x00" "b" "\x00" "c" "\x00" "d" "\x00" "\x00" ); 293047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "abcd" ) == 0, exit, err = -1 ); 293147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #else 293247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF( s, sizeof( s ), "%S", "a" "\x00" "b" "\x00" "c" "\x00" "d" "\x00" "\x00" "\x00" ); 293347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "abcd" ) == 0, exit, err = -1 ); 293447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #endif 293547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 293647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF( s, sizeof( s ), "%S", 293747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "\xFE\xFF" "\x00" "a" "\x00" "b" "\x00" "c" "\x00" "d" "\x00" "\x00" ); // Big Endian BOM 293847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "abcd" ) == 0, exit, err = -1 ); 293947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 294047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF( s, sizeof( s ), "%S", 294147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "\xFF\xFE" "a" "\x00" "b" "\x00" "c" "\x00" "d" "\x00" "\x00" "\x00" ); // Little Endian BOM 294247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "abcd" ) == 0, exit, err = -1 ); 294347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 294447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF( s, sizeof( s ), "%#S", "\x00" "a" "\x00" "b" "\x00" "c" "\x00" "d" "\x00" "\x00" ); // Big Endian 294547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "abcd" ) == 0, exit, err = -1 ); 294647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 294747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF( s, sizeof( s ), "%##S", "a" "\x00" "b" "\x00" "c" "\x00" "d" "\x00" "\x00" "\x00" ); // Little Endian 294847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "abcd" ) == 0, exit, err = -1 ); 294947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 295047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF( s, sizeof( s ), "%.*S", 295147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 4, "\xFE\xFF" "\x00" "a" "\x00" "b" "\x00" "c" "\x00" "d" ); // Big Endian BOM 295247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "abc" ) == 0, exit, err = -1 ); 295347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 295447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF( s, sizeof( s ), "%.*S", 295547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 4, "\xFF\xFE" "a" "\x00" "b" "\x00" "c" "\x00" "d" "\x00" ); // Little Endian BOM 295647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "abc" ) == 0, exit, err = -1 ); 295747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 295847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #if( TARGET_RT_BIG_ENDIAN ) 295947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF( s, sizeof( s ), "%.*S", 3, "\x00" "a" "\x00" "b" "\x00" "c" "\x00" "d" ); 296047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "abc" ) == 0, exit, err = -1 ); 296147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #else 296247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF( s, sizeof( s ), "%.*S", 3, "a" "\x00" "b" "\x00" "c" "\x00" "d" "\x00" ); 296347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "abc" ) == 0, exit, err = -1 ); 296447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt #endif 296547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 296647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF( s, sizeof( s ), "%#.*S", 3, "\x00" "a" "\x00" "b" "\x00" "c" "\x00" "d" ); // Big Endian 296747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "abc" ) == 0, exit, err = -1 ); 296847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 296947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF( s, sizeof( s ), "%##.*S", 3, "a" "\x00" "b" "\x00" "c" "\x00" "d" "\x00" ); // Little Endian 297047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "abc" ) == 0, exit, err = -1 ); 297147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 297247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Misc 297347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 297447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF( s, sizeof( s ), "%U", "\x10\xb8\xa7\x6b" "\xad\x9d" "\xd1\x11" "\x80\xb4" "\x00\xc0\x4f\xd4\x30\xc8" ); 297547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "6ba7b810-9dad-11d1-80b4-00c04fd430c8" ) == 0, exit, err = -1 ); 297647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 297747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF( s, sizeof( s ), "%m", 0 ); 297847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "no error" ) == 0, exit, err = -1 ); 297947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 298047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF( s, sizeof( s ), "%lm", (long) 0 ); 298147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt require_action( strcmp( s, "no error" ) == 0, exit, err = -1 ); 298247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 298347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF( s, sizeof( s ), "\"%H\"", "\x6b\xa7\xb8\x10\x9d\xad\x11\xd1\x80\xb4\x00\xc0\x4f\xd4\x30\xc8", 16, 16 ); 298447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugPrintF( kDebugLevelMax, "%s\n\n", s ); 298547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 298647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF( s, sizeof( s ), "\"%H\"", 298747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "\x6b\xa7\xb8\x10\x9d\xad\x11\xd1\x80\xb4\x00\xc0\x4f\xd4\x30\xc8" 298847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt "\x6b\xa7\xb8\x10\x9d\xad\x11\xd1\x80\xb4\x00\xc0\x4f\xd4\x30\xc8", 298947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 32, 32 ); 299047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugPrintF( kDebugLevelMax, "%s\n\n", s ); 299147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 299247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugSNPrintF( s, sizeof( s ), "\"%H\"", "\x6b\xa7", 2, 2 ); 299347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugPrintF( kDebugLevelMax, "%s\n\n", s ); 299447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 299547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Hex Dumps 299647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 299747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s[ 0 ] = '\0'; 299847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugHexDump( kDebugLevelMax, 0, "My Label", kSizeCString, 0, NULL, 0, data, data, sizeof( data ), 299947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt kDebugFlagsNone, s, sizeof( s ) ); 300047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugPrintF( kDebugLevelMax, "%s\n", s ); 300147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 300247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s[ 0 ] = '\0'; 300347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugHexDump( kDebugLevelMax, 0, NULL, 0, 0, NULL, 0, data, data, sizeof( data ), 300447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt kDebugFlagsNoAddress | kDebugFlagsNoOffset, s, sizeof( s ) ); 300547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugPrintF( kDebugLevelMax, "%s\n", s ); 300647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 300747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s[ 0 ] = '\0'; 300847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugHexDump( kDebugLevelMax, 0, "My Label", kSizeCString, 0, NULL, 0, data, data, sizeof( data ), 300947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt kDebugFlagsNoAddress | kDebugFlagsNoOffset, s, sizeof( s ) ); 301047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugPrintF( kDebugLevelMax, "%s\n", s ); 301147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 301247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s[ 0 ] = '\0'; 301347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugHexDump( kDebugLevelMax, 0, "My Label", kSizeCString, 0, NULL, 0, data, data, sizeof( data ), 301447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt kDebugFlagsNoAddress, s, sizeof( s ) ); 301547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugPrintF( kDebugLevelMax, "%s\n", s ); 301647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 301747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s[ 0 ] = '\0'; 301847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugHexDump( kDebugLevelMax, 0, NULL, 0, 0, NULL, 0, data, data, sizeof( data ), 301947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt kDebugFlagsNoOffset, s, sizeof( s ) ); 302047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugPrintF( kDebugLevelMax, "%s\n", s ); 302147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 302247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s[ 0 ] = '\0'; 302347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugHexDump( kDebugLevelMax, 0, NULL, 0, 0, NULL, 0, data, data, sizeof( data ), 302447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt kDebugFlagsNoAddress, s, sizeof( s ) ); 302547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugPrintF( kDebugLevelMax, "%s\n", s ); 302647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 302747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s[ 0 ] = '\0'; 302847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugHexDump( kDebugLevelMax, 0, NULL, 0, 0, NULL, 0, data, data, sizeof( data ), 302947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt kDebugFlagsNoOffset, s, sizeof( s ) ); 303047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugPrintF( kDebugLevelMax, "%s\n", s ); 303147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 303247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s[ 0 ] = '\0'; 303347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugHexDump( kDebugLevelMax, 0, NULL, 0, 0, NULL, 0, data, data, sizeof( data ), 303447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt kDebugFlagsNoByteCount, s, sizeof( s ) ); 303547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugPrintF( kDebugLevelMax, "%s\n", s ); 303647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 303747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s[ 0 ] = '\0'; 303847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugHexDump( kDebugLevelMax, 0, NULL, 0, 0, NULL, 0, "\x41\x62\x43\x64", "\x41\x62\x43\x64", 4, // 'AbCd' 303947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt kDebugFlagsNoAddress | kDebugFlagsNoOffset | kDebugFlagsNoNewLine | 304047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt kDebugFlagsNo32BitSeparator | kDebugFlagsNo16ByteHexPad | kDebugFlagsNoByteCount, 304147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s, sizeof( s ) ); 304247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugPrintF( kDebugLevelMax, "%s\n", s ); 304347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 304447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s[ 0 ] = '\0'; 304547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugHexDump( kDebugLevelMax, 0, NULL, 0, 0, NULL, 0, data, data, sizeof( data ), 304647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt kDebugFlagsNoAddress | kDebugFlagsNoOffset | kDebugFlagsNoASCII | kDebugFlagsNoNewLine | 304747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt kDebugFlags16BitSeparator | kDebugFlagsNo32BitSeparator | 304847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt kDebugFlagsNo16ByteHexPad | kDebugFlagsNoByteCount, s, sizeof( s ) ); 304947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugPrintF( kDebugLevelMax, "%s\n", s ); 305047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 305147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt s[ 0 ] = '\0'; 305247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugHexDump( kDebugLevelMax, 8, NULL, 0, 0, NULL, 0, data, data, sizeof( data ), kDebugFlagsNone, s, sizeof( s ) ); 305347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugPrintF( kDebugLevelMax, "%s\n", s ); 305447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 305547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // dlog's 305647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 305747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt dlog( kDebugLevelNotice, "dlog\n" ); 305847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt dlog( kDebugLevelNotice, "dlog integer: %d\n", 123 ); 305947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt dlog( kDebugLevelNotice, "dlog string: \"%s\"\n", "test string" ); 306047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt dlogmem( kDebugLevelNotice, data, sizeof( data ) ); 306147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 306247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt // Done 306347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 306447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugPrintF( kDebugLevelMax, "\n\nALL TESTS DONE\n\n" ); 306547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt err = kNoErr; 306647e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 306747e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwaltexit: 306847e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt if( err ) 306947e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt { 307047e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt DebugPrintF( kDebugLevelMax, "\n\n### TEST FAILED ###\n\n" ); 307147e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt } 307247e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt return( err ); 307347e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt} 307447e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt 307547e4cebad7397422144bb03a21f3f7682c062c4aRobert Greenwalt#endif // DEBUG 3076