| Index: third_party/freetype/src/base/ftobjs.c
|
| diff --git a/third_party/freetype/src/base/ftobjs.c b/third_party/freetype/src/base/ftobjs.c
|
| index 32a372b7fbdc069a2a803692b9f33771d2f2b5b6..f0c2e77fccf5b3e3b31224bacfdae2e9252f751c 100644
|
| --- a/third_party/freetype/src/base/ftobjs.c
|
| +++ b/third_party/freetype/src/base/ftobjs.c
|
| @@ -4,7 +4,7 @@
|
| /* */
|
| /* The FreeType private base classes (body). */
|
| /* */
|
| -/* Copyright 1996-2014 by */
|
| +/* Copyright 1996-2015 by */
|
| /* David Turner, Robert Wilhelm, and Werner Lemberg. */
|
| /* */
|
| /* This file is part of the FreeType project, and may only be used, */
|
| @@ -158,7 +158,7 @@
|
| FT_Stream stream = NULL;
|
|
|
|
|
| - *astream = 0;
|
| + *astream = NULL;
|
|
|
| if ( !library )
|
| return FT_THROW( Invalid_Library_Handle );
|
| @@ -178,7 +178,7 @@
|
| /* create a memory-based stream */
|
| FT_Stream_OpenMemory( stream,
|
| (const FT_Byte*)args->memory_base,
|
| - args->memory_size );
|
| + (FT_ULong)args->memory_size );
|
| }
|
|
|
| #ifndef FT_CONFIG_OPTION_DISABLE_STREAM_SUPPORT
|
| @@ -353,10 +353,10 @@
|
| slot->bitmap_left = 0;
|
| slot->bitmap_top = 0;
|
| slot->num_subglyphs = 0;
|
| - slot->subglyphs = 0;
|
| - slot->control_data = 0;
|
| + slot->subglyphs = NULL;
|
| + slot->control_data = NULL;
|
| slot->control_len = 0;
|
| - slot->other = 0;
|
| + slot->other = NULL;
|
| slot->format = FT_GLYPH_FORMAT_NONE;
|
|
|
| slot->linearHoriAdvance = 0;
|
| @@ -387,7 +387,7 @@
|
| if ( FT_DRIVER_USES_OUTLINES( driver ) )
|
| {
|
| FT_GlyphLoader_Done( slot->internal->loader );
|
| - slot->internal->loader = 0;
|
| + slot->internal->loader = NULL;
|
| }
|
|
|
| FT_FREE( slot->internal );
|
| @@ -438,7 +438,7 @@
|
| *aslot = slot;
|
| }
|
| else if ( aslot )
|
| - *aslot = 0;
|
| + *aslot = NULL;
|
|
|
|
|
| Exit:
|
| @@ -932,7 +932,7 @@
|
| (FT_List_Destructor)destroy_size,
|
| memory,
|
| driver );
|
| - face->size = 0;
|
| + face->size = NULL;
|
|
|
| /* now discard client data */
|
| if ( face->generic.finalizer )
|
| @@ -950,7 +950,7 @@
|
| face->stream,
|
| ( face->face_flags & FT_FACE_FLAG_EXTERNAL_STREAM ) != 0 );
|
|
|
| - face->stream = 0;
|
| + face->stream = NULL;
|
|
|
| /* get rid of it */
|
| if ( face->internal )
|
| @@ -968,10 +968,6 @@
|
| (FT_List_Destructor)destroy_face,
|
| driver->root.memory,
|
| driver );
|
| -
|
| - /* check whether we need to drop the driver's glyph loader */
|
| - if ( FT_DRIVER_USES_OUTLINES( driver ) )
|
| - FT_GlyphLoader_Done( driver->glyph_loader );
|
| }
|
|
|
|
|
| @@ -1157,7 +1153,7 @@
|
| int i;
|
|
|
|
|
| - face->internal->incremental_interface = 0;
|
| + face->internal->incremental_interface = NULL;
|
| for ( i = 0; i < num_params && !face->internal->incremental_interface;
|
| i++ )
|
| if ( params[i].tag == FT_PARAM_TAG_INCREMENTAL )
|
| @@ -1199,7 +1195,7 @@
|
| clazz->done_face( face );
|
| FT_FREE( internal );
|
| FT_FREE( face );
|
| - *aface = 0;
|
| + *aface = NULL;
|
| }
|
|
|
| return error;
|
| @@ -1302,8 +1298,8 @@
|
| FT_FREE( stream->base );
|
|
|
| stream->size = 0;
|
| - stream->base = 0;
|
| - stream->close = 0;
|
| + stream->base = NULL;
|
| + stream->close = NULL;
|
| }
|
|
|
|
|
| @@ -1327,7 +1323,7 @@
|
| if ( !base )
|
| return FT_THROW( Invalid_Argument );
|
|
|
| - *astream = 0;
|
| + *astream = NULL;
|
| memory = library->memory;
|
| if ( FT_NEW( stream ) )
|
| goto Exit;
|
| @@ -1379,13 +1375,13 @@
|
| }
|
|
|
| #ifdef FT_MACINTOSH
|
| - /* At this point, face_index has served its purpose; */
|
| + /* At this point, the face index has served its purpose; */
|
| /* whoever calls this function has already used it to */
|
| /* locate the correct font data. We should not propagate */
|
| /* this index to FT_Open_Face() (unless it is negative). */
|
|
|
| if ( face_index > 0 )
|
| - face_index = 0;
|
| + face_index &= 0x7FFF0000L; /* retain GX data */
|
| #endif
|
|
|
| error = FT_Open_Face( library, &args, face_index, aface );
|
| @@ -1491,7 +1487,7 @@
|
| FT_Error error;
|
| FT_Memory memory = library->memory;
|
| FT_ULong offset, length;
|
| - FT_Long pos;
|
| + FT_ULong pos;
|
| FT_Bool is_sfnt_cid;
|
| FT_Byte* sfnt_ps = NULL;
|
|
|
| @@ -1499,7 +1495,11 @@
|
| FT_UNUSED( params );
|
|
|
|
|
| - pos = FT_Stream_Pos( stream );
|
| + /* ignore GX stuff */
|
| + if ( face_index > 0 )
|
| + face_index &= 0xFFFFL;
|
| +
|
| + pos = FT_STREAM_POS();
|
|
|
| error = ft_lookup_PS_in_sfnt_stream( stream,
|
| face_index,
|
| @@ -1516,8 +1516,10 @@
|
| goto Exit;
|
|
|
| error = FT_Stream_Read( stream, (FT_Byte *)sfnt_ps, length );
|
| - if ( error )
|
| + if ( error ) {
|
| + FT_FREE( sfnt_ps );
|
| goto Exit;
|
| + }
|
|
|
| error = open_face_from_buffer( library,
|
| sfnt_ps,
|
| @@ -1577,7 +1579,7 @@
|
| pfb_len = 0;
|
| for ( i = 0; i < resource_cnt; ++i )
|
| {
|
| - error = FT_Stream_Seek( stream, offsets[i] );
|
| + error = FT_Stream_Seek( stream, (FT_ULong)offsets[i] );
|
| if ( error )
|
| goto Exit;
|
| if ( FT_READ_ULONG( temp ) )
|
| @@ -1586,12 +1588,14 @@
|
| /* FT2 allocator takes signed long buffer length,
|
| * too large value causing overflow should be checked
|
| */
|
| - FT_TRACE4(( " POST fragment #%d: length=0x%08x\n",
|
| - i, temp));
|
| - if ( 0x7FFFFFFFUL < temp || pfb_len + temp + 6 < pfb_len )
|
| + FT_TRACE4(( " POST fragment #%d: length=0x%08x"
|
| + " total pfb_len=0x%08x\n",
|
| + i, temp, pfb_len + temp + 6));
|
| + if ( FT_MAC_RFORK_MAX_LEN < temp ||
|
| + FT_MAC_RFORK_MAX_LEN - temp < pfb_len + 6 )
|
| {
|
| - FT_TRACE2(( " too long fragment length makes"
|
| - " pfb_len confused: temp=0x%08x\n", temp ));
|
| + FT_TRACE2(( " MacOS resource length cannot exceed"
|
| + " 0x%08x\n", FT_MAC_RFORK_MAX_LEN ));
|
| error = FT_THROW( Invalid_Offset );
|
| goto Exit;
|
| }
|
| @@ -1624,7 +1628,7 @@
|
| type = 1;
|
| for ( i = 0; i < resource_cnt; ++i )
|
| {
|
| - error = FT_Stream_Seek( stream, offsets[i] );
|
| + error = FT_Stream_Seek( stream, (FT_ULong)offsets[i] );
|
| if ( error )
|
| goto Exit2;
|
| if ( FT_READ_ULONG( rlen ) )
|
| @@ -1664,7 +1668,7 @@
|
| else
|
| {
|
| FT_TRACE3(( " Write POST fragment #%d header (4-byte) to buffer"
|
| - " 0x%p + 0x%08x\n", i, pfb_data, pfb_lenpos ));
|
| + " %p + 0x%08x\n", i, pfb_data, pfb_lenpos ));
|
| if ( pfb_lenpos + 3 > pfb_len + 2 )
|
| goto Exit2;
|
| pfb_data[pfb_lenpos ] = (FT_Byte)( len );
|
| @@ -1676,7 +1680,7 @@
|
| break;
|
|
|
| FT_TRACE3(( " Write POST fragment #%d header (6-byte) to buffer"
|
| - " 0x%p + 0x%08x\n", i, pfb_data, pfb_pos ));
|
| + " %p + 0x%08x\n", i, pfb_data, pfb_pos ));
|
| if ( pfb_pos + 6 > pfb_len + 2 )
|
| goto Exit2;
|
| pfb_data[pfb_pos++] = 0x80;
|
| @@ -1696,7 +1700,7 @@
|
| goto Exit2;
|
|
|
| FT_TRACE3(( " Load POST fragment #%d (%d byte) to buffer"
|
| - " 0x%p + 0x%08x\n", i, rlen, pfb_data, pfb_pos ));
|
| + " %p + 0x%08x\n", i, rlen, pfb_data, pfb_pos ));
|
| error = FT_Stream_Read( stream, (FT_Byte *)pfb_data + pfb_pos, rlen );
|
| if ( error )
|
| goto Exit2;
|
| @@ -1741,7 +1745,7 @@
|
| /* The resource header says we've got resource_cnt `sfnt' */
|
| /* (TrueType/OpenType) resources in this file. Look through */
|
| /* them for the one indicated by face_index, load it into mem, */
|
| - /* pass it on the the truetype driver and return it. */
|
| + /* pass it on to the truetype driver, and return it. */
|
| /* */
|
| static FT_Error
|
| Mac_Read_sfnt_Resource( FT_Library library,
|
| @@ -1754,7 +1758,7 @@
|
| FT_Memory memory = library->memory;
|
| FT_Byte* sfnt_data = NULL;
|
| FT_Error error;
|
| - FT_Long flag_offset;
|
| + FT_ULong flag_offset;
|
| FT_Long rlen;
|
| int is_cff;
|
| FT_Long face_index_in_resource = 0;
|
| @@ -1765,7 +1769,7 @@
|
| if ( face_index >= resource_cnt )
|
| return FT_THROW( Cannot_Open_Resource );
|
|
|
| - flag_offset = offsets[face_index];
|
| + flag_offset = (FT_ULong)offsets[face_index];
|
| error = FT_Stream_Seek( stream, flag_offset );
|
| if ( error )
|
| goto Exit;
|
| @@ -1774,6 +1778,8 @@
|
| goto Exit;
|
| if ( rlen == -1 )
|
| return FT_THROW( Cannot_Open_Resource );
|
| + if ( (FT_ULong)rlen > FT_MAC_RFORK_MAX_LEN )
|
| + return FT_THROW( Invalid_Offset );
|
|
|
| error = open_face_PS_from_sfnt_stream( library,
|
| stream,
|
| @@ -1787,16 +1793,18 @@
|
| if ( FT_Stream_Seek( stream, flag_offset + 4 ) )
|
| goto Exit;
|
|
|
| - if ( FT_ALLOC( sfnt_data, (FT_Long)rlen ) )
|
| + if ( FT_ALLOC( sfnt_data, rlen ) )
|
| return error;
|
| - error = FT_Stream_Read( stream, (FT_Byte *)sfnt_data, rlen );
|
| - if ( error )
|
| + error = FT_Stream_Read( stream, (FT_Byte *)sfnt_data, (FT_ULong)rlen );
|
| + if ( error ) {
|
| + FT_FREE( sfnt_data );
|
| goto Exit;
|
| + }
|
|
|
| is_cff = rlen > 4 && !ft_memcmp( sfnt_data, "OTTO", 4 );
|
| error = open_face_from_buffer( library,
|
| sfnt_data,
|
| - rlen,
|
| + (FT_ULong)rlen,
|
| face_index_in_resource,
|
| is_cff ? "cff" : "truetype",
|
| aface );
|
| @@ -1893,13 +1901,14 @@
|
| if ( error )
|
| goto Exit;
|
|
|
| - if ( header[ 0] != 0 ||
|
| - header[74] != 0 ||
|
| - header[82] != 0 ||
|
| - header[ 1] == 0 ||
|
| - header[ 1] > 33 ||
|
| - header[63] != 0 ||
|
| - header[2 + header[1]] != 0 )
|
| + if ( header[ 0] != 0 ||
|
| + header[74] != 0 ||
|
| + header[82] != 0 ||
|
| + header[ 1] == 0 ||
|
| + header[ 1] > 33 ||
|
| + header[63] != 0 ||
|
| + header[2 + header[1]] != 0 ||
|
| + header[0x53] > 0x7F )
|
| return FT_THROW( Unknown_File_Format );
|
|
|
| dlen = ( header[0x53] << 24 ) |
|
| @@ -1910,7 +1919,7 @@
|
| rlen = ( header[0x57] << 24 ) |
|
| ( header[0x58] << 16 ) |
|
| ( header[0x59] << 8 ) |
|
| - header[0x5a];
|
| + header[0x5A];
|
| #endif /* 0 */
|
| offset = 128 + ( ( dlen + 127 ) & ~127 );
|
|
|
| @@ -1934,7 +1943,7 @@
|
|
|
| FT_Memory memory = library->memory;
|
| FT_Error error = FT_ERR( Unknown_File_Format );
|
| - int i;
|
| + FT_UInt i;
|
|
|
| char * file_names[FT_RACCESS_N_RULES];
|
| FT_Long offsets[FT_RACCESS_N_RULES];
|
| @@ -1942,7 +1951,7 @@
|
| FT_Bool is_darwin_vfs, vfs_rfork_has_no_font = FALSE; /* not tested */
|
|
|
| FT_Open_Args args2;
|
| - FT_Stream stream2 = 0;
|
| + FT_Stream stream2 = NULL;
|
|
|
|
|
| FT_Raccess_Guess( library, stream,
|
| @@ -2036,7 +2045,11 @@
|
| #undef FT_COMPONENT
|
| #define FT_COMPONENT trace_raccess
|
|
|
| - FT_TRACE3(( "Try as dfont: %s ...", args->pathname ));
|
| +#ifdef FT_DEBUG_LEVEL_TRACE
|
| + FT_TRACE3(( "Try as dfont: " ));
|
| + if ( !( args->flags & FT_OPEN_MEMORY ) )
|
| + FT_TRACE3(( "%s ...", args->pathname ));
|
| +#endif
|
|
|
| error = IsMacResource( library, stream, 0, face_index, aface );
|
|
|
| @@ -2103,7 +2116,7 @@
|
| if ( FT_MODULE_IS_DRIVER( driver ) )
|
| {
|
| FT_Int num_params = 0;
|
| - FT_Parameter* params = 0;
|
| + FT_Parameter* params = NULL;
|
|
|
|
|
| if ( args->flags & FT_OPEN_PARAMS )
|
| @@ -2137,7 +2150,7 @@
|
| if ( FT_MODULE_IS_DRIVER( cur[0] ) )
|
| {
|
| FT_Int num_params = 0;
|
| - FT_Parameter* params = 0;
|
| + FT_Parameter* params = NULL;
|
|
|
|
|
| driver = FT_DRIVER( cur[0] );
|
| @@ -2448,8 +2461,8 @@
|
| FT_Driver driver;
|
| FT_Driver_Class clazz;
|
|
|
| - FT_Size size = 0;
|
| - FT_ListNode node = 0;
|
| + FT_Size size = NULL;
|
| + FT_ListNode node = NULL;
|
|
|
|
|
| if ( !face )
|
| @@ -2461,7 +2474,7 @@
|
| if ( !face->driver )
|
| return FT_THROW( Invalid_Driver_Handle );
|
|
|
| - *asize = 0;
|
| + *asize = NULL;
|
|
|
| driver = face->driver;
|
| clazz = driver->clazz;
|
| @@ -2474,7 +2487,7 @@
|
| size->face = face;
|
|
|
| /* for now, do not use any internal fields in size objects */
|
| - size->internal = 0;
|
| + size->internal = NULL;
|
|
|
| if ( clazz->init_size )
|
| error = clazz->init_size( size );
|
| @@ -2532,7 +2545,7 @@
|
|
|
| if ( face->size == size )
|
| {
|
| - face->size = 0;
|
| + face->size = NULL;
|
| if ( face->sizes_list.head )
|
| face->size = (FT_Size)(face->sizes_list.head->data);
|
| }
|
| @@ -3018,14 +3031,14 @@
|
| pixel_height = 1;
|
|
|
| /* use `>=' to avoid potential compiler warning on 16bit platforms */
|
| - if ( pixel_width >= 0xFFFFU )
|
| - pixel_width = 0xFFFFU;
|
| + if ( pixel_width >= 0xFFFFU )
|
| + pixel_width = 0xFFFFU;
|
| if ( pixel_height >= 0xFFFFU )
|
| pixel_height = 0xFFFFU;
|
|
|
| req.type = FT_SIZE_REQUEST_TYPE_NOMINAL;
|
| - req.width = pixel_width << 6;
|
| - req.height = pixel_height << 6;
|
| + req.width = (FT_Long)( pixel_width << 6 );
|
| + req.height = (FT_Long)( pixel_height << 6 );
|
| req.horiResolution = 0;
|
| req.vertResolution = 0;
|
|
|
| @@ -3072,18 +3085,37 @@
|
|
|
| if ( kern_mode != FT_KERNING_UNFITTED )
|
| {
|
| + FT_Pos orig_x = akerning->x;
|
| + FT_Pos orig_y = akerning->y;
|
| +
|
| +
|
| /* we scale down kerning values for small ppem values */
|
| /* to avoid that rounding makes them too big. */
|
| /* `25' has been determined heuristically. */
|
| if ( face->size->metrics.x_ppem < 25 )
|
| - akerning->x = FT_MulDiv( akerning->x,
|
| + akerning->x = FT_MulDiv( orig_x,
|
| face->size->metrics.x_ppem, 25 );
|
| if ( face->size->metrics.y_ppem < 25 )
|
| - akerning->y = FT_MulDiv( akerning->y,
|
| + akerning->y = FT_MulDiv( orig_y,
|
| face->size->metrics.y_ppem, 25 );
|
|
|
| akerning->x = FT_PIX_ROUND( akerning->x );
|
| akerning->y = FT_PIX_ROUND( akerning->y );
|
| +
|
| +#ifdef FT_DEBUG_LEVEL_TRACE
|
| + {
|
| + FT_Pos orig_x_rounded = FT_PIX_ROUND( orig_x );
|
| + FT_Pos orig_y_rounded = FT_PIX_ROUND( orig_y );
|
| +
|
| +
|
| + if ( akerning->x != orig_x_rounded ||
|
| + akerning->y != orig_y_rounded )
|
| + FT_TRACE5(( "FT_Get_Kerning: horizontal kerning"
|
| + " (%d, %d) scaled down to (%d, %d) pixels\n",
|
| + orig_x_rounded / 64, orig_y_rounded / 64,
|
| + akerning->x / 64, akerning->y / 64 ));
|
| + }
|
| +#endif
|
| }
|
| }
|
| }
|
| @@ -3354,8 +3386,12 @@
|
| FT_TRACE1(( "FT_Get_Char_Index: too large charcode" ));
|
| FT_TRACE1(( " 0x%x is truncated\n", charcode ));
|
| }
|
| +
|
| result = cmap->clazz->char_index( cmap, (FT_UInt32)charcode );
|
| + if ( result >= (FT_UInt)face->num_glyphs )
|
| + result = 0;
|
| }
|
| +
|
| return result;
|
| }
|
|
|
| @@ -3374,7 +3410,7 @@
|
| if ( face && face->charmap && face->num_glyphs )
|
| {
|
| gindex = FT_Get_Char_Index( face, 0 );
|
| - if ( gindex == 0 || gindex >= (FT_UInt)face->num_glyphs )
|
| + if ( gindex == 0 )
|
| result = FT_Get_Next_Char( face, 0, &gindex );
|
| }
|
|
|
| @@ -3648,8 +3684,10 @@
|
| /* clean up buffer */
|
| ((FT_Byte*)buffer)[0] = '\0';
|
|
|
| - if ( (FT_Long)glyph_index > face->num_glyphs ||
|
| - !FT_HAS_GLYPH_NAMES( face ) )
|
| + if ( (FT_Long)glyph_index >= face->num_glyphs )
|
| + return FT_THROW( Invalid_Glyph_Index );
|
| +
|
| + if ( !FT_HAS_GLYPH_NAMES( face ) )
|
| return FT_THROW( Invalid_Argument );
|
|
|
| FT_FACE_LOOKUP_SERVICE( face, service, GLYPH_DICT );
|
| @@ -3850,7 +3888,7 @@
|
| FT_ListNode* node )
|
| {
|
| FT_ListNode cur;
|
| - FT_Renderer result = 0;
|
| + FT_Renderer result = NULL;
|
|
|
|
|
| if ( !library )
|
| @@ -3862,7 +3900,7 @@
|
| {
|
| if ( *node )
|
| cur = (*node)->next;
|
| - *node = 0;
|
| + *node = NULL;
|
| }
|
|
|
| while ( cur )
|
| @@ -4082,8 +4120,7 @@
|
|
|
| default:
|
| {
|
| - FT_ListNode node = 0;
|
| - FT_Bool update = 0;
|
| + FT_ListNode node = NULL;
|
|
|
|
|
| /* small shortcut for the very common case */
|
| @@ -4110,16 +4147,6 @@
|
| /* now, look for another renderer that supports the same */
|
| /* format. */
|
| renderer = FT_Lookup_Renderer( library, slot->format, &node );
|
| - update = 1;
|
| - }
|
| -
|
| - /* if we changed the current renderer for the glyph image format */
|
| - /* we need to select it as the next current one */
|
| - if ( !error && update && renderer )
|
| - {
|
| - error = FT_Set_Renderer( library, renderer, 0, 0 );
|
| - if ( error )
|
| - break;
|
| }
|
| }
|
| }
|
| @@ -4136,7 +4163,7 @@
|
| FT_Error err;
|
|
|
|
|
| - FT_Bitmap_New( &bitmap );
|
| + FT_Bitmap_Init( &bitmap );
|
|
|
| /* this also converts the bitmap flow to `down' (i.e., pitch > 0) */
|
| err = FT_Bitmap_Convert( library, &slot->bitmap, &bitmap, 1 );
|
| @@ -4145,15 +4172,17 @@
|
| MD5_CTX ctx;
|
| unsigned char md5[16];
|
| int i;
|
| + unsigned int rows = bitmap.rows;
|
| + unsigned int pitch = (unsigned int)bitmap.pitch;
|
|
|
|
|
| - MD5_Init( &ctx);
|
| - MD5_Update( &ctx, bitmap.buffer, bitmap.rows * bitmap.pitch );
|
| + MD5_Init( &ctx );
|
| + MD5_Update( &ctx, bitmap.buffer, rows * pitch );
|
| MD5_Final( md5, &ctx );
|
|
|
| FT_TRACE3(( "MD5 checksum for %dx%d bitmap:\n"
|
| " ",
|
| - bitmap.rows, bitmap.pitch ));
|
| + rows, pitch ));
|
| for ( i = 0; i < 16; i++ )
|
| FT_TRACE3(( "%02X", md5[i] ));
|
| FT_TRACE3(( "\n" ));
|
| @@ -4226,7 +4255,7 @@
|
|
|
|
|
| if ( library && library->auto_hinter == module )
|
| - library->auto_hinter = 0;
|
| + library->auto_hinter = NULL;
|
|
|
| /* if the module is a renderer */
|
| if ( FT_MODULE_IS_RENDERER( module ) )
|
| @@ -4322,17 +4351,10 @@
|
| /* if the module is a font driver */
|
| if ( FT_MODULE_IS_DRIVER( module ) )
|
| {
|
| - /* allocate glyph loader if needed */
|
| FT_Driver driver = FT_DRIVER( module );
|
|
|
|
|
| driver->clazz = (FT_Driver_Class)module->clazz;
|
| - if ( FT_DRIVER_USES_OUTLINES( driver ) )
|
| - {
|
| - error = FT_GlyphLoader_New( memory, &driver->glyph_loader );
|
| - if ( error )
|
| - goto Fail;
|
| - }
|
| }
|
|
|
| if ( clazz->module_init )
|
| @@ -4349,15 +4371,6 @@
|
| return error;
|
|
|
| Fail:
|
| - if ( FT_MODULE_IS_DRIVER( module ) )
|
| - {
|
| - FT_Driver driver = FT_DRIVER( module );
|
| -
|
| -
|
| - if ( FT_DRIVER_USES_OUTLINES( driver ) )
|
| - FT_GlyphLoader_Done( driver->glyph_loader );
|
| - }
|
| -
|
| if ( FT_MODULE_IS_RENDERER( module ) )
|
| {
|
| FT_Renderer renderer = FT_RENDERER( module );
|
| @@ -4492,7 +4505,7 @@
|
| cur[0] = cur[1];
|
| cur++;
|
| }
|
| - limit[0] = 0;
|
| + limit[0] = NULL;
|
|
|
| /* destroy the module */
|
| Destroy_Module( module );
|
| @@ -4675,12 +4688,9 @@
|
| goto Fail;
|
| #endif
|
|
|
| - /* allocate the render pool */
|
| - library->raster_pool_size = FT_RENDER_POOL_SIZE;
|
| -#if FT_RENDER_POOL_SIZE > 0
|
| - if ( FT_ALLOC( library->raster_pool, FT_RENDER_POOL_SIZE ) )
|
| - goto Fail;
|
| -#endif
|
| + /* we don't use raster_pool anymore. */
|
| + library->raster_pool_size = 0;
|
| + library->raster_pool = NULL;
|
|
|
| library->version_major = FREETYPE_MAJOR;
|
| library->version_minor = FREETYPE_MINOR;
|
| @@ -4693,8 +4703,8 @@
|
|
|
| return FT_Err_Ok;
|
|
|
| - Fail:
|
| #ifdef FT_CONFIG_OPTION_PIC
|
| + Fail:
|
| ft_pic_container_destroy( library );
|
| #endif
|
| FT_FREE( library );
|
| @@ -4823,16 +4833,12 @@
|
| if ( module )
|
| {
|
| Destroy_Module( module );
|
| - library->modules[n] = 0;
|
| + library->modules[n] = NULL;
|
| }
|
| }
|
| }
|
| #endif
|
|
|
| - /* Destroy raster objects */
|
| - FT_FREE( library->raster_pool );
|
| - library->raster_pool_size = 0;
|
| -
|
| #ifdef FT_CONFIG_OPTION_PIC
|
| /* Destroy pic container contents */
|
| ft_pic_container_destroy( library );
|
|
|