diff --git a/ChangeLog b/ChangeLog index 37734bc2a..e7eabe1e4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2003-04-22 Werner Lemberg + + * src/gzip/ftgzip.c (zcalloc) [!FT_CONFIG_OPTION_SYSTEM_ZLIB]: + Convert K&R format to modern C usage. + (FT_Stream_OpenGzip): Use long constant. + 2003-04-21 Werner Lemberg * src/cache/ftccache.c (ftc_cache_lookup): Remove shadow declaration @@ -165,9 +171,10 @@ 2003-02-25 David Turner - * src/gzip/ftgzip.c: Fixed a bug that caused FreeType to loop - endlessly when trying to read certain compressed gzip files. The - following test could be used to reveal the bug: + * src/gzip/ftgzip.c (ft_gzip_file_fill_output): Fixed a bug that + caused FreeType to loop endlessly when trying to read certain + compressed gzip files. The following test could be used to reveal + the bug: touch 0123456789 ; gzip 0123456789 ; ftdump 0123456789.gz @@ -216,7 +223,9 @@ * src/cff/cffgload.c (cff_slot_load) [FT_CONFIG_OPTION_INCREMENTAL]: Allow metrics to be overridden. - * src/cid/cidgload.c, src/truetype/ttgload.c, src/type1/t1gload.c + * src/cid/cidgload.c (cid_load_glyph) [FT_CONFIG_OPTION_INCREMENTAL]: + Ditto. + * src/truetype/ttgload.c, src/type1/t1gload.c [FT_CONFIG_OPTION_INCREMENTAL]: * include/freetype/ftincrem.h: Updated. @@ -311,8 +320,8 @@ 2003-01-15 James Su - * src/gzip/ftgzip.c: Bugfix: couldn't read certain gzip-ed font - files. + * src/gzip/ftgzip.c (ft_gzip_check_header): Bugfix: couldn't read + certain gzip-ed font files (typo: `&&' -> `&'). 2003-01-15 Huw D M Davies @@ -507,12 +516,12 @@ * include/freetype/ftgzip.h: Correct the name of the controlling macro (was __FTXF86_H__ ...). -2002-11-27 Vincent Caron +2002-11-27 Vincent Caron * builds/unix/unix-def.in, builds/unix/freetype-config.in, - builds/unix/configure.ac, src/gzip/rules.mk, src/gzip/ftgzip.c: - Adding support for system zlib installations if available on the - target platform (Unix only). + builds/unix/configure.ac, src/gzip/rules.mk, src/gzip/ftgzip.c + [FT_CONFIG_OPTION_SYSTEM_ZLIB]: Adding support for system zlib + installations if available on the target platform (Unix only). 2002-11-23 David Turner @@ -618,6 +627,9 @@ 2002-10-31 David Turner + * src/gzip/*: New files, taken from the zlib package (except + ftgzip.c). + * include/freetype/ftgzip.h, src/gzip/ftgzip.c: New files, adding support for gzip compressed streams. * include/freetype/config/ftheader.h (FT_GZIP_H): New macro for @@ -649,7 +661,7 @@ * include/freetype/ftcache.h (FT_POINTER_TO_ULONG): New macro. (FTC_FACE_ID_HASH): Rewritten, using FT_POINTER_TO_ULONG. -2002-10-22 Giuseppe Ghibò +2002-10-22 Giuseppe Ghibò * include/freetype/freetype.h (FT_Encoding): Fix entry for latin-2. @@ -3721,7 +3733,7 @@ computation of auto-hinted glyphs. This noticeably improves the spacing of letters in KDE and Gnome. -2001-12-25 Antoine Leca +2001-12-25 Antoine Leca * builds/dos/detect.mk: Correcting the order for Borland compilers: 16-bit bcc was never selected, always overridden by 32-bit bcc32. @@ -3924,7 +3936,7 @@ * src/truetype/ttgload.c (load_truetype_glyph): Fixing crash when dealing with invalid fonts (i.e. glyph size < 10 bytes). -2001-12-14 Sam Latinga +2001-12-14 Sam Latinga * builds/mac/freetype.make: A new Makefile to build with MPW on MacOS classic. @@ -4603,7 +4615,7 @@ * src/psaux/psobjs.c (T1_Decrypt): Ditto. * src/type1/t1parse.c (T1_Get_Private_Dict): Ditto. -2001-06-28 David Turner +2001-06-28 David Turner * include/internal/ftstream.h: Modified the definitions of the FT_GET_XXXX and NEXT_XXXX macros for 16-bit correctness. @@ -4624,7 +4636,7 @@ ========================= -2001-06-27 David Turner +2001-06-27 David Turner * builds/unix/ftconfig.in: Changed the definition of the FT_CALLBACK_DEF macro. @@ -4653,7 +4665,7 @@ * debian/*: Added Debian package build directory for 2.0.4. -2001-06-22 David Turner +2001-06-22 David Turner * docs/PATENTS: Added patents disclaimer. This one was missing! @@ -5137,13 +5149,13 @@ 2001-04-02 Tom Kacvinsky * src/sfnt/ttload.c (TT_Load_Metrics): Fix an improper pointer - dereference. Submitted by Herbert Duerr + dereference. Submitted by Herbert Duerr . 2001-03-26 Tom Kacvinsky * include/freetype/config/ftconfig.h: Changed hexadecimal constants to use suffix U to avoid problems with HP-UX's c89 - compiler. Submitted by G.W. Lucas + compiler. Submitted by G.W. Lucas . 2001-03-24 David Turner @@ -5232,17 +5244,17 @@ (cff_get_interface): Added support for getting a glyph name via the "glyph_name" module interface. Uses the new function get_cff_glyph_name(). - Submitted by Sander van der Wal + Submitted by Sander van der Wal . * src/cff/cffobjs.c (CFF_Init_Face): Logical or the face flags with FT_FACE_FLAG_GLYPH_NAMES only if FT_CONFIG_OPTION_NO_GLYPH_NAMES is not defined. This is to add support for getting a glyph name from a glyph index via FT_Get_Glyph_Name(). - Submitted by Sander van der Wal + Submitted by Sander van der Wal . * src/cff/cffgload.c (CFF_Parse_CharStrings): Added support for deprecated operator "dotsection". - Submitted by Sander van der Wal + Submitted by Sander van der Wal . 2001-03-12 Werner Lemberg diff --git a/src/cid/cidgload.c b/src/cid/cidgload.c index 15231f86c..9d953d5e3 100644 --- a/src/cid/cidgload.c +++ b/src/cid/cidgload.c @@ -4,7 +4,7 @@ /* */ /* CID-keyed Type1 Glyph Loader (body). */ /* */ -/* Copyright 1996-2001, 2002 by */ +/* Copyright 1996-2001, 2002, 2003 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -158,12 +158,13 @@ #ifdef FT_CONFIG_OPTION_INCREMENTAL /* Incremental fonts can optionally override the metrics. */ - if ( !error && - face->root.internal->incremental_interface && + if ( !error && + face->root.internal->incremental_interface && face->root.internal->incremental_interface->funcs->get_glyph_metrics ) { FT_Incremental_MetricsRec metrics; + metrics.bearing_x = decoder->builder.left_bearing.x; metrics.bearing_y = decoder->builder.left_bearing.y; metrics.advance = decoder->builder.advance.x; diff --git a/src/gzip/ftgzip.c b/src/gzip/ftgzip.c index 45f934b19..c9bd4a51d 100644 --- a/src/gzip/ftgzip.c +++ b/src/gzip/ftgzip.c @@ -2,13 +2,13 @@ /* */ /* ftgzip.c */ /* */ -/* FreeType support for .gz compressed fileds */ +/* FreeType support for .gz compressed files. */ /* */ /* this optional component relies on zlib. It should mainly be used to */ /* parse compressed PCF fonts, as found with many X11 server */ /* distributions. */ /* */ -/* Copyright 2002 by */ +/* Copyright 2002, 2003 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ /* */ /* This file is part of the FreeType project, and may only be used, */ @@ -19,6 +19,7 @@ /* */ /***************************************************************************/ + #include #include FT_INTERNAL_MEMORY_H #include FT_INTERNAL_STREAM_H @@ -29,35 +30,35 @@ #ifdef FT_CONFIG_OPTION_SYSTEM_ZLIB -# include +#include -#else /* !SYSTEM_ZLIB */ +#else /* !FT_CONFIG_OPTION_SYSTEM_ZLIB */ - /* in this case, we include our own modified sources of the ZLib */ - /* within the "ftgzip" component. The modifications were necessary */ - /* to #include all files without conflicts, as well as preventing */ - /* the definition of "extern" functions that may cause linking */ - /* conflicts when a program is linked with both FreeType and the */ - /* original ZLib */ + /* In this case, we include our own modified sources of the ZLib */ + /* within the "ftgzip" component. The modifications were necessary */ + /* to #include all files without conflicts, as well as preventing */ + /* the definition of "extern" functions that may cause linking */ + /* conflicts when a program is linked with both FreeType and the */ + /* original ZLib. */ -# define NO_DUMMY_DECL -# define BUILDFIXED /* save code size */ -# define MY_ZCALLOC +#define NO_DUMMY_DECL +#define BUILDFIXED /* save code size */ +#define MY_ZCALLOC -# include "zlib.h" +#include "zlib.h" -# undef SLOW -# define SLOW 1 /* we can't use asm-optimized sources here !! */ +#undef SLOW +#define SLOW 1 /* we can't use asm-optimized sources here !! */ -# include "zutil.c" -# include "inftrees.c" -# include "infcodes.c" -# include "infutil.c" -# include "infblock.c" -# include "inflate.c" -# include "adler32.c" +#include "zutil.c" +#include "inftrees.c" +#include "infcodes.c" +#include "infutil.c" +#include "infblock.c" +#include "inflate.c" +#include "adler32.c" -#endif /* !SYSTEM_ZLIB */ +#endif /* !FT_CONFIG_OPTION_SYSTEM_ZLIB */ /***************************************************************************/ @@ -68,48 +69,48 @@ /***************************************************************************/ /***************************************************************************/ - /* it's better to use FreeType memory routines instead of raw 'malloc/free' */ + /* it is better to use FreeType memory routines instead of raw + 'malloc/free' */ + + static voidpf + ft_gzip_alloc( FT_Memory memory, + uInt items, + uInt size ) + { + FT_ULong sz = (FT_ULong)size * items; + FT_Pointer p; - static voidpf - ft_gzip_alloc( FT_Memory memory, - uInt items, - uInt size ) - { - FT_ULong sz = (FT_ULong)size * items; - FT_Pointer p; + FT_MEM_ALLOC( p, sz ); - FT_MEM_ALLOC( p, sz ); - - return (voidpf) p; - } + return (voidpf) p; + } - static void - ft_gzip_free( FT_Memory memory, - voidpf address ) - { - FT_MEM_FREE( address ); - } + static void + ft_gzip_free( FT_Memory memory, + voidpf address ) + { + FT_MEM_FREE( address ); + } #ifndef FT_CONFIG_OPTION_SYSTEM_ZLIB - local voidpf - zcalloc ( /* opaque, items, size) */ - voidpf opaque, - unsigned items, - unsigned size ) - { - return ft_gzip_alloc( opaque, items, size ); - } + local voidpf + zcalloc ( voidpf opaque, + unsigned items, + unsigned size ) + { + return ft_gzip_alloc( opaque, items, size ); + } - local void - zcfree( voidpf opaque, - voidpf ptr ) - { - ft_gzip_free( opaque, ptr ); - } + local void + zcfree( voidpf opaque, + voidpf ptr ) + { + ft_gzip_free( opaque, ptr ); + } #endif /* !SYSTEM_ZLIB */ @@ -124,25 +125,25 @@ #define FT_GZIP_BUFFER_SIZE 4096 - typedef struct FT_GZipFileRec_ + typedef struct FT_GZipFileRec_ { - FT_Stream source; /* parent/source stream */ - FT_Stream stream; /* embedding stream */ - FT_Memory memory; /* memory allocator */ - z_stream zstream; /* zlib input stream */ + FT_Stream source; /* parent/source stream */ + FT_Stream stream; /* embedding stream */ + FT_Memory memory; /* memory allocator */ + z_stream zstream; /* zlib input stream */ - FT_ULong start; /* starting position, after .gz header */ - FT_Byte input[ FT_GZIP_BUFFER_SIZE ]; /* input read buffer */ + FT_ULong start; /* starting position, after .gz header */ + FT_Byte input[FT_GZIP_BUFFER_SIZE]; /* input read buffer */ - FT_Byte buffer[ FT_GZIP_BUFFER_SIZE ]; /* output buffer */ - FT_ULong pos; /* position in output */ - FT_Byte* cursor; - FT_Byte* limit; + FT_Byte buffer[FT_GZIP_BUFFER_SIZE]; /* output buffer */ + FT_ULong pos; /* position in output */ + FT_Byte* cursor; + FT_Byte* limit; } FT_GZipFileRec, *FT_GZipFile; -/* gzip flag byte */ + /* gzip flag byte */ #define FT_GZIP_ASCII_FLAG 0x01 /* bit 0 set: file probably ascii text */ #define FT_GZIP_HEAD_CRC 0x02 /* bit 1 set: header CRC present */ #define FT_GZIP_EXTRA_FIELD 0x04 /* bit 2 set: extra field present */ @@ -151,18 +152,19 @@ #define FT_GZIP_RESERVED 0xE0 /* bits 5..7: reserved */ - /* check and skip .gz header - we don't support "transparent" compression */ + /* check and skip .gz header - we don't support "transparent" compression */ static FT_Error ft_gzip_check_header( FT_Stream stream ) { FT_Error error; FT_Byte head[4]; + if ( FT_STREAM_SEEK( 0 ) || FT_STREAM_READ( head, 4 ) ) goto Exit; - /* head[0] && head[1] are the magic numbers */ + /* head[0] && head[1] are the magic numbers; */ /* head[2] is the method, and head[3] the flags */ if ( head[0] != 0x1f || head[1] != 0x8b || @@ -181,6 +183,7 @@ { FT_UInt len; + if ( FT_READ_USHORT_LE( len ) || FT_STREAM_SKIP( len ) ) goto Exit; @@ -192,7 +195,8 @@ { FT_UInt c; - if ( FT_READ_BYTE( c) ) + + if ( FT_READ_BYTE( c ) ) goto Exit; if ( c == 0 ) @@ -205,7 +209,8 @@ { FT_UInt c; - if ( FT_READ_BYTE( c) ) + + if ( FT_READ_BYTE( c ) ) goto Exit; if ( c == 0 ) @@ -222,15 +227,15 @@ } - static FT_Error - ft_gzip_file_init( FT_GZipFile zip, - FT_Stream stream, - FT_Stream source ) + ft_gzip_file_init( FT_GZipFile zip, + FT_Stream stream, + FT_Stream source ) { z_stream* zstream = &zip->zstream; FT_Error error = 0; + zip->stream = stream; zip->source = source; zip->memory = stream->memory; @@ -244,7 +249,7 @@ stream = source; error = ft_gzip_check_header( stream ); - if (error) + if ( error ) goto Exit; zip->start = FT_STREAM_POS(); @@ -270,7 +275,6 @@ } - static void ft_gzip_file_done( FT_GZipFile zip ) { @@ -299,10 +303,12 @@ FT_Stream stream = zip->source; FT_Error error; + if ( !FT_STREAM_SEEK( zip->start ) ) { z_stream* zstream = &zip->zstream; + inflateReset( zstream ); zstream->avail_in = 0; @@ -325,9 +331,11 @@ FT_Stream stream = zip->source; FT_ULong size; + if ( stream->read ) { - size = stream->read( stream, stream->pos, zip->input, FT_GZIP_BUFFER_SIZE ); + size = stream->read( stream, stream->pos, zip->input, + FT_GZIP_BUFFER_SIZE ); if ( size == 0 ) return FT_Err_Invalid_Stream_Operation; } @@ -338,7 +346,7 @@ size = FT_GZIP_BUFFER_SIZE; if ( size == 0 ) - return FT_Err_Invalid_Stream_Operation; + return FT_Err_Invalid_Stream_Operation; FT_MEM_COPY( zip->input, stream->base + stream->pos, size ); } @@ -351,13 +359,13 @@ } - static FT_Error ft_gzip_file_fill_output( FT_GZipFile zip ) { z_stream* zstream = &zip->zstream; FT_Error error = 0; + zip->cursor = zip->buffer; zstream->next_out = zip->cursor; zstream->avail_out = FT_GZIP_BUFFER_SIZE; @@ -366,6 +374,7 @@ { int err; + if ( zstream->avail_in == 0 ) { error = ft_gzip_file_fill_input( zip ); @@ -391,7 +400,7 @@ } - /* fill output buffer, 'count' must be <= FT_GZIP_BUFFER_SIZE */ + /* fill output buffer; `count' must be <= FT_GZIP_BUFFER_SIZE */ static FT_Error ft_gzip_file_skip_output( FT_GZipFile zip, FT_ULong count ) @@ -399,6 +408,7 @@ FT_Error error = 0; FT_ULong delta; + for (;;) { delta = (FT_ULong)( zip->limit - zip->cursor ); @@ -422,27 +432,29 @@ static FT_ULong - ft_gzip_file_io( FT_GZipFile zip, - FT_ULong pos, - FT_Byte* buffer, - FT_ULong count ) + ft_gzip_file_io( FT_GZipFile zip, + FT_ULong pos, + FT_Byte* buffer, + FT_ULong count ) { - FT_ULong result = 0; - FT_Error error; + FT_ULong result = 0; + FT_Error error; - /* reset inflate stream if we're seeking backwards */ - /* yes, that's not too efficient, but it saves memory :-) */ + + /* Reset inflate stream if we're seeking backwards. */ + /* Yes, that is not too efficient, but it saves memory :-) */ if ( pos < zip->pos ) { error = ft_gzip_file_reset( zip ); - if ( error ) goto Exit; + if ( error ) + goto Exit; } /* skip unwanted bytes */ if ( pos > zip->pos ) { error = ft_gzip_file_skip_output( zip, (FT_ULong)( pos - zip->pos ) ); - if (error) + if ( error ) goto Exit; } @@ -452,7 +464,8 @@ /* now read the data */ for (;;) { - FT_ULong delta; + FT_ULong delta; + delta = (FT_ULong)( zip->limit - zip->cursor ); if ( delta >= count ) @@ -469,7 +482,7 @@ break; error = ft_gzip_file_fill_output( zip ); - if (error) + if ( error ) break; } @@ -492,6 +505,7 @@ FT_GZipFile zip = stream->descriptor.pointer; FT_Memory memory = stream->memory; + if ( zip ) { /* finalize gzip file descriptor */ @@ -505,25 +519,27 @@ static FT_ULong - ft_gzip_stream_io( FT_Stream stream, - FT_ULong pos, - FT_Byte* buffer, - FT_ULong count ) + ft_gzip_stream_io( FT_Stream stream, + FT_ULong pos, + FT_Byte* buffer, + FT_ULong count ) { FT_GZipFile zip = stream->descriptor.pointer; + return ft_gzip_file_io( zip, pos, buffer, count ); } FT_EXPORT_DEF( FT_Error ) - FT_Stream_OpenGzip( FT_Stream stream, - FT_Stream source ) + FT_Stream_OpenGzip( FT_Stream stream, + FT_Stream source ) { FT_Error error; FT_Memory memory = source->memory; FT_GZipFile zip; + FT_ZERO( stream ); stream->memory = memory; @@ -539,7 +555,7 @@ stream->descriptor.pointer = zip; } - stream->size = 0x7FFFFFFF; /* don't know the real size !! */ + stream->size = 0x7FFFFFFFL; /* don't know the real size! */ stream->pos = 0; stream->base = 0; stream->read = ft_gzip_stream_io; @@ -552,8 +568,8 @@ #else /* !FT_CONFIG_OPTION_USE_ZLIB */ FT_EXPORT_DEF( FT_Error ) - FT_Stream_OpenGzip( FT_Stream stream, - FT_Stream source ) + FT_Stream_OpenGzip( FT_Stream stream, + FT_Stream source ) { FT_UNUSED( stream ); FT_UNUSED( source ); @@ -562,3 +578,6 @@ } #endif /* !FT_CONFIG_OPTION_USE_ZLIB */ + + +/* END */