diff --git a/ChangeLog b/ChangeLog index 50e7461a0..33da7380c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,27 @@ +2002-04-18 David Turner + + * src/base/ftobjs.c, builds/win32/ftdebug.c, + builds/amiga/src/base/ftdebug.c : + + 2.1.0 couldn't be linked against applications in Win32 and + Amiga builds due to changes to "src/base/ftdebug.c" that + were not properly propagated to "builds/win32" and + "builds/amiga".. + + this has been fixed. We'll probably make 2.1.1 real + soon now.. + + + * include/freetype/internal/ftobject.h, + include/freetype/internal/ftexcept.h, + include/freetype/ftsysmem.h, + include/freetype/ftsysio.h, + src/base/ftsysmem.c, + src/base/ftsysio.c: + + adding new experimental files for 2.1.1 (or 2.1.2) + + 2002-04-17 David Turner diff --git a/builds/amiga/src/base/ftdebug.c b/builds/amiga/src/base/ftdebug.c index b270f7f94..e9a29d7e4 100644 --- a/builds/amiga/src/base/ftdebug.c +++ b/builds/amiga/src/base/ftdebug.c @@ -88,35 +88,94 @@ extern void __stdargs KVPrintF( const char *formatString, const void *values ); } -#ifdef FT_DEBUG_LEVEL_TRACE - FT_EXPORT_DEF( void ) - FT_SetTraceLevel( FT_Trace component, - char level ) + /* since I don't know wether "getenv" is available on the Amiga */ + /* I prefer to simply disable this code for now in all builds */ + /* */ + +/* #ifdef FT_DEBUG_LEVEL_TRACE */ +#if 0 + + FT_BASE_DEF( void ) + ft_debug_init( void ) { - if ( component >= trace_max ) - return; - - /* if component is `trace_any', change _all_ levels at once */ - if ( component == trace_any ) + const char* ft2_debug = getenv( "FT2_DEBUG" ); + + if ( ft2_debug ) { - int n; + const char* p = ft2_debug; + const char* q; + + for ( ; *p; p++ ) + { + /* skip leading whitespace and separators */ + if ( *p == ' ' || *p == '\t' || *p == ':' || *p == ';' || *p == '=' ) + continue; + + /* read toggle name, followed by '=' */ + q = p; + while ( *p && *p != '=' ) + p++; + + if ( *p == '=' && p > q ) + { + int n, i, len = p - q; + int level = -1, found = -1; + - for ( n = trace_any; n < trace_max; n++ ) - ft_trace_levels[n] = level; + for ( n = 0; n < trace_count; n++ ) + { + const char* toggle = ft_trace_toggles[n]; + + + for ( i = 0; i < len; i++ ) + { + if ( toggle[i] != q[i] ) + break; + } + + if ( i == len && toggle[i] == 0 ) + { + found = n; + break; + } + } + + /* read level */ + p++; + if ( *p ) + { + level = *p++ - '0'; + if ( level < 0 || level > 6 ) + level = -1; + } + + if ( found >= 0 && level >= 0 ) + { + if ( found == trace_any ) + { + /* special case for "any" */ + for ( n = 0; n < trace_count; n++ ) + ft_trace_levels[n] = level; + } + else + ft_trace_levels[found] = level; + } + } + } } - else /* otherwise, only change individual component */ - ft_trace_levels[component] = level; } -#endif /* FT_DEBUG_LEVEL_TRACE */ +#else /* !FT_DEBUG_LEVEL_TRACE */ -#endif /* FT_DEBUG_LEVEL_TRACE || FT_DEBUG_LEVEL_ERROR */ + FT_BASE_DEF( void ) + ft_debug_init( void ) + { + /* nothing */ + } - - /* ANSI C doesn't allow empty files, so we insert a dummy symbol */ - extern const int ft_debug_dummy; +#endif /* !FT_DEBUG_LEVEL_TRACE */ /* END */ diff --git a/builds/win32/ftdebug.c b/builds/win32/ftdebug.c index db0d36f4a..41a738c6e 100644 --- a/builds/win32/ftdebug.c +++ b/builds/win32/ftdebug.c @@ -45,12 +45,7 @@ #include FT_INTERNAL_DEBUG_H -#ifdef FT_DEBUG_LEVEL_TRACE - char ft_trace_levels[trace_max]; -#endif - - -#if defined( FT_DEBUG_LEVEL_ERROR ) || defined( FT_DEBUG_LEVEL_TRACE ) +#ifdef FT_DEBUG_LEVEL_ERROR #include @@ -90,35 +85,124 @@ } + + + #ifdef FT_DEBUG_LEVEL_TRACE - FT_EXPORT_DEF( void ) - FT_SetTraceLevel( FT_Trace component, - char level ) + /* array of trace levels, initialized to 0 */ + int ft_trace_levels[trace_count]; + + /* define array of trace toggle names */ +#define FT_TRACE_DEF(x) #x , + + static const char* ft_trace_toggles[trace_count + 1] = + { +#include FT_INTERNAL_TRACE_H + NULL + }; + +#undef FT_TRACE_DEF + + + /*************************************************************************/ + /* */ + /* Initialize the tracing sub-system. This is done by retrieving the */ + /* value of the "FT2_DEBUG" environment variable. It must be a list of */ + /* toggles, separated by spaces, `;' or `:'. Example: */ + /* */ + /* "any=3 memory=6 stream=5" */ + /* */ + /* This will request that all levels be set to 3, except the trace level */ + /* for the memory and stream components which are set to 6 and 5, */ + /* respectively. */ + /* */ + /* See the file for details of the */ + /* available toggle names. */ + /* */ + /* The level must be between 0 and 6; 0 means quiet (except for serious */ + /* runtime errors), and 6 means _very_ verbose. */ + /* */ + FT_BASE_DEF( void ) + ft_debug_init( void ) { - if ( component >= trace_max ) - return; - - /* if component is `trace_any', change _all_ levels at once */ - if ( component == trace_any ) + const char* ft2_debug = getenv( "FT2_DEBUG" ); + + if ( ft2_debug ) { - int n; + const char* p = ft2_debug; + const char* q; + + for ( ; *p; p++ ) + { + /* skip leading whitespace and separators */ + if ( *p == ' ' || *p == '\t' || *p == ':' || *p == ';' || *p == '=' ) + continue; + + /* read toggle name, followed by '=' */ + q = p; + while ( *p && *p != '=' ) + p++; + + if ( *p == '=' && p > q ) + { + int n, i, len = p - q; + int level = -1, found = -1; + - for ( n = trace_any; n < trace_max; n++ ) - ft_trace_levels[n] = level; + for ( n = 0; n < trace_count; n++ ) + { + const char* toggle = ft_trace_toggles[n]; + + + for ( i = 0; i < len; i++ ) + { + if ( toggle[i] != q[i] ) + break; + } + + if ( i == len && toggle[i] == 0 ) + { + found = n; + break; + } + } + + /* read level */ + p++; + if ( *p ) + { + level = *p++ - '0'; + if ( level < 0 || level > 6 ) + level = -1; + } + + if ( found >= 0 && level >= 0 ) + { + if ( found == trace_any ) + { + /* special case for "any" */ + for ( n = 0; n < trace_count; n++ ) + ft_trace_levels[n] = level; + } + else + ft_trace_levels[found] = level; + } + } + } } - else /* otherwise, only change individual component */ - ft_trace_levels[component] = level; } -#endif /* FT_DEBUG_LEVEL_TRACE */ +#else /* !FT_DEBUG_LEVEL_TRACE */ -#endif /* FT_DEBUG_LEVEL_TRACE || FT_DEBUG_LEVEL_ERROR */ + FT_BASE_DEF( void ) + ft_debug_init( void ) + { + /* nothing */ + } - - /* ANSI C doesn't allow empty files, so we insert a dummy symbol */ - extern const int ft_debug_dummy; +#endif /* !FT_DEBUG_LEVEL_TRACE */ /* END */ diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c index 4e4a70bdb..18e25c4dd 100644 --- a/src/base/ftobjs.c +++ b/src/base/ftobjs.c @@ -2375,8 +2375,10 @@ if ( !memory ) return FT_Err_Invalid_Argument; +#ifdef FT_DEBUG_LEVEL_ERROR /* init debugging support */ ft_debug_init(); +#endif /* first of all, allocate the library object */ if ( FT_NEW( library ) )