ref: 917a5937802c48e089958b0923d8f9ab2d9d13ff
parent: 2acb963baf4a37f3d388ae6dd20aa83832d70d74
author: Werner Lemberg <[email protected]>
date: Wed Apr 23 03:13:54 EDT 2003
* src/gzip/ftgzip.c (zcalloc) [!FT_CONFIG_OPTION_SYSTEM_ZLIB]: Convert K&R format to modern C usage. (FT_Stream_OpenGzip): Use long constant. Cleanups.
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2003-04-22 Werner Lemberg <[email protected]>
+
+ * 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 <[email protected]>
* src/cache/ftccache.c (ftc_cache_lookup): Remove shadow declaration
@@ -165,9 +171,10 @@
2003-02-25 David Turner <[email protected]>
- * 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 <[email protected]>
- * 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 <[email protected]>
@@ -507,12 +516,12 @@
* include/freetype/ftgzip.h: Correct the name of the controlling
macro (was __FTXF86_H__ ...).
-2002-11-27 Vincent Caron <[email protected]>
+2002-11-27 Vincent Caron <[email protected]>
* 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 <[email protected]>
@@ -618,6 +627,9 @@
2002-10-31 David Turner <[email protected]>
+ * 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� <[email protected]>
+2002-10-22 Giuseppe Ghib� <[email protected]>
* 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 <[email protected]>
+2001-12-25 Antoine Leca <[email protected]>
* 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 <[email protected]>
+2001-12-14 Sam Latinga <[email protected]>
* 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 <[email protected]>
+2001-06-28 David Turner <[email protected]>
* 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 <[email protected]>
+2001-06-27 David Turner <[email protected]>
* 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 <[email protected]>
+2001-06-22 David Turner <[email protected]>
* docs/PATENTS: Added patents disclaimer. This one was missing!
@@ -5137,13 +5149,13 @@
2001-04-02 Tom Kacvinsky <[email protected]>
* src/sfnt/ttload.c (TT_Load_Metrics): Fix an improper pointer
- dereference. Submitted by Herbert Duerr <[email protected]>
+ dereference. Submitted by Herbert Duerr <[email protected]>.
2001-03-26 Tom Kacvinsky <[email protected]>
* 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 <[email protected]>
+ compiler. Submitted by G.W. Lucas <[email protected]>.
2001-03-24 David Turner <[email protected]>
@@ -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 <[email protected]>
+ Submitted by Sander van der Wal <[email protected]>.
* 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 <[email protected]>
+ Submitted by Sander van der Wal <[email protected]>.
* src/cff/cffgload.c (CFF_Parse_CharStrings): Added support for
deprecated operator "dotsection".
- Submitted by Sander van der Wal <[email protected]>
+ Submitted by Sander van der Wal <[email protected]>.
2001-03-12 Werner Lemberg <[email protected]>
--- 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,11 +158,12 @@
#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;
--- 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 <ft2build.h>
#include FT_INTERNAL_MEMORY_H
#include FT_INTERNAL_STREAM_H
@@ -29,35 +30,35 @@
#ifdef FT_CONFIG_OPTION_SYSTEM_ZLIB
-# include <zlib.h>
+#include <zlib.h>
-#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,7 +152,7 @@
#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 )
{
@@ -158,11 +159,12 @@
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,7 +359,6 @@
}
-
static FT_Error
ft_gzip_file_fill_output( FT_GZipFile zip )
{
@@ -358,6 +365,7 @@
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,20 +432,22 @@
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 */
@@ -442,7 +454,7 @@
if ( pos > zip->pos )
{
error = ft_gzip_file_skip_output( zip, (FT_ULong)( pos - zip->pos ) );
- if (error)
+ if ( error )
goto Exit;
}
@@ -452,8 +464,9 @@
/* now read the data */
for (;;)
{
- FT_ULong delta;
+ FT_ULong delta;
+
delta = (FT_ULong)( zip->limit - zip->cursor );
if ( delta >= count )
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 */