1049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/ 2049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 3049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* ftsystem.c */ 4049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 5049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* ANSI-specific FreeType low-level system interface (body). */ 6049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 7a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/* Copyright 1996-2002, 2006, 2008-2011, 2013 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 /* */ 20049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* This file contains the default interface used by FreeType to access */ 21049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* low-level, i.e. memory management, i/o access as well as thread */ 22049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* synchronisation. It can be replaced by user-specific routines if */ 23049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* necessary. */ 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#include <ft2build.h> 29049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_CONFIG_CONFIG_H 30049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_INTERNAL_DEBUG_H 31049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_INTERNAL_STREAM_H 32049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_SYSTEM_H 33049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_ERRORS_H 34049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_TYPES_H 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 /* MEMORY MANAGEMENT INTERFACE */ 40049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 41049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 42049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 43049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 44049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 45049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* It is not necessary to do any error checking for the */ 46049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* allocation-related functions. This will be done by the higher level */ 47049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* routines like ft_mem_alloc() or ft_mem_realloc(). */ 48049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 49049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 50049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 51049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 52049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 53049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 54049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Function> */ 55049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* ft_alloc */ 56049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 57049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Description> */ 58049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* The memory allocation function. */ 59049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 60049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Input> */ 61049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* memory :: A pointer to the memory object. */ 62049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 63049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* size :: The requested size in bytes. */ 64049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 65049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Return> */ 66049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* The address of newly allocated block. */ 67049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 68049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_CALLBACK_DEF( void* ) 69049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ft_alloc( FT_Memory memory, 70049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project long size ) 71049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 72049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UNUSED( memory ); 73049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 74049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return ft_smalloc( size ); 75049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 76049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 77049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 78049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 79049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 80049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Function> */ 81049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* ft_realloc */ 82049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 83049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Description> */ 84049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* The memory reallocation function. */ 85049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 86049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Input> */ 87049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* memory :: A pointer to the memory object. */ 88049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 89049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* cur_size :: The current size of the allocated memory block. */ 90049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 91049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* new_size :: The newly requested size in bytes. */ 92049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 93049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* block :: The current address of the block in memory. */ 94049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 95049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Return> */ 96049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* The address of the reallocated memory block. */ 97049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 98049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_CALLBACK_DEF( void* ) 99049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ft_realloc( FT_Memory memory, 100049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project long cur_size, 101049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project long new_size, 102049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project void* block ) 103049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 104049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UNUSED( memory ); 105049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UNUSED( cur_size ); 106049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 107049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return ft_srealloc( block, new_size ); 108049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 109049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 110049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 111049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 112049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 113049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Function> */ 114049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* ft_free */ 115049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 116049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Description> */ 117049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* The memory release function. */ 118049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 119049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Input> */ 120049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* memory :: A pointer to the memory object. */ 121049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 122049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* block :: The address of block in memory to be freed. */ 123049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 124049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_CALLBACK_DEF( void ) 125049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ft_free( FT_Memory memory, 126049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project void* block ) 127049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 128049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UNUSED( memory ); 129049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 130049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ft_sfree( block ); 131049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 132049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 133049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 134049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 135049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 136049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* RESOURCE MANAGEMENT INTERFACE */ 137049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 138049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 139049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 140c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner#ifndef FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT 141049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 142049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 143049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 144049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* The macro FT_COMPONENT is used in trace mode. It is an implicit */ 145049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */ 146049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* messages during execution. */ 147049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 148049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#undef FT_COMPONENT 149049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_COMPONENT trace_io 150049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 151049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* We use the macro STREAM_FILE for convenience to extract the */ 152049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* system-specific stream handle from a given FreeType stream object */ 153049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define STREAM_FILE( stream ) ( (FT_FILE*)stream->descriptor.pointer ) 154049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 155049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 156049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 157049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 158049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Function> */ 159049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* ft_ansi_stream_close */ 160049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 161049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Description> */ 162049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* The function to close a stream. */ 163049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 164049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Input> */ 165049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* stream :: A pointer to the stream object. */ 166049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 167049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_CALLBACK_DEF( void ) 168049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ft_ansi_stream_close( FT_Stream stream ) 169049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 170049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ft_fclose( STREAM_FILE( stream ) ); 171049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 172049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project stream->descriptor.pointer = NULL; 173049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project stream->size = 0; 174049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project stream->base = 0; 175049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 176049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 177049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 178049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 179049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 180049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Function> */ 181049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* ft_ansi_stream_io */ 182049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 183049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Description> */ 184049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* The function to open a stream. */ 185049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 186049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Input> */ 187049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* stream :: A pointer to the stream object. */ 188049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 189049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* offset :: The position in the data stream to start reading. */ 190049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 191049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* buffer :: The address of buffer to store the read data. */ 192049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 193049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* count :: The number of bytes to read from the stream. */ 194049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 195049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Return> */ 196aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich /* The number of bytes actually read. If `count' is zero (this is, */ 197aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich /* the function is used for seeking), a non-zero return value */ 198aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich /* indicates an error. */ 199049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 200049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_CALLBACK_DEF( unsigned long ) 201049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ft_ansi_stream_io( FT_Stream stream, 202049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project unsigned long offset, 203049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project unsigned char* buffer, 204049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project unsigned long count ) 205049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 206049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_FILE* file; 207049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 208049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 209aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich if ( !count && offset > stream->size ) 210aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich return 1; 211aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich 212049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project file = STREAM_FILE( stream ); 213049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 214295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner if ( stream->pos != offset ) 215295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner ft_fseek( file, offset, SEEK_SET ); 216049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 217049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return (unsigned long)ft_fread( buffer, 1, count, file ); 218049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 219049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 220049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 221049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* documentation is in ftstream.h */ 222049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 223049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_BASE_DEF( FT_Error ) 224049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Stream_Open( FT_Stream stream, 225049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project const char* filepathname ) 226049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 227049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_FILE* file; 228049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 229049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 230049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( !stream ) 231a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang return FT_THROW( Invalid_Stream_Handle ); 232049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 2338583905b8952672a083f21fd8945f329b98aa35bDavid 'Digit' Turner stream->descriptor.pointer = NULL; 2348583905b8952672a083f21fd8945f329b98aa35bDavid 'Digit' Turner stream->pathname.pointer = (char*)filepathname; 2358583905b8952672a083f21fd8945f329b98aa35bDavid 'Digit' Turner stream->base = 0; 2368583905b8952672a083f21fd8945f329b98aa35bDavid 'Digit' Turner stream->pos = 0; 2378583905b8952672a083f21fd8945f329b98aa35bDavid 'Digit' Turner stream->read = NULL; 2388583905b8952672a083f21fd8945f329b98aa35bDavid 'Digit' Turner stream->close = NULL; 2398583905b8952672a083f21fd8945f329b98aa35bDavid 'Digit' Turner 240049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project file = ft_fopen( filepathname, "rb" ); 241049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( !file ) 242049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 243295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_ERROR(( "FT_Stream_Open:" 244295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner " could not open `%s'\n", filepathname )); 245049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 246a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang return FT_THROW( Cannot_Open_Resource ); 247049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 248049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 249049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ft_fseek( file, 0, SEEK_END ); 250049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project stream->size = ft_ftell( file ); 2518583905b8952672a083f21fd8945f329b98aa35bDavid 'Digit' Turner if ( !stream->size ) 2528583905b8952672a083f21fd8945f329b98aa35bDavid 'Digit' Turner { 2538583905b8952672a083f21fd8945f329b98aa35bDavid 'Digit' Turner FT_ERROR(( "FT_Stream_Open:" )); 2548583905b8952672a083f21fd8945f329b98aa35bDavid 'Digit' Turner FT_ERROR(( " opened `%s' but zero-sized\n", filepathname )); 2558583905b8952672a083f21fd8945f329b98aa35bDavid 'Digit' Turner ft_fclose( file ); 256a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang return FT_THROW( Cannot_Open_Stream ); 2578583905b8952672a083f21fd8945f329b98aa35bDavid 'Digit' Turner } 258049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ft_fseek( file, 0, SEEK_SET ); 259049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 260049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project stream->descriptor.pointer = file; 261049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project stream->read = ft_ansi_stream_io; 262049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project stream->close = ft_ansi_stream_close; 263049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 264049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_TRACE1(( "FT_Stream_Open:" )); 265049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_TRACE1(( " opened `%s' (%d bytes) successfully\n", 266049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project filepathname, stream->size )); 267049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 268049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return FT_Err_Ok; 269049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 270049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 271c3ee10bfa1f76a18500b487de9c85757375b48f3David 'Digit' Turner#endif /* !FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT */ 272049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 273049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef FT_DEBUG_MEMORY 274049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 275049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project extern FT_Int 276049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ft_mem_debug_init( FT_Memory memory ); 277049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 278049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project extern void 279049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ft_mem_debug_done( FT_Memory memory ); 280049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 281049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 282049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 283049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 284049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* documentation is in ftobjs.h */ 285049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 286049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_BASE_DEF( FT_Memory ) 287049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_New_Memory( void ) 288049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 289049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Memory memory; 290049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 291049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 292049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project memory = (FT_Memory)ft_smalloc( sizeof ( *memory ) ); 293049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( memory ) 294049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 295049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project memory->user = 0; 296049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project memory->alloc = ft_alloc; 297049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project memory->realloc = ft_realloc; 298049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project memory->free = ft_free; 299049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef FT_DEBUG_MEMORY 300049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ft_mem_debug_init( memory ); 301049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 302049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 303049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 304049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return memory; 305049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 306049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 307049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 308049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* documentation is in ftobjs.h */ 309049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 310049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_BASE_DEF( void ) 311049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Done_Memory( FT_Memory memory ) 312049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 313049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef FT_DEBUG_MEMORY 314049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ft_mem_debug_done( memory ); 315049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 3160a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project ft_sfree( memory ); 317049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 318049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 319049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 320049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* END */ 321