1049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/ 2049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 3049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* ttbdf.c */ 4049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 5049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* TrueType and OpenType embedded BDF properties (body). */ 6049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 7a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/* Copyright 2005, 2006, 2010, 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#include <ft2build.h> 20049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_INTERNAL_DEBUG_H 21049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_INTERNAL_STREAM_H 22049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_TRUETYPE_TAGS_H 23049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "ttbdf.h" 24049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 25049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "sferrors.h" 26049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 27049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 28049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifdef TT_CONFIG_OPTION_BDF 29049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 30049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 31049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 32049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* The macro FT_COMPONENT is used in trace mode. It is an implicit */ 33049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */ 34049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* messages during execution. */ 35049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 36049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#undef FT_COMPONENT 37049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_COMPONENT trace_ttbdf 38049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 39049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 40049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_LOCAL_DEF( void ) 41049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_face_free_bdf_props( TT_Face face ) 42049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 43049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_BDF bdf = &face->bdf; 44049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 45049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 46049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( bdf->loaded ) 47049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 48049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Stream stream = FT_FACE(face)->stream; 49049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 50049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 51049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( bdf->table != NULL ) 52049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_FRAME_RELEASE( bdf->table ); 53049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 54049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project bdf->table_end = NULL; 55049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project bdf->strings = NULL; 56049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project bdf->strings_size = 0; 57049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 58049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 59049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 60049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 61049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project static FT_Error 62049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_face_load_bdf_props( TT_Face face, 63049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Stream stream ) 64049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 65049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_BDF bdf = &face->bdf; 66049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ULong length; 67049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Error error; 68049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 69049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 70049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ZERO( bdf ); 71049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 72049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = tt_face_goto_table( face, TTAG_BDF, stream, &length ); 73049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( error || 74049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project length < 8 || 75049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_FRAME_EXTRACT( length, bdf->table ) ) 76049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 77a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang error = FT_THROW( Invalid_Table ); 78049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project goto Exit; 79049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 80049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 81049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project bdf->table_end = bdf->table + length; 82049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 83049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 84049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Byte* p = bdf->table; 85049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt version = FT_NEXT_USHORT( p ); 86049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt num_strikes = FT_NEXT_USHORT( p ); 87295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_ULong strings = FT_NEXT_ULONG ( p ); 88049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt count; 89049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Byte* strike; 90049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 91049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 92049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( version != 0x0001 || 93049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project strings < 8 || 94049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ( strings - 8 ) / 4 < num_strikes || 95049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project strings + 1 > length ) 96049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 97049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project goto BadTable; 98049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 99049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 100049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project bdf->num_strikes = num_strikes; 101049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project bdf->strings = bdf->table + strings; 102049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project bdf->strings_size = length - strings; 103049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 104049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project count = bdf->num_strikes; 105049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project p = bdf->table + 8; 106049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project strike = p + count * 4; 107049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 108049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 109049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project for ( ; count > 0; count-- ) 110049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 111049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt num_items = FT_PEEK_USHORT( p + 2 ); 112049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 113049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* 114049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * We don't need to check the value sets themselves, since this 115049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project * is done later. 116049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project */ 117049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project strike += 10 * num_items; 118049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 119049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project p += 4; 120049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 121049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 122049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( strike > bdf->strings ) 123049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project goto BadTable; 124049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 125049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 126049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project bdf->loaded = 1; 127049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 128049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project Exit: 129049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return error; 130049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 131049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project BadTable: 132049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_FRAME_RELEASE( bdf->table ); 133049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_ZERO( bdf ); 134a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang error = FT_THROW( Invalid_Table ); 135049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project goto Exit; 136049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 137049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 138049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 139049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_LOCAL_DEF( FT_Error ) 140049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project tt_face_find_bdf_prop( TT_Face face, 141049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project const char* property_name, 142049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project BDF_PropertyRec *aprop ) 143049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 144295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner TT_BDF bdf = &face->bdf; 145295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_Size size = FT_FACE(face)->size; 146a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_Error error = FT_Err_Ok; 147295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_Byte* p; 148295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_UInt count; 149295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_Byte* strike; 150295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner FT_Offset property_len; 151049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 152049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 153049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project aprop->type = BDF_PROPERTY_TYPE_NONE; 154049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 155049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( bdf->loaded == 0 ) 156049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 157049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project error = tt_face_load_bdf_props( face, FT_FACE( face )->stream ); 158049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( error ) 159049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project goto Exit; 160049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 161049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 162049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project count = bdf->num_strikes; 163049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project p = bdf->table + 8; 164049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project strike = p + 4 * count; 165049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 166a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang error = FT_ERR( Invalid_Argument ); 167049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 168049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( size == NULL || property_name == NULL ) 169049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project goto Exit; 170049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 171049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project property_len = ft_strlen( property_name ); 172049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( property_len == 0 ) 173049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project goto Exit; 174049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 175049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project for ( ; count > 0; count-- ) 176049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 177049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt _ppem = FT_NEXT_USHORT( p ); 178049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt _count = FT_NEXT_USHORT( p ); 179049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 180049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( _ppem == size->metrics.y_ppem ) 181049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 182049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project count = _count; 183049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project goto FoundStrike; 184049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 185049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 186049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project strike += 10 * _count; 187049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 188049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project goto Exit; 189049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 190049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FoundStrike: 191049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project p = strike; 192049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project for ( ; count > 0; count-- ) 193049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 194049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt type = FT_PEEK_USHORT( p + 4 ); 195049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 196049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( ( type & 0x10 ) != 0 ) 197049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 198049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt32 name_offset = FT_PEEK_ULONG( p ); 199049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt32 value = FT_PEEK_ULONG( p + 6 ); 200049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 201049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* be a bit paranoid for invalid entries here */ 202049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( name_offset < bdf->strings_size && 203049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project property_len < bdf->strings_size - name_offset && 204049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ft_strncmp( property_name, 205049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project (const char*)bdf->strings + name_offset, 206049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project bdf->strings_size - name_offset ) == 0 ) 207049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 208049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project switch ( type & 0x0F ) 209049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 210049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project case 0x00: /* string */ 211049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project case 0x01: /* atoms */ 212049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* check that the content is really 0-terminated */ 213049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project if ( value < bdf->strings_size && 214049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ft_memchr( bdf->strings + value, 0, bdf->strings_size ) ) 215049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 216049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project aprop->type = BDF_PROPERTY_TYPE_ATOM; 217049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project aprop->u.atom = (const char*)bdf->strings + value; 218a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang error = FT_Err_Ok; 219049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project goto Exit; 220049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 221049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project break; 222049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 223049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project case 0x02: 224049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project aprop->type = BDF_PROPERTY_TYPE_INTEGER; 225049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project aprop->u.integer = (FT_Int32)value; 226a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang error = FT_Err_Ok; 227049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project goto Exit; 228049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 229049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project case 0x03: 230049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project aprop->type = BDF_PROPERTY_TYPE_CARDINAL; 231049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project aprop->u.cardinal = value; 232a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang error = FT_Err_Ok; 233049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project goto Exit; 234049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 235049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project default: 236049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project ; 237049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 238049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 239049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 240049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project p += 10; 241049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 242049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 243049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project Exit: 244049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project return error; 245049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } 246049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 247049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* TT_CONFIG_OPTION_BDF */ 248049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 249049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 250049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* END */ 251