예제 #1
0
 /* find or create the class corresponding to a given type */
  static FT_Class
  ft_metaclass_get_class( FT_MetaClass  meta,
                          FT_Type       ctype )
  {
    FT_ClassHNodeRec   keynode, *node, **pnode;
    FT_Memory          memory;

    keynode.hnode.hash = (FT_UInt32)( ctype >> 2 );
    keynode.type       = type;

    pnode = (FT_ClassHNode) ft_hash_lookup( &meta->type_to_class,
                                            &noderec );
    node  = *pnode;
    if ( node != NULL )
      return node->clazz;

    memory = FT_CLASS__MEMORY(meta);
    node   = FT_MEM_SAFE_ALLOC( sizeof(*node) );
    if ( node != NULL )
    {
      FT_ClassRec*  clazz;

      clazz = FT_MEM_SAFE_ALLOC( ctype->class_size );
      if ( clazz == NULL )
      {
        FT_FREE( node );
        FT_XTHROW( FT_Err_Out_Of_Memory );
      }
    }
  }
예제 #2
0
파일: ftsysio.c 프로젝트: 1tgr/mobius
 /* open a standard stream from a given pathname */
  static void
  ft_std_stream_init( FT_StdStream  stream,
                      const char*   pathname )
  {
    FT_ASSERT( pathname != NULL );

    stream->file = fopen( pathname, "rb" );
    if ( stream->file == NULL )
    {
      FT_ERROR(( "iso.stream.init: could not open '%s'\n", pathname ));
      FT_XTHROW( FT_Err_Stream_Open );
    }
    
    /* compute total size in bytes */
    fseek( file, 0, SEEK_END );
    FT_STREAM__SIZE(stream) = ftell( file );
    fseek( file, 0, SEEK_SET );
    
    stream->pathname = pathname;
    stream->pos      = 0;
    
    FT_TRACE1(( "iso.stream.init: opened '%s' (%ld bytes) succesfully\n",
                 pathname, FT_STREAM__SIZE(stream) ));
  }