* 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.
This commit is contained in:
parent
2acb963baf
commit
917a593780
54
ChangeLog
54
ChangeLog
|
@ -1,3 +1,9 @@
|
|||
2003-04-22 Werner Lemberg <wl@gnu.org>
|
||||
|
||||
* 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 <wl@gnu.org>
|
||||
|
||||
* src/cache/ftccache.c (ftc_cache_lookup): Remove shadow declaration
|
||||
|
@ -165,9 +171,10 @@
|
|||
|
||||
2003-02-25 David Turner <david@freetype.org>
|
||||
|
||||
* 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 <suzhe@turbolinux.com.cn>
|
||||
|
||||
* 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 <h.davies1@physics.ox.ac.uk>
|
||||
|
||||
|
@ -507,12 +516,12 @@
|
|||
* include/freetype/ftgzip.h: Correct the name of the controlling
|
||||
macro (was __FTXF86_H__ ...).
|
||||
|
||||
2002-11-27 Vincent Caron <v.caron@zerodeux.net>
|
||||
2002-11-27 Vincent Caron <v.caron@zerodeux.net>
|
||||
|
||||
* 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 <david@freetype.org>
|
||||
|
||||
|
@ -618,6 +627,9 @@
|
|||
|
||||
2002-10-31 David Turner <david@freetype.org>
|
||||
|
||||
* 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ò <ghibo@mandrakesoft.com>
|
||||
2002-10-22 Giuseppe Ghibò <ghibo@mandrakesoft.com>
|
||||
|
||||
* 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 <Antoine-Freetype@Leca-Marti.org>
|
||||
2001-12-25 Antoine Leca <Antoine-Freetype@Leca-Marti.org>
|
||||
|
||||
* 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 <slouken@devolution.com>
|
||||
2001-12-14 Sam Latinga <slouken@devolution.com>
|
||||
|
||||
* 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 <david@freetype.org>
|
||||
2001-06-28 David Turner <david@freetype.org>
|
||||
|
||||
* 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 <david@freetype.org>
|
||||
2001-06-27 David Turner <david@freetype.org>
|
||||
|
||||
* 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 <david@freetype.org>
|
||||
2001-06-22 David Turner <david@freetype.org>
|
||||
|
||||
* docs/PATENTS: Added patents disclaimer. This one was missing!
|
||||
|
||||
|
@ -5137,13 +5149,13 @@
|
|||
2001-04-02 Tom Kacvinsky <tkacvins@freetype.org>
|
||||
|
||||
* src/sfnt/ttload.c (TT_Load_Metrics): Fix an improper pointer
|
||||
dereference. Submitted by Herbert Duerr <duerr@sun.com>
|
||||
dereference. Submitted by Herbert Duerr <duerr@sun.com>.
|
||||
|
||||
2001-03-26 Tom Kacvinsky <tkacvins@freetype.org>
|
||||
|
||||
* 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 <glucas@sonalysts.com>
|
||||
compiler. Submitted by G.W. Lucas <glucas@sonalysts.com>.
|
||||
|
||||
2001-03-24 David Turner <david.turner@freetype.org>
|
||||
|
||||
|
@ -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 <svdwal@xs4all.nl>
|
||||
Submitted by Sander van der Wal <svdwal@xs4all.nl>.
|
||||
|
||||
* 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 <svdwal@xs4all.nl>
|
||||
Submitted by Sander van der Wal <svdwal@xs4all.nl>.
|
||||
|
||||
* src/cff/cffgload.c (CFF_Parse_CharStrings): Added support for
|
||||
deprecated operator "dotsection".
|
||||
Submitted by Sander van der Wal <svdwal@xs4all.nl>
|
||||
Submitted by Sander van der Wal <svdwal@xs4all.nl>.
|
||||
|
||||
2001-03-12 Werner Lemberg <wl@gnu.org>
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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,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 */
|
||||
|
|
Loading…
Reference in New Issue