346 {
351
353 {
354#undef FT_STRUCTURE
355#define FT_STRUCTURE SFNT_HeaderRec
356
363 };
364
365
367
368
369
371
375
376
377#if 0
378 if (
sfnt.search_range != 1 << (
sfnt.entry_selector + 4 ) ||
379 sfnt.search_range +
sfnt.range_shift !=
sfnt.num_tables << 4 )
380 return FT_THROW( Unknown_File_Format );
381#endif
382
383
384
385 FT_TRACE2((
"-- Number of tables: %10u\n",
sfnt.num_tables ));
386 FT_TRACE2((
"-- Format version: 0x%08lx\n",
sfnt.format_tag ));
387
389 {
390
393 {
395 " invalid table directory for TrueType\n" ));
397 }
398 }
399 else
400 valid_entries =
sfnt.num_tables;
401
402 face->num_tables = valid_entries;
404
407
411
413 " tag offset length checksum\n"
414 " ----------------------------------\n" ));
415
416 valid_entries = 0;
417 for ( nn = 0; nn <
sfnt.num_tables; nn++ )
418 {
422
423
428
429
430
432 continue;
434 {
437 {
438#ifdef FT_DEBUG_LEVEL_TRACE
440#endif
441
442
443
445
446 FT_TRACE2((
" %c%c%c%c %08lx %08lx %08lx"
447 " (sanitized; original length %08lx)",
455 old_length ));
456 }
457 else
458 continue;
459 }
460#ifdef FT_DEBUG_LEVEL_TRACE
461 else
462 FT_TRACE2((
" %c%c%c%c %08lx %08lx %08lx",
470#endif
471
472
473 duplicate = 0;
474 for (
i = 0;
i < valid_entries;
i++ )
475 {
477 {
478 duplicate = 1;
479 break;
480 }
481 }
482 if ( duplicate )
483 {
484 FT_TRACE2((
" (duplicate, ignored)\n" ));
485 continue;
486 }
487 else
488 {
490
491
492 face->dir_tables[valid_entries++] =
entry;
493 }
494 }
495
496
497 face->num_tables = valid_entries;
498
500
501 FT_TRACE2((
"table directory loaded\n\n" ));
502
505 }
#define FT_TRACE2(varformat)
#define FT_QNEW_ARRAY(ptr, count)
#define FT_FRAME_ENTER(size)
#define FT_READ_ULONG(var)
#define FT_STREAM_READ_FIELDS(fields, object)
#define FT_FRAME_START(size)
#define FT_FRAME_USHORT(f)
FT_BEGIN_HEADER typedef unsigned char FT_Bool
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
static FT_Error check_table_dir(SFNT_Header sfnt, FT_Stream stream, FT_UShort *valid)