1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/***************************************************************************/ 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ttbdf.c */ 4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* TrueType and OpenType embedded BDF properties (body). */ 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* Copyright 2005, 2006, 2010, 2013 by */ 8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* David Turner, Robert Wilhelm, and Werner Lemberg. */ 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* This file is part of the FreeType project, and may only be used, */ 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* modified, and distributed under the terms of the FreeType project */ 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* this file you indicate that you have read the license and */ 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* understand and accept it fully. */ 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/***************************************************************************/ 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/ft2build.h" 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/freetype/internal/ftdebug.h" 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/freetype/internal/ftstream.h" 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/freetype/tttags.h" 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "ttbdf.h" 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "sferrors.h" 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef TT_CONFIG_OPTION_BDF 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* The macro FT_COMPONENT is used in trace mode. It is an implicit */ 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* parameter of the FT_TRACE() and FT_ERROR() macros, used to print/log */ 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* messages during execution. */ 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#undef FT_COMPONENT 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define FT_COMPONENT trace_ttbdf 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_LOCAL_DEF( void ) 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov tt_face_free_bdf_props( TT_Face face ) 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_BDF bdf = &face->bdf; 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( bdf->loaded ) 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Stream stream = FT_FACE(face)->stream; 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( bdf->table != NULL ) 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_FRAME_RELEASE( bdf->table ); 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov bdf->table_end = NULL; 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov bdf->strings = NULL; 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov bdf->strings_size = 0; 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov static FT_Error 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov tt_face_load_bdf_props( TT_Face face, 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Stream stream ) 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_BDF bdf = &face->bdf; 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong length; 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Error error; 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ZERO( bdf ); 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov error = tt_face_goto_table( face, TTAG_BDF, stream, &length ); 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( error || 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov length < 8 || 75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_FRAME_EXTRACT( length, bdf->table ) ) 76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov error = FT_THROW( Invalid_Table ); 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov goto Exit; 79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov bdf->table_end = bdf->table + length; 82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte* p = bdf->table; 85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt version = FT_NEXT_USHORT( p ); 86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt num_strikes = FT_NEXT_USHORT( p ); 87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong strings = FT_NEXT_ULONG ( p ); 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt count; 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte* strike; 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( version != 0x0001 || 93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov strings < 8 || 94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ( strings - 8 ) / 4 < num_strikes || 95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov strings + 1 > length ) 96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov goto BadTable; 98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov bdf->num_strikes = num_strikes; 101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov bdf->strings = bdf->table + strings; 102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov bdf->strings_size = length - strings; 103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov count = bdf->num_strikes; 105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p = bdf->table + 8; 106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov strike = p + count * 4; 107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov for ( ; count > 0; count-- ) 110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt num_items = FT_PEEK_USHORT( p + 2 ); 112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* 114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * We don't need to check the value sets themselves, since this 115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov * is done later. 116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov */ 117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov strike += 10 * num_items; 118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p += 4; 120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( strike > bdf->strings ) 123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov goto BadTable; 124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov bdf->loaded = 1; 127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Exit: 129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return error; 130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov BadTable: 132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_FRAME_RELEASE( bdf->table ); 133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ZERO( bdf ); 134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov error = FT_THROW( Invalid_Table ); 135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov goto Exit; 136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_LOCAL_DEF( FT_Error ) 140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov tt_face_find_bdf_prop( TT_Face face, 141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const char* property_name, 142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov BDF_PropertyRec *aprop ) 143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_BDF bdf = &face->bdf; 145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Size size = FT_FACE(face)->size; 146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Error error = FT_Err_Ok; 147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte* p; 148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt count; 149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte* strike; 150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Offset property_len; 151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov aprop->type = BDF_PROPERTY_TYPE_NONE; 154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( bdf->loaded == 0 ) 156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov error = tt_face_load_bdf_props( face, FT_FACE( face )->stream ); 158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( error ) 159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov goto Exit; 160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov count = bdf->num_strikes; 163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p = bdf->table + 8; 164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov strike = p + 4 * count; 165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov error = FT_ERR( Invalid_Argument ); 167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( size == NULL || property_name == NULL ) 169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov goto Exit; 170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov property_len = ft_strlen( property_name ); 172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( property_len == 0 ) 173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov goto Exit; 174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov for ( ; count > 0; count-- ) 176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt _ppem = FT_NEXT_USHORT( p ); 178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt _count = FT_NEXT_USHORT( p ); 179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( _ppem == size->metrics.y_ppem ) 181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov count = _count; 183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov goto FoundStrike; 184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov strike += 10 * _count; 187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov goto Exit; 189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FoundStrike: 191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p = strike; 192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov for ( ; count > 0; count-- ) 193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt type = FT_PEEK_USHORT( p + 4 ); 195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( ( type & 0x10 ) != 0 ) 197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt32 name_offset = FT_PEEK_ULONG( p ); 199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt32 value = FT_PEEK_ULONG( p + 6 ); 200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* be a bit paranoid for invalid entries here */ 202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( name_offset < bdf->strings_size && 203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov property_len < bdf->strings_size - name_offset && 204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ft_strncmp( property_name, 205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (const char*)bdf->strings + name_offset, 206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov bdf->strings_size - name_offset ) == 0 ) 207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov switch ( type & 0x0F ) 209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case 0x00: /* string */ 211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case 0x01: /* atoms */ 212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* check that the content is really 0-terminated */ 213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov if ( value < bdf->strings_size && 214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ft_memchr( bdf->strings + value, 0, bdf->strings_size ) ) 215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov aprop->type = BDF_PROPERTY_TYPE_ATOM; 217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov aprop->u.atom = (const char*)bdf->strings + value; 218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov error = FT_Err_Ok; 219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov goto Exit; 220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov break; 222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case 0x02: 224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov aprop->type = BDF_PROPERTY_TYPE_INTEGER; 225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov aprop->u.integer = (FT_Int32)value; 226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov error = FT_Err_Ok; 227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov goto Exit; 228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov case 0x03: 230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov aprop->type = BDF_PROPERTY_TYPE_CARDINAL; 231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov aprop->u.cardinal = value; 232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov error = FT_Err_Ok; 233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov goto Exit; 234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov default: 236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov ; 237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov p += 10; 241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Exit: 244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov return error; 245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } 246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* TT_CONFIG_OPTION_BDF */ 248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* END */ 251