2000-05-16 21:51:49 +02:00
|
|
|
/***************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* ftmemory.h */
|
|
|
|
/* */
|
2000-07-18 08:50:03 +02:00
|
|
|
/* The FreeType memory management macros (specification). */
|
2000-05-16 21:51:49 +02:00
|
|
|
/* */
|
2005-03-01 03:13:50 +01:00
|
|
|
/* Copyright 1996-2001, 2002, 2004, 2005 by */
|
2000-05-16 21:51:49 +02:00
|
|
|
/* David Turner, Robert Wilhelm, and Werner Lemberg */
|
|
|
|
/* */
|
2000-07-18 08:50:03 +02:00
|
|
|
/* This file is part of the FreeType project, and may only be used, */
|
|
|
|
/* modified, and distributed under the terms of the FreeType project */
|
2000-05-16 21:51:49 +02:00
|
|
|
/* 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. */
|
|
|
|
/* */
|
|
|
|
/***************************************************************************/
|
|
|
|
|
2000-07-18 08:50:03 +02:00
|
|
|
|
2000-12-01 00:12:33 +01:00
|
|
|
#ifndef __FTMEMORY_H__
|
|
|
|
#define __FTMEMORY_H__
|
2000-05-16 21:51:49 +02:00
|
|
|
|
2000-12-09 01:45:38 +01:00
|
|
|
|
|
|
|
#include <ft2build.h>
|
|
|
|
#include FT_CONFIG_CONFIG_H
|
|
|
|
#include FT_TYPES_H
|
|
|
|
|
2000-08-01 15:17:04 +02:00
|
|
|
|
2000-12-01 00:12:33 +01:00
|
|
|
FT_BEGIN_HEADER
|
2000-08-01 15:17:04 +02:00
|
|
|
|
2000-12-09 01:45:38 +01:00
|
|
|
|
2000-05-16 21:51:49 +02:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <Macro> */
|
|
|
|
/* FT_SET_ERROR */
|
|
|
|
/* */
|
|
|
|
/* <Description> */
|
|
|
|
/* This macro is used to set an implicit `error' variable to a given */
|
|
|
|
/* expression's value (usually a function call), and convert it to a */
|
|
|
|
/* boolean which is set whenever the value is != 0. */
|
|
|
|
/* */
|
|
|
|
#undef FT_SET_ERROR
|
|
|
|
#define FT_SET_ERROR( expression ) \
|
2000-07-18 08:50:03 +02:00
|
|
|
( ( error = (expression) ) != 0 )
|
2000-05-16 21:51:49 +02:00
|
|
|
|
|
|
|
|
2005-03-03 14:58:13 +01:00
|
|
|
|
2000-05-16 21:51:49 +02:00
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
/**** ****/
|
|
|
|
/**** ****/
|
|
|
|
/**** M E M O R Y ****/
|
|
|
|
/**** ****/
|
|
|
|
/**** ****/
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
/*************************************************************************/
|
|
|
|
|
2001-10-22 16:50:41 +02:00
|
|
|
#ifdef FT_DEBUG_MEMORY
|
|
|
|
|
|
|
|
FT_BASE( FT_Error )
|
|
|
|
FT_Alloc_Debug( FT_Memory memory,
|
|
|
|
FT_Long size,
|
|
|
|
void* *P,
|
|
|
|
const char* file_name,
|
|
|
|
FT_Long line_no );
|
2001-10-24 10:04:00 +02:00
|
|
|
|
2004-06-24 08:56:06 +02:00
|
|
|
FT_BASE( FT_Error )
|
|
|
|
FT_QAlloc_Debug( FT_Memory memory,
|
|
|
|
FT_Long size,
|
|
|
|
void* *P,
|
|
|
|
const char* file_name,
|
|
|
|
FT_Long line_no );
|
|
|
|
|
2001-10-24 10:04:00 +02:00
|
|
|
FT_BASE( FT_Error )
|
|
|
|
FT_Realloc_Debug( FT_Memory memory,
|
|
|
|
FT_Long current,
|
|
|
|
FT_Long size,
|
|
|
|
void* *P,
|
|
|
|
const char* file_name,
|
|
|
|
FT_Long line_no );
|
|
|
|
|
2004-06-24 08:56:06 +02:00
|
|
|
FT_BASE( FT_Error )
|
|
|
|
FT_QRealloc_Debug( FT_Memory memory,
|
|
|
|
FT_Long current,
|
|
|
|
FT_Long size,
|
|
|
|
void* *P,
|
|
|
|
const char* file_name,
|
|
|
|
FT_Long line_no );
|
|
|
|
|
2001-10-24 10:04:00 +02:00
|
|
|
FT_BASE( void )
|
|
|
|
FT_Free_Debug( FT_Memory memory,
|
|
|
|
FT_Pointer block,
|
|
|
|
const char* file_name,
|
|
|
|
FT_Long line_no );
|
|
|
|
|
2001-10-22 16:50:41 +02:00
|
|
|
#endif
|
|
|
|
|
2000-11-08 00:56:02 +01:00
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <Function> */
|
|
|
|
/* FT_Alloc */
|
|
|
|
/* */
|
|
|
|
/* <Description> */
|
|
|
|
/* Allocates a new block of memory. The returned area is always */
|
|
|
|
/* zero-filled; this is a strong convention in many FreeType parts. */
|
|
|
|
/* */
|
|
|
|
/* <Input> */
|
|
|
|
/* memory :: A handle to a given `memory object' which handles */
|
|
|
|
/* allocation. */
|
|
|
|
/* */
|
|
|
|
/* size :: The size in bytes of the block to allocate. */
|
|
|
|
/* */
|
|
|
|
/* <Output> */
|
|
|
|
/* P :: A pointer to the fresh new block. It should be set to */
|
|
|
|
/* NULL if `size' is 0, or in case of error. */
|
|
|
|
/* */
|
|
|
|
/* <Return> */
|
|
|
|
/* FreeType error code. 0 means success. */
|
|
|
|
/* */
|
2001-06-28 19:49:10 +02:00
|
|
|
FT_BASE( FT_Error )
|
|
|
|
FT_Alloc( FT_Memory memory,
|
|
|
|
FT_Long size,
|
|
|
|
void* *P );
|
2000-05-16 21:51:49 +02:00
|
|
|
|
2004-06-24 08:56:06 +02:00
|
|
|
|
2004-12-14 00:16:59 +01:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <Function> */
|
|
|
|
/* FT_QAlloc */
|
|
|
|
/* */
|
|
|
|
/* <Description> */
|
|
|
|
/* Allocates a new block of memory. The returned area is *not* */
|
|
|
|
/* zero-filled, making allocation quicker. */
|
|
|
|
/* */
|
|
|
|
/* <Input> */
|
|
|
|
/* memory :: A handle to a given `memory object' which handles */
|
|
|
|
/* allocation. */
|
|
|
|
/* */
|
|
|
|
/* size :: The size in bytes of the block to allocate. */
|
|
|
|
/* */
|
|
|
|
/* <Output> */
|
|
|
|
/* P :: A pointer to the fresh new block. It should be set to */
|
|
|
|
/* NULL if `size' is 0, or in case of error. */
|
|
|
|
/* */
|
|
|
|
/* <Return> */
|
|
|
|
/* FreeType error code. 0 means success. */
|
|
|
|
/* */
|
2004-06-23 17:44:03 +02:00
|
|
|
FT_BASE( FT_Error )
|
|
|
|
FT_QAlloc( FT_Memory memory,
|
|
|
|
FT_Long size,
|
2004-06-24 08:56:06 +02:00
|
|
|
void* *p );
|
|
|
|
|
2001-12-05 02:22:05 +01:00
|
|
|
|
2000-11-08 00:56:02 +01:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <Function> */
|
|
|
|
/* FT_Realloc */
|
|
|
|
/* */
|
|
|
|
/* <Description> */
|
|
|
|
/* Reallocates a block of memory pointed to by `*P' to `Size' bytes */
|
2004-12-14 00:16:59 +01:00
|
|
|
/* from the heap, possibly changing `*P'. The returned area is */
|
|
|
|
/* zero-filled. */
|
2000-11-08 00:56:02 +01:00
|
|
|
/* */
|
|
|
|
/* <Input> */
|
|
|
|
/* memory :: A handle to a given `memory object' which handles */
|
|
|
|
/* reallocation. */
|
|
|
|
/* */
|
|
|
|
/* current :: The current block size in bytes. */
|
|
|
|
/* */
|
|
|
|
/* size :: The new block size in bytes. */
|
|
|
|
/* */
|
|
|
|
/* <InOut> */
|
|
|
|
/* P :: A pointer to the fresh new block. It should be set to */
|
|
|
|
/* NULL if `size' is 0, or in case of error. */
|
|
|
|
/* */
|
|
|
|
/* <Return> */
|
|
|
|
/* FreeType error code. 0 means success. */
|
|
|
|
/* */
|
|
|
|
/* <Note> */
|
|
|
|
/* All callers of FT_Realloc() _must_ provide the current block size */
|
|
|
|
/* as well as the new one. */
|
|
|
|
/* */
|
2001-06-28 19:49:10 +02:00
|
|
|
FT_BASE( FT_Error )
|
|
|
|
FT_Realloc( FT_Memory memory,
|
|
|
|
FT_Long current,
|
|
|
|
FT_Long size,
|
2003-06-18 00:50:09 +02:00
|
|
|
void* *P );
|
2000-07-18 08:50:03 +02:00
|
|
|
|
2004-06-24 08:56:06 +02:00
|
|
|
|
2004-12-14 00:16:59 +01:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <Function> */
|
2005-06-04 07:27:18 +02:00
|
|
|
/* FT_QRealloc */
|
2004-12-14 00:16:59 +01:00
|
|
|
/* */
|
|
|
|
/* <Description> */
|
|
|
|
/* Reallocates a block of memory pointed to by `*P' to `Size' bytes */
|
|
|
|
/* from the heap, possibly changing `*P'. The returned area is *not* */
|
|
|
|
/* zero-filled, making reallocation quicker. */
|
|
|
|
/* */
|
|
|
|
/* <Input> */
|
|
|
|
/* memory :: A handle to a given `memory object' which handles */
|
|
|
|
/* reallocation. */
|
|
|
|
/* */
|
|
|
|
/* current :: The current block size in bytes. */
|
|
|
|
/* */
|
|
|
|
/* size :: The new block size in bytes. */
|
|
|
|
/* */
|
|
|
|
/* <InOut> */
|
|
|
|
/* P :: A pointer to the fresh new block. It should be set to */
|
|
|
|
/* NULL if `size' is 0, or in case of error. */
|
|
|
|
/* */
|
|
|
|
/* <Return> */
|
|
|
|
/* FreeType error code. 0 means success. */
|
|
|
|
/* */
|
|
|
|
/* <Note> */
|
|
|
|
/* All callers of FT_Realloc() _must_ provide the current block size */
|
|
|
|
/* as well as the new one. */
|
|
|
|
/* */
|
2004-06-23 17:44:03 +02:00
|
|
|
FT_BASE( FT_Error )
|
|
|
|
FT_QRealloc( FT_Memory memory,
|
|
|
|
FT_Long current,
|
|
|
|
FT_Long size,
|
2004-06-24 08:56:06 +02:00
|
|
|
void* *p );
|
|
|
|
|
2000-11-08 00:56:02 +01:00
|
|
|
|
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* <Function> */
|
|
|
|
/* FT_Free */
|
|
|
|
/* */
|
|
|
|
/* <Description> */
|
|
|
|
/* Releases a given block of memory allocated through FT_Alloc(). */
|
|
|
|
/* */
|
|
|
|
/* <Input> */
|
|
|
|
/* memory :: A handle to a given `memory object' which handles */
|
|
|
|
/* memory deallocation */
|
|
|
|
/* */
|
|
|
|
/* P :: This is the _address_ of a _pointer_ which points to the */
|
|
|
|
/* allocated block. It is always set to NULL on exit. */
|
|
|
|
/* */
|
|
|
|
/* <Note> */
|
2003-06-18 00:50:09 +02:00
|
|
|
/* If P or *P is NULL, this function should return successfully. */
|
2000-11-08 00:56:02 +01:00
|
|
|
/* This is a strong convention within all of FreeType and its */
|
|
|
|
/* drivers. */
|
|
|
|
/* */
|
2001-06-28 19:49:10 +02:00
|
|
|
FT_BASE( void )
|
|
|
|
FT_Free( FT_Memory memory,
|
2003-06-18 00:50:09 +02:00
|
|
|
void* *P );
|
2000-05-16 21:51:49 +02:00
|
|
|
|
|
|
|
|
* README.UNX: updated the Unix-specific quick-compilation guide to
warn about the GNU Make requirement at compile time..
* include/freetype/config/ftstdlib.h,
include/freetype/config/ftconfig.h,
include/freetype/config/ftheader.h,
include/freetype/internal/ftmemory.h,
include/freetype/internal/ftobjs.h,
src/autohint/ahoptim.c,
src/base/ftdbgmem.c, src/base/ftdebug.c,
src/base/ftmac.c, src/base/ftobjs.c,
src/base/ftsystem.c,
src/cache/ftcimage.c, src/cache/ftcsbits.c,
src/cff/cffdriver.c, src/cff/cffload.c, src/cff/cffobjs.c,
src/cid/cidload.c, src/cid/cidparse.c, src/cid/cidriver.c,
src/pcf/pcfdriver.c, src/pcf/pcfread.c,
src/psaux/t1cmap.c, src/psaux/t1decode.c,
src/pshinter/pshalgo1.c, src/pshinter/pshalgo2.c,
src/pshinter/pshrec.c,
src/psnames/psmodule.c,
src/raster/ftraster.c,
src/sfnt/sfdriver.c, src/sfnt/ttload.c, src/sfnt/ttpost.c,
src/smooth/ftgrays.c,
src/type1/t1afm.c, src/type1/t1driver.c, src/type1/t1gload.c,
src/type1/t1load.c, src/type1/t1objs.c, src/type1/t1parse.c:
added the new configuration file "ftstdlib.h" used to define
aliases for all ISO C library functions used by the engine
(e.g. strlen, qsort, setjmp, etc...)
this eases the porting of FreeType 2 to exotic environments like
XFree86 modules/extensions..
also removed many #include <string.h>, #include <stdlib.h>, etc...
from the engine's sources where they're not needed..
2002-04-12 11:31:48 +02:00
|
|
|
#define FT_MEM_SET( dest, byte, count ) ft_memset( dest, byte, count )
|
2000-05-16 21:51:49 +02:00
|
|
|
|
* README.UNX: updated the Unix-specific quick-compilation guide to
warn about the GNU Make requirement at compile time..
* include/freetype/config/ftstdlib.h,
include/freetype/config/ftconfig.h,
include/freetype/config/ftheader.h,
include/freetype/internal/ftmemory.h,
include/freetype/internal/ftobjs.h,
src/autohint/ahoptim.c,
src/base/ftdbgmem.c, src/base/ftdebug.c,
src/base/ftmac.c, src/base/ftobjs.c,
src/base/ftsystem.c,
src/cache/ftcimage.c, src/cache/ftcsbits.c,
src/cff/cffdriver.c, src/cff/cffload.c, src/cff/cffobjs.c,
src/cid/cidload.c, src/cid/cidparse.c, src/cid/cidriver.c,
src/pcf/pcfdriver.c, src/pcf/pcfread.c,
src/psaux/t1cmap.c, src/psaux/t1decode.c,
src/pshinter/pshalgo1.c, src/pshinter/pshalgo2.c,
src/pshinter/pshrec.c,
src/psnames/psmodule.c,
src/raster/ftraster.c,
src/sfnt/sfdriver.c, src/sfnt/ttload.c, src/sfnt/ttpost.c,
src/smooth/ftgrays.c,
src/type1/t1afm.c, src/type1/t1driver.c, src/type1/t1gload.c,
src/type1/t1load.c, src/type1/t1objs.c, src/type1/t1parse.c:
added the new configuration file "ftstdlib.h" used to define
aliases for all ISO C library functions used by the engine
(e.g. strlen, qsort, setjmp, etc...)
this eases the porting of FreeType 2 to exotic environments like
XFree86 modules/extensions..
also removed many #include <string.h>, #include <stdlib.h>, etc...
from the engine's sources where they're not needed..
2002-04-12 11:31:48 +02:00
|
|
|
#define FT_MEM_COPY( dest, source, count ) ft_memcpy( dest, source, count )
|
2000-05-16 21:51:49 +02:00
|
|
|
|
* README.UNX: updated the Unix-specific quick-compilation guide to
warn about the GNU Make requirement at compile time..
* include/freetype/config/ftstdlib.h,
include/freetype/config/ftconfig.h,
include/freetype/config/ftheader.h,
include/freetype/internal/ftmemory.h,
include/freetype/internal/ftobjs.h,
src/autohint/ahoptim.c,
src/base/ftdbgmem.c, src/base/ftdebug.c,
src/base/ftmac.c, src/base/ftobjs.c,
src/base/ftsystem.c,
src/cache/ftcimage.c, src/cache/ftcsbits.c,
src/cff/cffdriver.c, src/cff/cffload.c, src/cff/cffobjs.c,
src/cid/cidload.c, src/cid/cidparse.c, src/cid/cidriver.c,
src/pcf/pcfdriver.c, src/pcf/pcfread.c,
src/psaux/t1cmap.c, src/psaux/t1decode.c,
src/pshinter/pshalgo1.c, src/pshinter/pshalgo2.c,
src/pshinter/pshrec.c,
src/psnames/psmodule.c,
src/raster/ftraster.c,
src/sfnt/sfdriver.c, src/sfnt/ttload.c, src/sfnt/ttpost.c,
src/smooth/ftgrays.c,
src/type1/t1afm.c, src/type1/t1driver.c, src/type1/t1gload.c,
src/type1/t1load.c, src/type1/t1objs.c, src/type1/t1parse.c:
added the new configuration file "ftstdlib.h" used to define
aliases for all ISO C library functions used by the engine
(e.g. strlen, qsort, setjmp, etc...)
this eases the porting of FreeType 2 to exotic environments like
XFree86 modules/extensions..
also removed many #include <string.h>, #include <stdlib.h>, etc...
from the engine's sources where they're not needed..
2002-04-12 11:31:48 +02:00
|
|
|
#define FT_MEM_MOVE( dest, source, count ) ft_memmove( dest, source, count )
|
2000-05-16 21:51:49 +02:00
|
|
|
|
2002-04-19 17:13:47 +02:00
|
|
|
|
2002-04-20 07:38:33 +02:00
|
|
|
#define FT_MEM_ZERO( dest, count ) FT_MEM_SET( dest, 0, count )
|
|
|
|
|
|
|
|
#define FT_ZERO( p ) FT_MEM_ZERO( p, sizeof ( *(p) ) )
|
|
|
|
|
2005-03-01 03:13:50 +01:00
|
|
|
#define FT_ARRAY_ZERO( dest, count ) \
|
|
|
|
FT_MEM_ZERO( dest, (count) * sizeof ( *(dest) ) )
|
2005-02-22 16:38:12 +01:00
|
|
|
|
2005-03-01 03:13:50 +01:00
|
|
|
#define FT_ARRAY_COPY( dest, source, count ) \
|
|
|
|
FT_MEM_COPY( dest, source, (count) * sizeof ( *(dest) ) )
|
2004-01-22 10:07:12 +01:00
|
|
|
|
2005-03-01 03:13:50 +01:00
|
|
|
#define FT_ARRAY_MOVE( dest, source, count ) \
|
|
|
|
FT_MEM_MOVE( dest, source, (count) * sizeof ( *(dest) ) )
|
2004-01-15 20:07:44 +01:00
|
|
|
|
2005-03-16 00:31:48 +01:00
|
|
|
|
2005-03-16 02:49:54 +01:00
|
|
|
/*
|
|
|
|
* Return the maximum number of adressable elements in an array.
|
|
|
|
* We limit ourselves to INT_MAX, rather than UINT_MAX, to avoid
|
|
|
|
* any problems.
|
|
|
|
*/
|
|
|
|
#define FT_ARRAY_MAX( ptr ) ( FT_INT_MAX / sizeof ( *(ptr) ) )
|
|
|
|
|
|
|
|
#define FT_ARRAY_CHECK( ptr, count ) ( (count) <= FT_ARRAY_MAX( ptr ) )
|
|
|
|
|
2000-05-16 21:51:49 +02:00
|
|
|
|
2002-03-30 00:23:28 +01:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* We first define FT_MEM_ALLOC, FT_MEM_REALLOC, and FT_MEM_FREE. All */
|
|
|
|
/* macros use an _implicit_ `memory' parameter to access the current */
|
|
|
|
/* memory allocator. */
|
|
|
|
/* */
|
2000-05-16 21:51:49 +02:00
|
|
|
|
2001-10-22 16:50:41 +02:00
|
|
|
#ifdef FT_DEBUG_MEMORY
|
|
|
|
|
* builds/amiga/makefile.os4 (WARNINGS), builds/compiler/gcc-dev.mk
(CFLAGS), builds/compiler/gcc.mk (CFLAGS): Remove
-fno-strict-aliasing.
Say you have `(Foo*)x' and want to assign, pass, or return it as
`(Bar*)'. If you simply say `x' or `(Bar*)x', then the C compiler
would warn you that type casting incompatible pointer types breaks
strict-aliasing. The solution is to cast to `(void*)' instead which
is the generic pointer type, so the compiler knows that it should
make no strict-aliasing assumption on `x'. But the problem with
`(void*)x' is that seems like in C++, unlike C, `void*' is not a
generic pointer type and assigning `void*' to `Bar*' without a cast
causes an error. The solution is to cast to `Bar*' too, with
`(Bar*)(void*)x' as the result -- this is what the patch does.
* include/freetype/cache/ftccache.h (FTC_CACHE_LOOKUP_CMP),
include/freetype/cache/ftcmru.h (FTC_MRULIST_LOOKUP_CMP): Remove
cast on lvalue, use a temporary pointer instead.
Cast temporarily to (void*) to not break strict aliasing.
* include/freetype/internal/ftmemory.h (FT_MEM_ALLOC,
FT_MEM_REALLOC, FT_MEM_QALLOC, FT_MEM_QREALLOC, FT_MEM_FREE),
src/base/ftglyph.c (FT_Glyph_To_Bitmap): Cast temporarily to (void*)
to not break strict aliasing.
* src/base/ftinit.c (FT_USE_MODULE): Fix wrong type information.
* builds/unix/configure.ac (XX_CFLAGS): Remove -fno-strict-aliasing.
* src/sfnt/rules.mk (SFNT_DRV_SRC): Don't include ttsbit0.c --
it is currently loaded from ttsbit.c.
Other formatting.
2005-05-23 23:33:02 +02:00
|
|
|
#define FT_MEM_ALLOC( _pointer_, _size_ ) \
|
|
|
|
FT_Alloc_Debug( memory, _size_, \
|
|
|
|
(void**)(void*)&(_pointer_), \
|
|
|
|
__FILE__, __LINE__ )
|
2001-10-22 16:50:41 +02:00
|
|
|
|
* builds/amiga/makefile.os4 (WARNINGS), builds/compiler/gcc-dev.mk
(CFLAGS), builds/compiler/gcc.mk (CFLAGS): Remove
-fno-strict-aliasing.
Say you have `(Foo*)x' and want to assign, pass, or return it as
`(Bar*)'. If you simply say `x' or `(Bar*)x', then the C compiler
would warn you that type casting incompatible pointer types breaks
strict-aliasing. The solution is to cast to `(void*)' instead which
is the generic pointer type, so the compiler knows that it should
make no strict-aliasing assumption on `x'. But the problem with
`(void*)x' is that seems like in C++, unlike C, `void*' is not a
generic pointer type and assigning `void*' to `Bar*' without a cast
causes an error. The solution is to cast to `Bar*' too, with
`(Bar*)(void*)x' as the result -- this is what the patch does.
* include/freetype/cache/ftccache.h (FTC_CACHE_LOOKUP_CMP),
include/freetype/cache/ftcmru.h (FTC_MRULIST_LOOKUP_CMP): Remove
cast on lvalue, use a temporary pointer instead.
Cast temporarily to (void*) to not break strict aliasing.
* include/freetype/internal/ftmemory.h (FT_MEM_ALLOC,
FT_MEM_REALLOC, FT_MEM_QALLOC, FT_MEM_QREALLOC, FT_MEM_FREE),
src/base/ftglyph.c (FT_Glyph_To_Bitmap): Cast temporarily to (void*)
to not break strict aliasing.
* src/base/ftinit.c (FT_USE_MODULE): Fix wrong type information.
* builds/unix/configure.ac (XX_CFLAGS): Remove -fno-strict-aliasing.
* src/sfnt/rules.mk (SFNT_DRV_SRC): Don't include ttsbit0.c --
it is currently loaded from ttsbit.c.
Other formatting.
2005-05-23 23:33:02 +02:00
|
|
|
#define FT_MEM_REALLOC( _pointer_, _current_, _size_ ) \
|
|
|
|
FT_Realloc_Debug( memory, _current_, _size_, \
|
|
|
|
(void**)(void*)&(_pointer_), \
|
|
|
|
__FILE__, __LINE__ )
|
2001-10-24 10:04:00 +02:00
|
|
|
|
* builds/amiga/makefile.os4 (WARNINGS), builds/compiler/gcc-dev.mk
(CFLAGS), builds/compiler/gcc.mk (CFLAGS): Remove
-fno-strict-aliasing.
Say you have `(Foo*)x' and want to assign, pass, or return it as
`(Bar*)'. If you simply say `x' or `(Bar*)x', then the C compiler
would warn you that type casting incompatible pointer types breaks
strict-aliasing. The solution is to cast to `(void*)' instead which
is the generic pointer type, so the compiler knows that it should
make no strict-aliasing assumption on `x'. But the problem with
`(void*)x' is that seems like in C++, unlike C, `void*' is not a
generic pointer type and assigning `void*' to `Bar*' without a cast
causes an error. The solution is to cast to `Bar*' too, with
`(Bar*)(void*)x' as the result -- this is what the patch does.
* include/freetype/cache/ftccache.h (FTC_CACHE_LOOKUP_CMP),
include/freetype/cache/ftcmru.h (FTC_MRULIST_LOOKUP_CMP): Remove
cast on lvalue, use a temporary pointer instead.
Cast temporarily to (void*) to not break strict aliasing.
* include/freetype/internal/ftmemory.h (FT_MEM_ALLOC,
FT_MEM_REALLOC, FT_MEM_QALLOC, FT_MEM_QREALLOC, FT_MEM_FREE),
src/base/ftglyph.c (FT_Glyph_To_Bitmap): Cast temporarily to (void*)
to not break strict aliasing.
* src/base/ftinit.c (FT_USE_MODULE): Fix wrong type information.
* builds/unix/configure.ac (XX_CFLAGS): Remove -fno-strict-aliasing.
* src/sfnt/rules.mk (SFNT_DRV_SRC): Don't include ttsbit0.c --
it is currently loaded from ttsbit.c.
Other formatting.
2005-05-23 23:33:02 +02:00
|
|
|
#define FT_MEM_QALLOC( _pointer_, _size_ ) \
|
|
|
|
FT_QAlloc_Debug( memory, _size_, \
|
|
|
|
(void**)(void*)&(_pointer_), \
|
|
|
|
__FILE__, __LINE__ )
|
2004-06-23 17:44:03 +02:00
|
|
|
|
* builds/amiga/makefile.os4 (WARNINGS), builds/compiler/gcc-dev.mk
(CFLAGS), builds/compiler/gcc.mk (CFLAGS): Remove
-fno-strict-aliasing.
Say you have `(Foo*)x' and want to assign, pass, or return it as
`(Bar*)'. If you simply say `x' or `(Bar*)x', then the C compiler
would warn you that type casting incompatible pointer types breaks
strict-aliasing. The solution is to cast to `(void*)' instead which
is the generic pointer type, so the compiler knows that it should
make no strict-aliasing assumption on `x'. But the problem with
`(void*)x' is that seems like in C++, unlike C, `void*' is not a
generic pointer type and assigning `void*' to `Bar*' without a cast
causes an error. The solution is to cast to `Bar*' too, with
`(Bar*)(void*)x' as the result -- this is what the patch does.
* include/freetype/cache/ftccache.h (FTC_CACHE_LOOKUP_CMP),
include/freetype/cache/ftcmru.h (FTC_MRULIST_LOOKUP_CMP): Remove
cast on lvalue, use a temporary pointer instead.
Cast temporarily to (void*) to not break strict aliasing.
* include/freetype/internal/ftmemory.h (FT_MEM_ALLOC,
FT_MEM_REALLOC, FT_MEM_QALLOC, FT_MEM_QREALLOC, FT_MEM_FREE),
src/base/ftglyph.c (FT_Glyph_To_Bitmap): Cast temporarily to (void*)
to not break strict aliasing.
* src/base/ftinit.c (FT_USE_MODULE): Fix wrong type information.
* builds/unix/configure.ac (XX_CFLAGS): Remove -fno-strict-aliasing.
* src/sfnt/rules.mk (SFNT_DRV_SRC): Don't include ttsbit0.c --
it is currently loaded from ttsbit.c.
Other formatting.
2005-05-23 23:33:02 +02:00
|
|
|
#define FT_MEM_QREALLOC( _pointer_, _current_, _size_ ) \
|
|
|
|
FT_QRealloc_Debug( memory, _current_, _size_, \
|
|
|
|
(void**)(void*)&(_pointer_), \
|
|
|
|
__FILE__, __LINE__ )
|
2004-06-23 17:44:03 +02:00
|
|
|
|
* builds/amiga/makefile.os4 (WARNINGS), builds/compiler/gcc-dev.mk
(CFLAGS), builds/compiler/gcc.mk (CFLAGS): Remove
-fno-strict-aliasing.
Say you have `(Foo*)x' and want to assign, pass, or return it as
`(Bar*)'. If you simply say `x' or `(Bar*)x', then the C compiler
would warn you that type casting incompatible pointer types breaks
strict-aliasing. The solution is to cast to `(void*)' instead which
is the generic pointer type, so the compiler knows that it should
make no strict-aliasing assumption on `x'. But the problem with
`(void*)x' is that seems like in C++, unlike C, `void*' is not a
generic pointer type and assigning `void*' to `Bar*' without a cast
causes an error. The solution is to cast to `Bar*' too, with
`(Bar*)(void*)x' as the result -- this is what the patch does.
* include/freetype/cache/ftccache.h (FTC_CACHE_LOOKUP_CMP),
include/freetype/cache/ftcmru.h (FTC_MRULIST_LOOKUP_CMP): Remove
cast on lvalue, use a temporary pointer instead.
Cast temporarily to (void*) to not break strict aliasing.
* include/freetype/internal/ftmemory.h (FT_MEM_ALLOC,
FT_MEM_REALLOC, FT_MEM_QALLOC, FT_MEM_QREALLOC, FT_MEM_FREE),
src/base/ftglyph.c (FT_Glyph_To_Bitmap): Cast temporarily to (void*)
to not break strict aliasing.
* src/base/ftinit.c (FT_USE_MODULE): Fix wrong type information.
* builds/unix/configure.ac (XX_CFLAGS): Remove -fno-strict-aliasing.
* src/sfnt/rules.mk (SFNT_DRV_SRC): Don't include ttsbit0.c --
it is currently loaded from ttsbit.c.
Other formatting.
2005-05-23 23:33:02 +02:00
|
|
|
#define FT_MEM_FREE( _pointer_ ) \
|
|
|
|
FT_Free_Debug( memory, (void**)(void*)&(_pointer_), \
|
|
|
|
__FILE__, __LINE__ )
|
2002-03-01 03:26:22 +01:00
|
|
|
|
2002-03-22 14:52:37 +01:00
|
|
|
|
2001-10-22 16:50:41 +02:00
|
|
|
#else /* !FT_DEBUG_MEMORY */
|
|
|
|
|
2002-03-30 00:23:28 +01:00
|
|
|
|
* builds/amiga/makefile.os4 (WARNINGS), builds/compiler/gcc-dev.mk
(CFLAGS), builds/compiler/gcc.mk (CFLAGS): Remove
-fno-strict-aliasing.
Say you have `(Foo*)x' and want to assign, pass, or return it as
`(Bar*)'. If you simply say `x' or `(Bar*)x', then the C compiler
would warn you that type casting incompatible pointer types breaks
strict-aliasing. The solution is to cast to `(void*)' instead which
is the generic pointer type, so the compiler knows that it should
make no strict-aliasing assumption on `x'. But the problem with
`(void*)x' is that seems like in C++, unlike C, `void*' is not a
generic pointer type and assigning `void*' to `Bar*' without a cast
causes an error. The solution is to cast to `Bar*' too, with
`(Bar*)(void*)x' as the result -- this is what the patch does.
* include/freetype/cache/ftccache.h (FTC_CACHE_LOOKUP_CMP),
include/freetype/cache/ftcmru.h (FTC_MRULIST_LOOKUP_CMP): Remove
cast on lvalue, use a temporary pointer instead.
Cast temporarily to (void*) to not break strict aliasing.
* include/freetype/internal/ftmemory.h (FT_MEM_ALLOC,
FT_MEM_REALLOC, FT_MEM_QALLOC, FT_MEM_QREALLOC, FT_MEM_FREE),
src/base/ftglyph.c (FT_Glyph_To_Bitmap): Cast temporarily to (void*)
to not break strict aliasing.
* src/base/ftinit.c (FT_USE_MODULE): Fix wrong type information.
* builds/unix/configure.ac (XX_CFLAGS): Remove -fno-strict-aliasing.
* src/sfnt/rules.mk (SFNT_DRV_SRC): Don't include ttsbit0.c --
it is currently loaded from ttsbit.c.
Other formatting.
2005-05-23 23:33:02 +02:00
|
|
|
#define FT_MEM_ALLOC( _pointer_, _size_ ) \
|
|
|
|
FT_Alloc( memory, _size_, \
|
|
|
|
(void**)(void*)&(_pointer_) )
|
2001-10-22 16:50:41 +02:00
|
|
|
|
* builds/amiga/makefile.os4 (WARNINGS), builds/compiler/gcc-dev.mk
(CFLAGS), builds/compiler/gcc.mk (CFLAGS): Remove
-fno-strict-aliasing.
Say you have `(Foo*)x' and want to assign, pass, or return it as
`(Bar*)'. If you simply say `x' or `(Bar*)x', then the C compiler
would warn you that type casting incompatible pointer types breaks
strict-aliasing. The solution is to cast to `(void*)' instead which
is the generic pointer type, so the compiler knows that it should
make no strict-aliasing assumption on `x'. But the problem with
`(void*)x' is that seems like in C++, unlike C, `void*' is not a
generic pointer type and assigning `void*' to `Bar*' without a cast
causes an error. The solution is to cast to `Bar*' too, with
`(Bar*)(void*)x' as the result -- this is what the patch does.
* include/freetype/cache/ftccache.h (FTC_CACHE_LOOKUP_CMP),
include/freetype/cache/ftcmru.h (FTC_MRULIST_LOOKUP_CMP): Remove
cast on lvalue, use a temporary pointer instead.
Cast temporarily to (void*) to not break strict aliasing.
* include/freetype/internal/ftmemory.h (FT_MEM_ALLOC,
FT_MEM_REALLOC, FT_MEM_QALLOC, FT_MEM_QREALLOC, FT_MEM_FREE),
src/base/ftglyph.c (FT_Glyph_To_Bitmap): Cast temporarily to (void*)
to not break strict aliasing.
* src/base/ftinit.c (FT_USE_MODULE): Fix wrong type information.
* builds/unix/configure.ac (XX_CFLAGS): Remove -fno-strict-aliasing.
* src/sfnt/rules.mk (SFNT_DRV_SRC): Don't include ttsbit0.c --
it is currently loaded from ttsbit.c.
Other formatting.
2005-05-23 23:33:02 +02:00
|
|
|
#define FT_MEM_FREE( _pointer_ ) \
|
|
|
|
FT_Free( memory, \
|
|
|
|
(void**)(void*)&(_pointer_) )
|
2002-03-01 03:26:22 +01:00
|
|
|
|
* builds/amiga/makefile.os4 (WARNINGS), builds/compiler/gcc-dev.mk
(CFLAGS), builds/compiler/gcc.mk (CFLAGS): Remove
-fno-strict-aliasing.
Say you have `(Foo*)x' and want to assign, pass, or return it as
`(Bar*)'. If you simply say `x' or `(Bar*)x', then the C compiler
would warn you that type casting incompatible pointer types breaks
strict-aliasing. The solution is to cast to `(void*)' instead which
is the generic pointer type, so the compiler knows that it should
make no strict-aliasing assumption on `x'. But the problem with
`(void*)x' is that seems like in C++, unlike C, `void*' is not a
generic pointer type and assigning `void*' to `Bar*' without a cast
causes an error. The solution is to cast to `Bar*' too, with
`(Bar*)(void*)x' as the result -- this is what the patch does.
* include/freetype/cache/ftccache.h (FTC_CACHE_LOOKUP_CMP),
include/freetype/cache/ftcmru.h (FTC_MRULIST_LOOKUP_CMP): Remove
cast on lvalue, use a temporary pointer instead.
Cast temporarily to (void*) to not break strict aliasing.
* include/freetype/internal/ftmemory.h (FT_MEM_ALLOC,
FT_MEM_REALLOC, FT_MEM_QALLOC, FT_MEM_QREALLOC, FT_MEM_FREE),
src/base/ftglyph.c (FT_Glyph_To_Bitmap): Cast temporarily to (void*)
to not break strict aliasing.
* src/base/ftinit.c (FT_USE_MODULE): Fix wrong type information.
* builds/unix/configure.ac (XX_CFLAGS): Remove -fno-strict-aliasing.
* src/sfnt/rules.mk (SFNT_DRV_SRC): Don't include ttsbit0.c --
it is currently loaded from ttsbit.c.
Other formatting.
2005-05-23 23:33:02 +02:00
|
|
|
#define FT_MEM_REALLOC( _pointer_, _current_, _size_ ) \
|
|
|
|
FT_Realloc( memory, _current_, _size_, \
|
|
|
|
(void**)(void*)&(_pointer_) )
|
2002-03-01 03:26:22 +01:00
|
|
|
|
* builds/amiga/makefile.os4 (WARNINGS), builds/compiler/gcc-dev.mk
(CFLAGS), builds/compiler/gcc.mk (CFLAGS): Remove
-fno-strict-aliasing.
Say you have `(Foo*)x' and want to assign, pass, or return it as
`(Bar*)'. If you simply say `x' or `(Bar*)x', then the C compiler
would warn you that type casting incompatible pointer types breaks
strict-aliasing. The solution is to cast to `(void*)' instead which
is the generic pointer type, so the compiler knows that it should
make no strict-aliasing assumption on `x'. But the problem with
`(void*)x' is that seems like in C++, unlike C, `void*' is not a
generic pointer type and assigning `void*' to `Bar*' without a cast
causes an error. The solution is to cast to `Bar*' too, with
`(Bar*)(void*)x' as the result -- this is what the patch does.
* include/freetype/cache/ftccache.h (FTC_CACHE_LOOKUP_CMP),
include/freetype/cache/ftcmru.h (FTC_MRULIST_LOOKUP_CMP): Remove
cast on lvalue, use a temporary pointer instead.
Cast temporarily to (void*) to not break strict aliasing.
* include/freetype/internal/ftmemory.h (FT_MEM_ALLOC,
FT_MEM_REALLOC, FT_MEM_QALLOC, FT_MEM_QREALLOC, FT_MEM_FREE),
src/base/ftglyph.c (FT_Glyph_To_Bitmap): Cast temporarily to (void*)
to not break strict aliasing.
* src/base/ftinit.c (FT_USE_MODULE): Fix wrong type information.
* builds/unix/configure.ac (XX_CFLAGS): Remove -fno-strict-aliasing.
* src/sfnt/rules.mk (SFNT_DRV_SRC): Don't include ttsbit0.c --
it is currently loaded from ttsbit.c.
Other formatting.
2005-05-23 23:33:02 +02:00
|
|
|
#define FT_MEM_QALLOC( _pointer_, _size_ ) \
|
|
|
|
FT_QAlloc( memory, _size_, \
|
|
|
|
(void**)(void*)&(_pointer_) )
|
2004-06-23 17:44:03 +02:00
|
|
|
|
* builds/amiga/makefile.os4 (WARNINGS), builds/compiler/gcc-dev.mk
(CFLAGS), builds/compiler/gcc.mk (CFLAGS): Remove
-fno-strict-aliasing.
Say you have `(Foo*)x' and want to assign, pass, or return it as
`(Bar*)'. If you simply say `x' or `(Bar*)x', then the C compiler
would warn you that type casting incompatible pointer types breaks
strict-aliasing. The solution is to cast to `(void*)' instead which
is the generic pointer type, so the compiler knows that it should
make no strict-aliasing assumption on `x'. But the problem with
`(void*)x' is that seems like in C++, unlike C, `void*' is not a
generic pointer type and assigning `void*' to `Bar*' without a cast
causes an error. The solution is to cast to `Bar*' too, with
`(Bar*)(void*)x' as the result -- this is what the patch does.
* include/freetype/cache/ftccache.h (FTC_CACHE_LOOKUP_CMP),
include/freetype/cache/ftcmru.h (FTC_MRULIST_LOOKUP_CMP): Remove
cast on lvalue, use a temporary pointer instead.
Cast temporarily to (void*) to not break strict aliasing.
* include/freetype/internal/ftmemory.h (FT_MEM_ALLOC,
FT_MEM_REALLOC, FT_MEM_QALLOC, FT_MEM_QREALLOC, FT_MEM_FREE),
src/base/ftglyph.c (FT_Glyph_To_Bitmap): Cast temporarily to (void*)
to not break strict aliasing.
* src/base/ftinit.c (FT_USE_MODULE): Fix wrong type information.
* builds/unix/configure.ac (XX_CFLAGS): Remove -fno-strict-aliasing.
* src/sfnt/rules.mk (SFNT_DRV_SRC): Don't include ttsbit0.c --
it is currently loaded from ttsbit.c.
Other formatting.
2005-05-23 23:33:02 +02:00
|
|
|
#define FT_MEM_QREALLOC( _pointer_, _current_, _size_ ) \
|
|
|
|
FT_QRealloc( memory, _current_, _size_, \
|
|
|
|
(void**)(void*)&(_pointer_) )
|
2002-03-01 03:26:22 +01:00
|
|
|
|
2002-03-30 00:23:28 +01:00
|
|
|
#endif /* !FT_DEBUG_MEMORY */
|
2000-05-16 21:51:49 +02:00
|
|
|
|
2000-06-07 22:04:56 +02:00
|
|
|
|
2002-03-30 00:23:28 +01:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* The following functions macros expect that their pointer argument is */
|
|
|
|
/* _typed_ in order to automatically compute array element sizes. */
|
|
|
|
/* */
|
2002-03-01 03:26:22 +01:00
|
|
|
|
* builds/amiga/makefile.os4 (WARNINGS), builds/compiler/gcc-dev.mk
(CFLAGS), builds/compiler/gcc.mk (CFLAGS): Remove
-fno-strict-aliasing.
Say you have `(Foo*)x' and want to assign, pass, or return it as
`(Bar*)'. If you simply say `x' or `(Bar*)x', then the C compiler
would warn you that type casting incompatible pointer types breaks
strict-aliasing. The solution is to cast to `(void*)' instead which
is the generic pointer type, so the compiler knows that it should
make no strict-aliasing assumption on `x'. But the problem with
`(void*)x' is that seems like in C++, unlike C, `void*' is not a
generic pointer type and assigning `void*' to `Bar*' without a cast
causes an error. The solution is to cast to `Bar*' too, with
`(Bar*)(void*)x' as the result -- this is what the patch does.
* include/freetype/cache/ftccache.h (FTC_CACHE_LOOKUP_CMP),
include/freetype/cache/ftcmru.h (FTC_MRULIST_LOOKUP_CMP): Remove
cast on lvalue, use a temporary pointer instead.
Cast temporarily to (void*) to not break strict aliasing.
* include/freetype/internal/ftmemory.h (FT_MEM_ALLOC,
FT_MEM_REALLOC, FT_MEM_QALLOC, FT_MEM_QREALLOC, FT_MEM_FREE),
src/base/ftglyph.c (FT_Glyph_To_Bitmap): Cast temporarily to (void*)
to not break strict aliasing.
* src/base/ftinit.c (FT_USE_MODULE): Fix wrong type information.
* builds/unix/configure.ac (XX_CFLAGS): Remove -fno-strict-aliasing.
* src/sfnt/rules.mk (SFNT_DRV_SRC): Don't include ttsbit0.c --
it is currently loaded from ttsbit.c.
Other formatting.
2005-05-23 23:33:02 +02:00
|
|
|
#define FT_MEM_NEW( _pointer_ ) \
|
2002-03-30 00:23:28 +01:00
|
|
|
FT_MEM_ALLOC( _pointer_, sizeof ( *(_pointer_) ) )
|
2001-10-24 10:04:00 +02:00
|
|
|
|
2002-03-30 00:23:28 +01:00
|
|
|
#define FT_MEM_NEW_ARRAY( _pointer_, _count_ ) \
|
|
|
|
FT_MEM_ALLOC( _pointer_, (_count_) * sizeof ( *(_pointer_) ) )
|
2001-10-24 10:04:00 +02:00
|
|
|
|
2002-03-30 00:23:28 +01:00
|
|
|
#define FT_MEM_RENEW_ARRAY( _pointer_, _old_, _new_ ) \
|
|
|
|
FT_MEM_REALLOC( _pointer_, (_old_) * sizeof ( *(_pointer_) ), \
|
|
|
|
(_new_) * sizeof ( *(_pointer_) ) )
|
2001-10-24 10:04:00 +02:00
|
|
|
|
* builds/amiga/makefile.os4 (WARNINGS), builds/compiler/gcc-dev.mk
(CFLAGS), builds/compiler/gcc.mk (CFLAGS): Remove
-fno-strict-aliasing.
Say you have `(Foo*)x' and want to assign, pass, or return it as
`(Bar*)'. If you simply say `x' or `(Bar*)x', then the C compiler
would warn you that type casting incompatible pointer types breaks
strict-aliasing. The solution is to cast to `(void*)' instead which
is the generic pointer type, so the compiler knows that it should
make no strict-aliasing assumption on `x'. But the problem with
`(void*)x' is that seems like in C++, unlike C, `void*' is not a
generic pointer type and assigning `void*' to `Bar*' without a cast
causes an error. The solution is to cast to `Bar*' too, with
`(Bar*)(void*)x' as the result -- this is what the patch does.
* include/freetype/cache/ftccache.h (FTC_CACHE_LOOKUP_CMP),
include/freetype/cache/ftcmru.h (FTC_MRULIST_LOOKUP_CMP): Remove
cast on lvalue, use a temporary pointer instead.
Cast temporarily to (void*) to not break strict aliasing.
* include/freetype/internal/ftmemory.h (FT_MEM_ALLOC,
FT_MEM_REALLOC, FT_MEM_QALLOC, FT_MEM_QREALLOC, FT_MEM_FREE),
src/base/ftglyph.c (FT_Glyph_To_Bitmap): Cast temporarily to (void*)
to not break strict aliasing.
* src/base/ftinit.c (FT_USE_MODULE): Fix wrong type information.
* builds/unix/configure.ac (XX_CFLAGS): Remove -fno-strict-aliasing.
* src/sfnt/rules.mk (SFNT_DRV_SRC): Don't include ttsbit0.c --
it is currently loaded from ttsbit.c.
Other formatting.
2005-05-23 23:33:02 +02:00
|
|
|
#define FT_MEM_QNEW( _pointer_ ) \
|
2004-06-23 17:44:03 +02:00
|
|
|
FT_MEM_QALLOC( _pointer_, sizeof ( *(_pointer_) ) )
|
|
|
|
|
|
|
|
#define FT_MEM_QNEW_ARRAY( _pointer_, _count_ ) \
|
|
|
|
FT_MEM_QALLOC( _pointer_, (_count_) * sizeof ( *(_pointer_) ) )
|
|
|
|
|
|
|
|
#define FT_MEM_QRENEW_ARRAY( _pointer_, _old_, _new_ ) \
|
|
|
|
FT_MEM_QREALLOC( _pointer_, (_old_) * sizeof ( *(_pointer_) ), \
|
|
|
|
(_new_) * sizeof ( *(_pointer_) ) )
|
|
|
|
|
2000-05-16 21:51:49 +02:00
|
|
|
|
2002-03-30 00:23:28 +01:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* the following macros are obsolete but kept for compatibility reasons */
|
|
|
|
/* */
|
2002-03-01 03:26:22 +01:00
|
|
|
|
2002-03-30 00:23:28 +01:00
|
|
|
#define FT_MEM_ALLOC_ARRAY( _pointer_, _count_, _type_ ) \
|
|
|
|
FT_MEM_ALLOC( _pointer_, (_count_) * sizeof ( _type_ ) )
|
2000-05-16 21:51:49 +02:00
|
|
|
|
2002-03-30 00:23:28 +01:00
|
|
|
#define FT_MEM_REALLOC_ARRAY( _pointer_, _old_, _new_, _type_ ) \
|
|
|
|
FT_MEM_REALLOC( _pointer_, (_old_) * sizeof ( _type ), \
|
|
|
|
(_new_) * sizeof ( _type_ ) )
|
2000-05-16 21:51:49 +02:00
|
|
|
|
2002-03-01 03:26:22 +01:00
|
|
|
|
2002-03-30 00:23:28 +01:00
|
|
|
/*************************************************************************/
|
|
|
|
/* */
|
|
|
|
/* The following macros are variants of their FT_MEM_XXXX equivalents; */
|
|
|
|
/* they are used to set an _implicit_ `error' variable and return TRUE */
|
|
|
|
/* if an error occured (i.e. if 'error != 0'). */
|
|
|
|
/* */
|
2000-05-16 21:51:49 +02:00
|
|
|
|
2002-03-22 14:52:37 +01:00
|
|
|
#define FT_ALLOC( _pointer_, _size_ ) \
|
|
|
|
FT_SET_ERROR( FT_MEM_ALLOC( _pointer_, _size_ ) )
|
|
|
|
|
|
|
|
#define FT_REALLOC( _pointer_, _current_, _size_ ) \
|
|
|
|
FT_SET_ERROR( FT_MEM_REALLOC( _pointer_, _current_, _size_ ) )
|
|
|
|
|
2004-06-23 17:44:03 +02:00
|
|
|
#define FT_QALLOC( _pointer_, _size_ ) \
|
|
|
|
FT_SET_ERROR( FT_MEM_QALLOC( _pointer_, _size_ ) )
|
|
|
|
|
|
|
|
#define FT_QREALLOC( _pointer_, _current_, _size_ ) \
|
|
|
|
FT_SET_ERROR( FT_MEM_QREALLOC( _pointer_, _current_, _size_ ) )
|
|
|
|
|
2005-03-04 00:05:29 +01:00
|
|
|
|
2005-03-03 14:58:13 +01:00
|
|
|
#define FT_FREE( _pointer_ ) \
|
|
|
|
FT_MEM_FREE( _pointer_ )
|
|
|
|
|
2004-06-24 08:56:06 +02:00
|
|
|
|
2005-03-04 00:05:29 +01:00
|
|
|
#define FT_NEW( _pointer_ ) \
|
|
|
|
FT_ALLOC( _pointer_, sizeof ( *(_pointer_) ) )
|
2002-03-01 03:26:22 +01:00
|
|
|
|
2005-03-04 00:05:29 +01:00
|
|
|
#define FT_NEW_ARRAY( _pointer_, _count_ ) \
|
|
|
|
FT_ALLOC( _pointer_, sizeof ( *(_pointer_) ) * (_count_) )
|
2002-03-25 17:35:13 +01:00
|
|
|
|
2005-03-04 00:05:29 +01:00
|
|
|
#define FT_RENEW_ARRAY( _pointer_, _old_, _new_ ) \
|
|
|
|
FT_REALLOC( _pointer_, sizeof ( *(_pointer_) ) * (_old_), \
|
|
|
|
sizeof ( *(_pointer_) ) * (_new_) )
|
2000-05-16 21:51:49 +02:00
|
|
|
|
2005-03-04 00:05:29 +01:00
|
|
|
#define FT_QNEW( _pointer_ ) \
|
|
|
|
FT_QALLOC( _pointer_, sizeof ( *(_pointer_) ) )
|
2004-06-23 17:44:03 +02:00
|
|
|
|
2005-03-04 00:05:29 +01:00
|
|
|
#define FT_QNEW_ARRAY( _pointer_, _count_ ) \
|
|
|
|
FT_QALLOC( _pointer_, sizeof ( *(_pointer_) ) * (_count_) )
|
2004-06-23 17:44:03 +02:00
|
|
|
|
2005-03-04 00:05:29 +01:00
|
|
|
#define FT_QRENEW_ARRAY( _pointer_, _old_, _new_ ) \
|
|
|
|
FT_QREALLOC( _pointer_, sizeof ( *(_pointer_) ) * (_old_), \
|
|
|
|
sizeof ( *(_pointer_) ) * (_new_) )
|
2004-06-23 17:44:03 +02:00
|
|
|
|
2004-06-24 08:56:06 +02:00
|
|
|
|
2005-03-04 00:05:29 +01:00
|
|
|
#define FT_ALLOC_ARRAY( _pointer_, _count_, _type_ ) \
|
|
|
|
FT_ALLOC( _pointer_, (_count_) * sizeof ( _type_ ) )
|
2000-07-18 08:50:03 +02:00
|
|
|
|
2005-03-04 00:05:29 +01:00
|
|
|
#define FT_REALLOC_ARRAY( _pointer_, _old_, _new_, _type_ ) \
|
|
|
|
FT_REALLOC( _pointer, (_old_) * sizeof ( _type_ ), \
|
|
|
|
(_new_) * sizeof ( _type_ ) )
|
2002-03-30 00:23:28 +01:00
|
|
|
|
2005-03-16 00:31:48 +01:00
|
|
|
|
2002-03-22 14:52:37 +01:00
|
|
|
/* */
|
|
|
|
|
2002-03-30 00:23:28 +01:00
|
|
|
|
2000-12-01 00:12:33 +01:00
|
|
|
FT_END_HEADER
|
2000-08-01 15:17:04 +02:00
|
|
|
|
2000-12-01 00:12:33 +01:00
|
|
|
#endif /* __FTMEMORY_H__ */
|
2000-05-16 21:51:49 +02:00
|
|
|
|
2000-07-18 08:50:03 +02:00
|
|
|
|
2000-05-16 21:51:49 +02:00
|
|
|
/* END */
|