1049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/ 2049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 3049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* ftutil.c */ 4049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 5049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* FreeType utility file for memory and list management (body). */ 6049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 7049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* Copyright 2002, 2004, 2005, 2006, 2007 by */ 8049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* David Turner, Robert Wilhelm, and Werner Lemberg. */ 9049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 10049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* This file is part of the FreeType project, and may only be used, */ 11049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* modified, and distributed under the terms of the FreeType project */ 12049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* this file you indicate that you have read the license and */ 14049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* understand and accept it fully. */ 15049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 16049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/ 17049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 18049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 19049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include <ft2build.h> 20049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_INTERNAL_DEBUG_H 21049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_INTERNAL_MEMORY_H 22049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_INTERNAL_OBJECTS_H 23049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_LIST_H 24049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 25049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 26049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 27049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 28049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* The macro FT_COMPONENT is used in trace mode. It is an implicit */ 29049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */ 30049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* messages during execution. */ 31049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 32049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#undef FT_COMPONENT 33049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_COMPONENT trace_memory 34049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 35049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 36049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 37049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 38049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 39049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** *****/ 40049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** *****/ 41049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** M E M O R Y M A N A G E M E N T *****/ 42049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** *****/ 43049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** *****/ 44049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 45049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 46049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 47049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 48049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 49049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_BASE_DEF( FT_Pointer ) 50049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ft_mem_alloc( FT_Memory memory, 51049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Long size, 52049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error *p_error ) 53049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 54049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error error; 55049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Pointer block = ft_mem_qalloc( memory, size, &error ); 56049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 57049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( !error && size > 0 ) 58049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_MEM_ZERO( block, size ); 59049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 60049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project *p_error = error; 61049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return block; 62049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 63049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 64049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 65049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_BASE_DEF( FT_Pointer ) 66049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ft_mem_qalloc( FT_Memory memory, 67049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Long size, 68049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error *p_error ) 69049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 70049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error error = FT_Err_Ok; 71049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Pointer block = NULL; 72049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 73049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 74049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( size > 0 ) 75049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 76049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project block = memory->alloc( memory, size ); 77049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( block == NULL ) 78049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = FT_Err_Out_Of_Memory; 79049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 80049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project else if ( size < 0 ) 81049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 82049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* may help catch/prevent security issues */ 83049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = FT_Err_Invalid_Argument; 84049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 85049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 86049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project *p_error = error; 87049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return block; 88049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 89049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 90049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 91049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_BASE_DEF( FT_Pointer ) 92049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ft_mem_realloc( FT_Memory memory, 93049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Long item_size, 94049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Long cur_count, 95049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Long new_count, 96049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project void* block, 97049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error *p_error ) 98049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 99049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error error = FT_Err_Ok; 100049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 101049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project block = ft_mem_qrealloc( memory, item_size, 102049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project cur_count, new_count, block, &error ); 103049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( !error && new_count > cur_count ) 104049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_MEM_ZERO( (char*)block + cur_count * item_size, 105049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ( new_count - cur_count ) * item_size ); 106049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 107049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project *p_error = error; 108049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return block; 109049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 110049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 111049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 112049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_BASE_DEF( FT_Pointer ) 113049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ft_mem_qrealloc( FT_Memory memory, 114049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Long item_size, 115049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Long cur_count, 116049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Long new_count, 117049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project void* block, 118049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error *p_error ) 119049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 120049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error error = FT_Err_Ok; 121049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 122049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 123049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* Note that we now accept `item_size == 0' as a valid parameter, in 124049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * order to cover very weird cases where an ALLOC_MULT macro would be 125049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * called. 126049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project */ 127049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( cur_count < 0 || new_count < 0 || item_size < 0 ) 128049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 129049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* may help catch/prevent nasty security issues */ 130049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = FT_Err_Invalid_Argument; 131049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 132049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project else if ( new_count == 0 || item_size == 0 ) 133049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 134049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ft_mem_free( memory, block ); 135049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project block = NULL; 136049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 137049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project else if ( new_count > FT_INT_MAX/item_size ) 138049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 139049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = FT_Err_Array_Too_Large; 140049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 141049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project else if ( cur_count == 0 ) 142049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 143049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ASSERT( block == NULL ); 144049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 145049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project block = ft_mem_alloc( memory, new_count*item_size, &error ); 146049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 147049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project else 148049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 149049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Pointer block2; 150049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Long cur_size = cur_count*item_size; 151049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Long new_size = new_count*item_size; 152049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 153049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 154049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project block2 = memory->realloc( memory, cur_size, new_size, block ); 155049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( block2 == NULL ) 156049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = FT_Err_Out_Of_Memory; 157049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project else 158049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project block = block2; 159049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 160049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 161049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project *p_error = error; 162049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return block; 163049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 164049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 165049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 166049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_BASE_DEF( void ) 167049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ft_mem_free( FT_Memory memory, 168049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project const void *P ) 169049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 170049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( P ) 171049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project memory->free( memory, (void*)P ); 172049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 173049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 174049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 175049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_BASE_DEF( FT_Pointer ) 176049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ft_mem_dup( FT_Memory memory, 177049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project const void* address, 178049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ULong size, 179049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error *p_error ) 180049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 181049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error error; 182049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Pointer p = ft_mem_qalloc( memory, size, &error ); 183049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 184049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 185049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( !error && address ) 186049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ft_memcpy( p, address, size ); 187049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 188049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project *p_error = error; 189049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return p; 190049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 191049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 192049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 193049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_BASE_DEF( FT_Pointer ) 194049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ft_mem_strdup( FT_Memory memory, 195049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project const char* str, 196049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error *p_error ) 197049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 198049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ULong len = str ? (FT_ULong)ft_strlen( str ) + 1 199049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project : 0; 200049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 201049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 202049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return ft_mem_dup( memory, str, len, p_error ); 203049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 204049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 205049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 206049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_BASE_DEF( FT_Int ) 207049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ft_mem_strcpyn( char* dst, 208049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project const char* src, 209049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ULong size ) 210049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 211049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project while ( size > 1 && *src != 0 ) 212049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 213049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project *dst++ = *src++; 214049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project size--; 215049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 216049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 217049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project *dst = 0; /* always zero-terminate */ 218049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 219049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return *src != 0; 220049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 221049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 222049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 223049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 224049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 225049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 226049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** *****/ 227049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** *****/ 228049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** D O U B L Y L I N K E D L I S T S *****/ 229049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** *****/ 230049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /***** *****/ 231049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 232049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 233049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 234049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 235049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#undef FT_COMPONENT 236049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_COMPONENT trace_list 237049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 238049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* documentation is in ftlist.h */ 239049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 240049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_EXPORT_DEF( FT_ListNode ) 241049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_List_Find( FT_List list, 242049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project void* data ) 243049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 244049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ListNode cur; 245049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 246049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 247049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project cur = list->head; 248049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project while ( cur ) 249049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 250049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( cur->data == data ) 251049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return cur; 252049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 253049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project cur = cur->next; 254049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 255049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 256049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return (FT_ListNode)0; 257049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 258049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 259049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 260049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* documentation is in ftlist.h */ 261049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 262049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_EXPORT_DEF( void ) 263049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_List_Add( FT_List list, 264049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ListNode node ) 265049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 266049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ListNode before = list->tail; 267049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 268049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 269049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project node->next = 0; 270049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project node->prev = before; 271049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 272049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( before ) 273049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project before->next = node; 274049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project else 275049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project list->head = node; 276049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 277049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project list->tail = node; 278049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 279049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 280049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 281049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* documentation is in ftlist.h */ 282049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 283049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_EXPORT_DEF( void ) 284049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_List_Insert( FT_List list, 285049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ListNode node ) 286049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 287049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ListNode after = list->head; 288049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 289049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 290049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project node->next = after; 291049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project node->prev = 0; 292049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 293049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( !after ) 294049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project list->tail = node; 295049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project else 296049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project after->prev = node; 297049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 298049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project list->head = node; 299049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 300049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 301049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 302049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* documentation is in ftlist.h */ 303049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 304049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_EXPORT_DEF( void ) 305049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_List_Remove( FT_List list, 306049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ListNode node ) 307049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 308049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ListNode before, after; 309049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 310049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 311049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project before = node->prev; 312049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project after = node->next; 313049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 314049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( before ) 315049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project before->next = after; 316049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project else 317049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project list->head = after; 318049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 319049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( after ) 320049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project after->prev = before; 321049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project else 322049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project list->tail = before; 323049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 324049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 325049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 326049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* documentation is in ftlist.h */ 327049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 328049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_EXPORT_DEF( void ) 329049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_List_Up( FT_List list, 330049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ListNode node ) 331049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 332049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ListNode before, after; 333049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 334049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 335049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project before = node->prev; 336049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project after = node->next; 337049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 338049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* check whether we are already on top of the list */ 339049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( !before ) 340049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return; 341049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 342049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project before->next = after; 343049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 344049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( after ) 345049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project after->prev = before; 346049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project else 347049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project list->tail = before; 348049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 349049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project node->prev = 0; 350049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project node->next = list->head; 351049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project list->head->prev = node; 352049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project list->head = node; 353049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 354049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 355049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 356049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* documentation is in ftlist.h */ 357049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 358049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_EXPORT_DEF( FT_Error ) 359049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_List_Iterate( FT_List list, 360049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_List_Iterator iterator, 361049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project void* user ) 362049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 363049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ListNode cur = list->head; 364049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error error = FT_Err_Ok; 365049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 366049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 367049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project while ( cur ) 368049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 369049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ListNode next = cur->next; 370049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 371049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 372049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = iterator( cur, user ); 373049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( error ) 374049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project break; 375049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 376049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project cur = next; 377049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 378049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 379049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return error; 380049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 381049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 382049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 383049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* documentation is in ftlist.h */ 384049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 385049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_EXPORT_DEF( void ) 386049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_List_Finalize( FT_List list, 387049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_List_Destructor destroy, 388049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Memory memory, 389049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project void* user ) 390049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 391049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ListNode cur; 392049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 393049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 394049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project cur = list->head; 395049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project while ( cur ) 396049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 397049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ListNode next = cur->next; 398049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project void* data = cur->data; 399049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 400049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 401049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( destroy ) 402049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project destroy( memory, data, user ); 403049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 404049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_FREE( cur ); 405049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project cur = next; 406049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 407049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 408049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project list->head = 0; 409049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project list->tail = 0; 410049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 411049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 412049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 413049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_BASE_DEF( FT_UInt32 ) 414049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ft_highpow2( FT_UInt32 value ) 415049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 416049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt32 value2; 417049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 418049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 419049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* 420049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * We simply clear the lowest bit in each iteration. When 421049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * we reach 0, we know that the previous value was our result. 422049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project */ 423049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project for ( ;; ) 424049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 425049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project value2 = value & (value - 1); /* clear lowest bit */ 426049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( value2 == 0 ) 427049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project break; 428049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 429049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project value = value2; 430049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 431049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return value; 432049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 433049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 434049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 435049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef FT_CONFIG_OPTION_OLD_INTERNALS 436049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 437049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_BASE_DEF( FT_Error ) 438049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Alloc( FT_Memory memory, 439049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Long size, 440049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project void* *P ) 441049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 442049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error error; 443049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 444049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 445049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (void)FT_ALLOC( *P, size ); 446049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return error; 447049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 448049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 449049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 450049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_BASE_DEF( FT_Error ) 451049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_QAlloc( FT_Memory memory, 452049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Long size, 453049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project void* *p ) 454049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 455049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error error; 456049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 457049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 458049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (void)FT_QALLOC( *p, size ); 459049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return error; 460049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 461049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 462049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 463049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_BASE_DEF( FT_Error ) 464049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Realloc( FT_Memory memory, 465049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Long current, 466049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Long size, 467049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project void* *P ) 468049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 469049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error error; 470049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 471049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 472049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (void)FT_REALLOC( *P, current, size ); 473049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return error; 474049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 475049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 476049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 477049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_BASE_DEF( FT_Error ) 478049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_QRealloc( FT_Memory memory, 479049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Long current, 480049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Long size, 481049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project void* *p ) 482049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 483049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error error; 484049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 485049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 486049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (void)FT_QREALLOC( *p, current, size ); 487049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return error; 488049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 489049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 490049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 491049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_BASE_DEF( void ) 492049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Free( FT_Memory memory, 493049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project void* *P ) 494049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 495049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( *P ) 496049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_MEM_FREE( *P ); 497049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 498049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 499049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* FT_CONFIG_OPTION_OLD_INTERNALS */ 500049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 501049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* END */ 502