2018-06-03 09:01:17 +02:00
|
|
|
/****************************************************************************
|
|
|
|
*
|
|
|
|
* ftsystem.c
|
|
|
|
*
|
|
|
|
* ANSI-specific FreeType low-level system interface (body).
|
|
|
|
*
|
2023-01-17 09:18:25 +01:00
|
|
|
* Copyright (C) 1996-2023 by
|
2018-06-03 09:01:17 +02:00
|
|
|
* David Turner, Robert Wilhelm, and Werner Lemberg.
|
|
|
|
*
|
|
|
|
* This file is part of the FreeType project, and may only be used,
|
|
|
|
* modified, and distributed under the terms of the FreeType project
|
|
|
|
* license, LICENSE.TXT. By continuing to use, modify, or distribute
|
|
|
|
* this file you indicate that you have read the license and
|
|
|
|
* understand and accept it fully.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**************************************************************************
|
|
|
|
*
|
|
|
|
* This file contains the default interface used by FreeType to access
|
|
|
|
* low-level, i.e. memory management, i/o access as well as thread
|
|
|
|
* synchronisation. It can be replaced by user-specific routines if
|
|
|
|
* necessary.
|
|
|
|
*
|
|
|
|
*/
|
2000-06-02 16:30:38 +02:00
|
|
|
|
2000-12-08 17:17:16 +01:00
|
|
|
|
|
|
|
#include <ft2build.h>
|
|
|
|
#include FT_CONFIG_CONFIG_H
|
2020-06-08 13:31:55 +02:00
|
|
|
#include <freetype/internal/ftdebug.h>
|
|
|
|
#include <freetype/internal/ftstream.h>
|
|
|
|
#include <freetype/ftsystem.h>
|
|
|
|
#include <freetype/fterrors.h>
|
|
|
|
#include <freetype/fttypes.h>
|
2000-02-29 18:11:53 +01:00
|
|
|
|
|
|
|
|
2018-06-03 09:01:17 +02:00
|
|
|
/**************************************************************************
|
|
|
|
*
|
|
|
|
* MEMORY MANAGEMENT INTERFACE
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**************************************************************************
|
|
|
|
*
|
|
|
|
* It is not necessary to do any error checking for the
|
|
|
|
* allocation-related functions. This will be done by the higher level
|
|
|
|
* routines like ft_mem_alloc() or ft_mem_realloc().
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
/**************************************************************************
|
|
|
|
*
|
|
|
|
* @Function:
|
|
|
|
* ft_alloc
|
|
|
|
*
|
|
|
|
* @Description:
|
|
|
|
* The memory allocation function.
|
|
|
|
*
|
|
|
|
* @Input:
|
|
|
|
* memory ::
|
|
|
|
* A pointer to the memory object.
|
|
|
|
*
|
|
|
|
* size ::
|
|
|
|
* The requested size in bytes.
|
|
|
|
*
|
|
|
|
* @Return:
|
|
|
|
* The address of newly allocated block.
|
|
|
|
*/
|
2001-06-27 18:18:10 +02:00
|
|
|
FT_CALLBACK_DEF( void* )
|
2001-06-27 11:26:46 +02:00
|
|
|
ft_alloc( FT_Memory memory,
|
2018-10-27 04:52:25 +02:00
|
|
|
long size )
|
2000-02-29 18:11:53 +01:00
|
|
|
{
|
2000-07-04 20:12:13 +02:00
|
|
|
FT_UNUSED( memory );
|
2000-02-29 18:11:53 +01:00
|
|
|
|
2018-10-27 04:52:25 +02:00
|
|
|
return ft_smalloc( (size_t)size );
|
2000-06-02 16:30:38 +02:00
|
|
|
}
|
2000-02-29 18:11:53 +01:00
|
|
|
|
|
|
|
|
2018-06-03 09:01:17 +02:00
|
|
|
/**************************************************************************
|
|
|
|
*
|
|
|
|
* @Function:
|
|
|
|
* ft_realloc
|
|
|
|
*
|
|
|
|
* @Description:
|
|
|
|
* The memory reallocation function.
|
|
|
|
*
|
|
|
|
* @Input:
|
|
|
|
* memory ::
|
|
|
|
* A pointer to the memory object.
|
|
|
|
*
|
|
|
|
* cur_size ::
|
|
|
|
* The current size of the allocated memory block.
|
|
|
|
*
|
|
|
|
* new_size ::
|
|
|
|
* The newly requested size in bytes.
|
|
|
|
*
|
|
|
|
* block ::
|
|
|
|
* The current address of the block in memory.
|
|
|
|
*
|
|
|
|
* @Return:
|
|
|
|
* The address of the reallocated memory block.
|
|
|
|
*/
|
2001-06-27 18:18:10 +02:00
|
|
|
FT_CALLBACK_DEF( void* )
|
2001-06-27 11:26:46 +02:00
|
|
|
ft_realloc( FT_Memory memory,
|
2018-10-27 04:52:25 +02:00
|
|
|
long cur_size,
|
|
|
|
long new_size,
|
2001-06-27 11:26:46 +02:00
|
|
|
void* block )
|
2000-02-29 18:11:53 +01:00
|
|
|
{
|
2000-07-04 20:12:13 +02:00
|
|
|
FT_UNUSED( memory );
|
|
|
|
FT_UNUSED( cur_size );
|
2000-02-29 18:11:53 +01:00
|
|
|
|
2018-10-27 04:52:25 +02:00
|
|
|
return ft_srealloc( block, (size_t)new_size );
|
2000-02-29 18:11:53 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2018-06-03 09:01:17 +02:00
|
|
|
/**************************************************************************
|
|
|
|
*
|
|
|
|
* @Function:
|
|
|
|
* ft_free
|
|
|
|
*
|
|
|
|
* @Description:
|
|
|
|
* The memory release function.
|
|
|
|
*
|
|
|
|
* @Input:
|
|
|
|
* memory ::
|
|
|
|
* A pointer to the memory object.
|
|
|
|
*
|
|
|
|
* block ::
|
|
|
|
* The address of block in memory to be freed.
|
|
|
|
*/
|
2001-06-27 18:18:10 +02:00
|
|
|
FT_CALLBACK_DEF( void )
|
2001-06-27 11:26:46 +02:00
|
|
|
ft_free( FT_Memory memory,
|
|
|
|
void* block )
|
2000-02-29 18:11:53 +01:00
|
|
|
{
|
2000-07-04 20:12:13 +02:00
|
|
|
FT_UNUSED( memory );
|
2000-06-02 16:30:38 +02:00
|
|
|
|
Further C library abstraction. Based on a patch from
msn2@bidyut.com.
* include/freetype/config/ftstdlib.h (FT_CHAR_BIT, FT_FILE,
ft_fopen, ft_fclose, ft_fseek, ft_ftell, ft_fread, ft_smalloc,
ft_scalloc, ft_srealloc, ft_sfree, ft_labs): New wrapper macros for
C library functions. Update all users accordingly (and catch some
other places where the C library function was used instead of the
wrapper functions).
* src/base/ftsystem.c: Don't include stdio.h and stdlib.h.
* src/gzip/zutil.h [MSDOS && !(__TURBOC__ || __BORLANDC__)]: Don't
include malloc.h.
2006-04-29 09:31:16 +02:00
|
|
|
ft_sfree( block );
|
2000-02-29 18:11:53 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2018-06-03 09:01:17 +02:00
|
|
|
/**************************************************************************
|
|
|
|
*
|
|
|
|
* RESOURCE MANAGEMENT INTERFACE
|
|
|
|
*
|
|
|
|
*/
|
2000-02-29 18:11:53 +01:00
|
|
|
|
2011-07-20 06:48:08 +02:00
|
|
|
#ifndef FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT
|
2000-02-29 18:11:53 +01:00
|
|
|
|
2018-06-03 09:01:17 +02:00
|
|
|
/**************************************************************************
|
|
|
|
*
|
|
|
|
* The macro FT_COMPONENT is used in trace mode. It is an implicit
|
|
|
|
* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log
|
|
|
|
* messages during execution.
|
|
|
|
*/
|
2000-06-02 23:31:32 +02:00
|
|
|
#undef FT_COMPONENT
|
2018-08-15 18:13:17 +02:00
|
|
|
#define FT_COMPONENT io
|
2000-06-02 23:31:32 +02:00
|
|
|
|
|
|
|
/* We use the macro STREAM_FILE for convenience to extract the */
|
|
|
|
/* system-specific stream handle from a given FreeType stream object */
|
Further C library abstraction. Based on a patch from
msn2@bidyut.com.
* include/freetype/config/ftstdlib.h (FT_CHAR_BIT, FT_FILE,
ft_fopen, ft_fclose, ft_fseek, ft_ftell, ft_fread, ft_smalloc,
ft_scalloc, ft_srealloc, ft_sfree, ft_labs): New wrapper macros for
C library functions. Update all users accordingly (and catch some
other places where the C library function was used instead of the
wrapper functions).
* src/base/ftsystem.c: Don't include stdio.h and stdlib.h.
* src/gzip/zutil.h [MSDOS && !(__TURBOC__ || __BORLANDC__)]: Don't
include malloc.h.
2006-04-29 09:31:16 +02:00
|
|
|
#define STREAM_FILE( stream ) ( (FT_FILE*)stream->descriptor.pointer )
|
2000-06-02 16:30:38 +02:00
|
|
|
|
|
|
|
|
2018-06-03 09:01:17 +02:00
|
|
|
/**************************************************************************
|
|
|
|
*
|
|
|
|
* @Function:
|
|
|
|
* ft_ansi_stream_close
|
|
|
|
*
|
|
|
|
* @Description:
|
|
|
|
* The function to close a stream.
|
|
|
|
*
|
|
|
|
* @Input:
|
|
|
|
* stream ::
|
|
|
|
* A pointer to the stream object.
|
|
|
|
*/
|
2001-06-27 18:18:10 +02:00
|
|
|
FT_CALLBACK_DEF( void )
|
2002-02-24 06:26:57 +01:00
|
|
|
ft_ansi_stream_close( FT_Stream stream )
|
2000-02-29 18:11:53 +01:00
|
|
|
{
|
Further C library abstraction. Based on a patch from
msn2@bidyut.com.
* include/freetype/config/ftstdlib.h (FT_CHAR_BIT, FT_FILE,
ft_fopen, ft_fclose, ft_fseek, ft_ftell, ft_fread, ft_smalloc,
ft_scalloc, ft_srealloc, ft_sfree, ft_labs): New wrapper macros for
C library functions. Update all users accordingly (and catch some
other places where the C library function was used instead of the
wrapper functions).
* src/base/ftsystem.c: Don't include stdio.h and stdlib.h.
* src/gzip/zutil.h [MSDOS && !(__TURBOC__ || __BORLANDC__)]: Don't
include malloc.h.
2006-04-29 09:31:16 +02:00
|
|
|
ft_fclose( STREAM_FILE( stream ) );
|
2000-06-02 23:31:32 +02:00
|
|
|
|
|
|
|
stream->descriptor.pointer = NULL;
|
|
|
|
stream->size = 0;
|
2015-04-11 05:45:11 +02:00
|
|
|
stream->base = NULL;
|
2000-02-29 18:11:53 +01:00
|
|
|
}
|
|
|
|
|
2000-06-02 16:30:38 +02:00
|
|
|
|
2018-06-03 09:01:17 +02:00
|
|
|
/**************************************************************************
|
|
|
|
*
|
|
|
|
* @Function:
|
|
|
|
* ft_ansi_stream_io
|
|
|
|
*
|
|
|
|
* @Description:
|
|
|
|
* The function to open a stream.
|
|
|
|
*
|
|
|
|
* @Input:
|
|
|
|
* stream ::
|
|
|
|
* A pointer to the stream object.
|
|
|
|
*
|
|
|
|
* offset ::
|
|
|
|
* The position in the data stream to start reading.
|
|
|
|
*
|
|
|
|
* buffer ::
|
|
|
|
* The address of buffer to store the read data.
|
|
|
|
*
|
|
|
|
* count ::
|
|
|
|
* The number of bytes to read from the stream.
|
|
|
|
*
|
|
|
|
* @Return:
|
|
|
|
* The number of bytes actually read. If `count' is zero (this is,
|
|
|
|
* the function is used for seeking), a non-zero return value
|
|
|
|
* indicates an error.
|
|
|
|
*/
|
2001-06-27 18:18:10 +02:00
|
|
|
FT_CALLBACK_DEF( unsigned long )
|
2002-02-24 06:26:57 +01:00
|
|
|
ft_ansi_stream_io( FT_Stream stream,
|
|
|
|
unsigned long offset,
|
|
|
|
unsigned char* buffer,
|
|
|
|
unsigned long count )
|
2000-02-29 18:11:53 +01:00
|
|
|
{
|
Further C library abstraction. Based on a patch from
msn2@bidyut.com.
* include/freetype/config/ftstdlib.h (FT_CHAR_BIT, FT_FILE,
ft_fopen, ft_fclose, ft_fseek, ft_ftell, ft_fread, ft_smalloc,
ft_scalloc, ft_srealloc, ft_sfree, ft_labs): New wrapper macros for
C library functions. Update all users accordingly (and catch some
other places where the C library function was used instead of the
wrapper functions).
* src/base/ftsystem.c: Don't include stdio.h and stdlib.h.
* src/gzip/zutil.h [MSDOS && !(__TURBOC__ || __BORLANDC__)]: Don't
include malloc.h.
2006-04-29 09:31:16 +02:00
|
|
|
FT_FILE* file;
|
2000-05-17 01:44:38 +02:00
|
|
|
|
2000-06-02 16:30:38 +02:00
|
|
|
|
* src/base/ftsystem.c (ft_ansi_stream_io): Avoid undefined behaviour.
Also short-circuit on `offset` to avoid checking `count` a second time when
`ft_ansi_stream_io` is used for reading.
Per ISO/IEC 9899:
If an argument to a function has an invalid value (such as a value outside
the domain of the function, or a pointer outside the address space of the
program, or a null pointer, or apointer to non-modifiable storage when the
corresponding parameter is not const-qualified) or a type (after
promotion) not expected by a function with variable number of arguments,
the behavior is undefined. If a function argument is described as being
an array, the pointer actually passed to the function shall have a value
such that all address computations and accesses to objects (that would be
valid if the pointer did point to the first element of such an array) are
in fact valid.
Per IEEE Std 1003.1:
size_t fread(void *restrict ptr, size_t size, size_t nitems,
FILE *restrict stream);
The `fread` function shall read into the array pointed to by `ptr` up to
`nitems` elements whose size is specified by `size` in bytes, from the
stream pointed to by `stream`.
Since the first argument to `fread` is described as being an array, its
behavior is undefined when that argument is a null pointer.
Per the documentation on `ft_ansi_stream_io`:
If `count' is zero (this is, the function is used for seeking), a non-zero
return value indicates an error.
Thus the intent is clear, and the call to `fread` can be skipped, avoiding
undefined behaviour.
2023-02-24 17:48:48 +01:00
|
|
|
if ( offset > stream->size && !count )
|
2010-06-26 09:24:08 +02:00
|
|
|
return 1;
|
|
|
|
|
2000-06-02 16:30:38 +02:00
|
|
|
file = STREAM_FILE( stream );
|
2000-02-29 18:11:53 +01:00
|
|
|
|
2009-08-03 19:55:58 +02:00
|
|
|
if ( stream->pos != offset )
|
2015-02-16 08:37:09 +01:00
|
|
|
ft_fseek( file, (long)offset, SEEK_SET );
|
2000-06-02 16:30:38 +02:00
|
|
|
|
* src/base/ftsystem.c (ft_ansi_stream_io): Avoid undefined behaviour.
Also short-circuit on `offset` to avoid checking `count` a second time when
`ft_ansi_stream_io` is used for reading.
Per ISO/IEC 9899:
If an argument to a function has an invalid value (such as a value outside
the domain of the function, or a pointer outside the address space of the
program, or a null pointer, or apointer to non-modifiable storage when the
corresponding parameter is not const-qualified) or a type (after
promotion) not expected by a function with variable number of arguments,
the behavior is undefined. If a function argument is described as being
an array, the pointer actually passed to the function shall have a value
such that all address computations and accesses to objects (that would be
valid if the pointer did point to the first element of such an array) are
in fact valid.
Per IEEE Std 1003.1:
size_t fread(void *restrict ptr, size_t size, size_t nitems,
FILE *restrict stream);
The `fread` function shall read into the array pointed to by `ptr` up to
`nitems` elements whose size is specified by `size` in bytes, from the
stream pointed to by `stream`.
Since the first argument to `fread` is described as being an array, its
behavior is undefined when that argument is a null pointer.
Per the documentation on `ft_ansi_stream_io`:
If `count' is zero (this is, the function is used for seeking), a non-zero
return value indicates an error.
Thus the intent is clear, and the call to `fread` can be skipped, avoiding
undefined behaviour.
2023-02-24 17:48:48 +01:00
|
|
|
/* Avoid calling `fread` with `buffer=NULL` and `count=0`, */
|
|
|
|
/* which is undefined behaviour. */
|
|
|
|
if ( !count )
|
|
|
|
return 0;
|
|
|
|
|
Further C library abstraction. Based on a patch from
msn2@bidyut.com.
* include/freetype/config/ftstdlib.h (FT_CHAR_BIT, FT_FILE,
ft_fopen, ft_fclose, ft_fseek, ft_ftell, ft_fread, ft_smalloc,
ft_scalloc, ft_srealloc, ft_sfree, ft_labs): New wrapper macros for
C library functions. Update all users accordingly (and catch some
other places where the C library function was used instead of the
wrapper functions).
* src/base/ftsystem.c: Don't include stdio.h and stdlib.h.
* src/gzip/zutil.h [MSDOS && !(__TURBOC__ || __BORLANDC__)]: Don't
include malloc.h.
2006-04-29 09:31:16 +02:00
|
|
|
return (unsigned long)ft_fread( buffer, 1, count, file );
|
2000-02-29 18:11:53 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
* builds/unix/ftsystem.c, include/freetype/config/ftheader.h,
include/freetype/internal/services/svotval.h,
include/freetype/internal/services/svpfr.h,
src/base/ftsystem.c, src/bdf/bdfdrivr.c, src/cache/ftcbasic.c,
src/cff/cffcmap.c, src/gzip/ftgzip.c, src/lzw/ftlzw.c,
src/lzw/ftlzw2.c, src/psaux/t1cmap.c, src/sfnt/ttbdf.c,
src/smooth/ftgrays.c:
solved -Wmissing-prototypes warnings with GCC
2006-02-25 15:53:02 +01:00
|
|
|
/* documentation is in ftstream.h */
|
2000-11-07 18:21:11 +01:00
|
|
|
|
* src/base/ftcalc.c (FT_MulTo64): Commented out.
* include/freetype/internal/ftcalc.h (FT_SqrtFixed), src/base/ftcalc.c
(FT_SqrtFixed), include/freetype/internal/ftdebug.h
(FT_Trace_Get_Count, FT_Trace_Get_Name, FT_Message, FT_Panic),
src/base/ftdebug.c (FT_Trace_Get_Count, FT_Trace_Get_Name, FT_Message,
FT_Panic), include/freetype/internal/ftobjs.h (FT_New_Memory,
FT_Done_Memory), include/freetype/internal/ftstream.h
(FT_Stream_Open), src/base/ftsystem.c (FT_New_Memory, FT_Done_Memory,
FT_Stream_Open): s/FT_EXPORT/FT_BASE/.
* builds/exports.mk: Manually add TT_New_Context to EXPORTS_LIST too.
2005-11-17 02:53:07 +01:00
|
|
|
FT_BASE_DEF( FT_Error )
|
2002-02-24 06:26:57 +01:00
|
|
|
FT_Stream_Open( FT_Stream stream,
|
|
|
|
const char* filepathname )
|
2000-02-29 18:11:53 +01:00
|
|
|
{
|
Further C library abstraction. Based on a patch from
msn2@bidyut.com.
* include/freetype/config/ftstdlib.h (FT_CHAR_BIT, FT_FILE,
ft_fopen, ft_fclose, ft_fseek, ft_ftell, ft_fread, ft_smalloc,
ft_scalloc, ft_srealloc, ft_sfree, ft_labs): New wrapper macros for
C library functions. Update all users accordingly (and catch some
other places where the C library function was used instead of the
wrapper functions).
* src/base/ftsystem.c: Don't include stdio.h and stdlib.h.
* src/gzip/zutil.h [MSDOS && !(__TURBOC__ || __BORLANDC__)]: Don't
include malloc.h.
2006-04-29 09:31:16 +02:00
|
|
|
FT_FILE* file;
|
2000-05-17 01:44:38 +02:00
|
|
|
|
2000-06-02 16:30:38 +02:00
|
|
|
|
2002-02-24 06:26:57 +01:00
|
|
|
if ( !stream )
|
2013-03-14 10:27:35 +01:00
|
|
|
return FT_THROW( Invalid_Stream_Handle );
|
2000-06-29 05:14:25 +02:00
|
|
|
|
2010-10-13 09:21:59 +02:00
|
|
|
stream->descriptor.pointer = NULL;
|
|
|
|
stream->pathname.pointer = (char*)filepathname;
|
2015-04-11 05:45:11 +02:00
|
|
|
stream->base = NULL;
|
2010-10-13 09:21:59 +02:00
|
|
|
stream->pos = 0;
|
|
|
|
stream->read = NULL;
|
|
|
|
stream->close = NULL;
|
|
|
|
|
Further C library abstraction. Based on a patch from
msn2@bidyut.com.
* include/freetype/config/ftstdlib.h (FT_CHAR_BIT, FT_FILE,
ft_fopen, ft_fclose, ft_fseek, ft_ftell, ft_fread, ft_smalloc,
ft_scalloc, ft_srealloc, ft_sfree, ft_labs): New wrapper macros for
C library functions. Update all users accordingly (and catch some
other places where the C library function was used instead of the
wrapper functions).
* src/base/ftsystem.c: Don't include stdio.h and stdlib.h.
* src/gzip/zutil.h [MSDOS && !(__TURBOC__ || __BORLANDC__)]: Don't
include malloc.h.
2006-04-29 09:31:16 +02:00
|
|
|
file = ft_fopen( filepathname, "rb" );
|
2000-06-02 16:30:38 +02:00
|
|
|
if ( !file )
|
2000-06-02 23:31:32 +02:00
|
|
|
{
|
2009-06-26 06:15:41 +02:00
|
|
|
FT_ERROR(( "FT_Stream_Open:"
|
|
|
|
" could not open `%s'\n", filepathname ));
|
2000-06-02 23:31:32 +02:00
|
|
|
|
2013-03-14 10:27:35 +01:00
|
|
|
return FT_THROW( Cannot_Open_Resource );
|
2000-06-02 23:31:32 +02:00
|
|
|
}
|
2000-05-17 01:44:38 +02:00
|
|
|
|
Further C library abstraction. Based on a patch from
msn2@bidyut.com.
* include/freetype/config/ftstdlib.h (FT_CHAR_BIT, FT_FILE,
ft_fopen, ft_fclose, ft_fseek, ft_ftell, ft_fread, ft_smalloc,
ft_scalloc, ft_srealloc, ft_sfree, ft_labs): New wrapper macros for
C library functions. Update all users accordingly (and catch some
other places where the C library function was used instead of the
wrapper functions).
* src/base/ftsystem.c: Don't include stdio.h and stdlib.h.
* src/gzip/zutil.h [MSDOS && !(__TURBOC__ || __BORLANDC__)]: Don't
include malloc.h.
2006-04-29 09:31:16 +02:00
|
|
|
ft_fseek( file, 0, SEEK_END );
|
2015-02-16 08:37:09 +01:00
|
|
|
stream->size = (unsigned long)ft_ftell( file );
|
2010-10-13 09:21:59 +02:00
|
|
|
if ( !stream->size )
|
|
|
|
{
|
|
|
|
FT_ERROR(( "FT_Stream_Open:" ));
|
|
|
|
FT_ERROR(( " opened `%s' but zero-sized\n", filepathname ));
|
|
|
|
ft_fclose( file );
|
2013-03-14 10:27:35 +01:00
|
|
|
return FT_THROW( Cannot_Open_Stream );
|
2010-10-13 09:21:59 +02:00
|
|
|
}
|
Further C library abstraction. Based on a patch from
msn2@bidyut.com.
* include/freetype/config/ftstdlib.h (FT_CHAR_BIT, FT_FILE,
ft_fopen, ft_fclose, ft_fseek, ft_ftell, ft_fread, ft_smalloc,
ft_scalloc, ft_srealloc, ft_sfree, ft_labs): New wrapper macros for
C library functions. Update all users accordingly (and catch some
other places where the C library function was used instead of the
wrapper functions).
* src/base/ftsystem.c: Don't include stdio.h and stdlib.h.
* src/gzip/zutil.h [MSDOS && !(__TURBOC__ || __BORLANDC__)]: Don't
include malloc.h.
2006-04-29 09:31:16 +02:00
|
|
|
ft_fseek( file, 0, SEEK_SET );
|
2000-05-17 01:44:38 +02:00
|
|
|
|
2002-02-24 06:26:57 +01:00
|
|
|
stream->descriptor.pointer = file;
|
|
|
|
stream->read = ft_ansi_stream_io;
|
|
|
|
stream->close = ft_ansi_stream_close;
|
2000-02-29 18:11:53 +01:00
|
|
|
|
2002-02-24 06:26:57 +01:00
|
|
|
FT_TRACE1(( "FT_Stream_Open:" ));
|
2020-08-28 06:26:38 +02:00
|
|
|
FT_TRACE1(( " opened `%s' (%ld bytes) successfully\n",
|
2002-02-24 06:26:57 +01:00
|
|
|
filepathname, stream->size ));
|
2000-06-02 23:31:32 +02:00
|
|
|
|
2000-06-02 16:30:38 +02:00
|
|
|
return FT_Err_Ok;
|
2000-02-29 18:11:53 +01:00
|
|
|
}
|
|
|
|
|
2011-07-20 06:48:08 +02:00
|
|
|
#endif /* !FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT */
|
2000-02-29 18:11:53 +01:00
|
|
|
|
2001-10-22 10:32:21 +02:00
|
|
|
#ifdef FT_DEBUG_MEMORY
|
|
|
|
|
|
|
|
extern FT_Int
|
|
|
|
ft_mem_debug_init( FT_Memory memory );
|
2002-02-24 06:26:57 +01:00
|
|
|
|
2001-10-22 10:32:21 +02:00
|
|
|
extern void
|
|
|
|
ft_mem_debug_done( FT_Memory memory );
|
2002-02-24 06:26:57 +01:00
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
2000-11-07 18:21:11 +01:00
|
|
|
/* documentation is in ftobjs.h */
|
|
|
|
|
* src/base/ftcalc.c (FT_MulTo64): Commented out.
* include/freetype/internal/ftcalc.h (FT_SqrtFixed), src/base/ftcalc.c
(FT_SqrtFixed), include/freetype/internal/ftdebug.h
(FT_Trace_Get_Count, FT_Trace_Get_Name, FT_Message, FT_Panic),
src/base/ftdebug.c (FT_Trace_Get_Count, FT_Trace_Get_Name, FT_Message,
FT_Panic), include/freetype/internal/ftobjs.h (FT_New_Memory,
FT_Done_Memory), include/freetype/internal/ftstream.h
(FT_Stream_Open), src/base/ftsystem.c (FT_New_Memory, FT_Done_Memory,
FT_Stream_Open): s/FT_EXPORT/FT_BASE/.
* builds/exports.mk: Manually add TT_New_Context to EXPORTS_LIST too.
2005-11-17 02:53:07 +01:00
|
|
|
FT_BASE_DEF( FT_Memory )
|
2001-06-27 18:18:10 +02:00
|
|
|
FT_New_Memory( void )
|
2000-02-29 18:11:53 +01:00
|
|
|
{
|
|
|
|
FT_Memory memory;
|
2000-05-17 01:44:38 +02:00
|
|
|
|
2000-06-02 16:30:38 +02:00
|
|
|
|
Further C library abstraction. Based on a patch from
msn2@bidyut.com.
* include/freetype/config/ftstdlib.h (FT_CHAR_BIT, FT_FILE,
ft_fopen, ft_fclose, ft_fseek, ft_ftell, ft_fread, ft_smalloc,
ft_scalloc, ft_srealloc, ft_sfree, ft_labs): New wrapper macros for
C library functions. Update all users accordingly (and catch some
other places where the C library function was used instead of the
wrapper functions).
* src/base/ftsystem.c: Don't include stdio.h and stdlib.h.
* src/gzip/zutil.h [MSDOS && !(__TURBOC__ || __BORLANDC__)]: Don't
include malloc.h.
2006-04-29 09:31:16 +02:00
|
|
|
memory = (FT_Memory)ft_smalloc( sizeof ( *memory ) );
|
2000-06-02 16:30:38 +02:00
|
|
|
if ( memory )
|
2000-02-29 18:11:53 +01:00
|
|
|
{
|
2015-04-11 05:45:11 +02:00
|
|
|
memory->user = NULL;
|
2000-02-29 18:11:53 +01:00
|
|
|
memory->alloc = ft_alloc;
|
|
|
|
memory->realloc = ft_realloc;
|
|
|
|
memory->free = ft_free;
|
2001-10-24 09:32:55 +02:00
|
|
|
#ifdef FT_DEBUG_MEMORY
|
|
|
|
ft_mem_debug_init( memory );
|
2002-02-24 06:26:57 +01:00
|
|
|
#endif
|
2000-02-29 18:11:53 +01:00
|
|
|
}
|
2000-06-02 16:30:38 +02:00
|
|
|
|
2000-02-29 18:11:53 +01:00
|
|
|
return memory;
|
|
|
|
}
|
|
|
|
|
2000-06-02 16:30:38 +02:00
|
|
|
|
2000-11-07 18:21:11 +01:00
|
|
|
/* documentation is in ftobjs.h */
|
|
|
|
|
* src/base/ftcalc.c (FT_MulTo64): Commented out.
* include/freetype/internal/ftcalc.h (FT_SqrtFixed), src/base/ftcalc.c
(FT_SqrtFixed), include/freetype/internal/ftdebug.h
(FT_Trace_Get_Count, FT_Trace_Get_Name, FT_Message, FT_Panic),
src/base/ftdebug.c (FT_Trace_Get_Count, FT_Trace_Get_Name, FT_Message,
FT_Panic), include/freetype/internal/ftobjs.h (FT_New_Memory,
FT_Done_Memory), include/freetype/internal/ftstream.h
(FT_Stream_Open), src/base/ftsystem.c (FT_New_Memory, FT_Done_Memory,
FT_Stream_Open): s/FT_EXPORT/FT_BASE/.
* builds/exports.mk: Manually add TT_New_Context to EXPORTS_LIST too.
2005-11-17 02:53:07 +01:00
|
|
|
FT_BASE_DEF( void )
|
2001-06-27 18:18:10 +02:00
|
|
|
FT_Done_Memory( FT_Memory memory )
|
2000-07-27 23:40:22 +02:00
|
|
|
{
|
2001-10-22 10:32:21 +02:00
|
|
|
#ifdef FT_DEBUG_MEMORY
|
|
|
|
ft_mem_debug_done( memory );
|
2002-02-24 06:26:57 +01:00
|
|
|
#endif
|
2008-09-18 13:20:12 +02:00
|
|
|
ft_sfree( memory );
|
2000-07-27 23:40:22 +02:00
|
|
|
}
|
|
|
|
|
2000-07-28 01:29:08 +02:00
|
|
|
|
2000-06-02 16:30:38 +02:00
|
|
|
/* END */
|