/[freetype]/freetype2/src/base/ftobjs.c
ViewVC logotype

Diff of /freetype2/src/base/ftobjs.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.213 by wl, Fri May 20 21:52:18 2005 UTC revision 1.214 by wl, Fri May 27 06:01:28 2005 UTC
# Line 687  Line 687 
687    
688    
689    static void    static void
690      ft_cmap_done_internal( FT_CMap  cmap );
691    
692    
693      static void
694    destroy_charmaps( FT_Face    face,    destroy_charmaps( FT_Face    face,
695                      FT_Memory  memory )                      FT_Memory  memory )
696    {    {
# Line 698  Line 702 
702        FT_CMap  cmap = FT_CMAP( face->charmaps[n] );        FT_CMap  cmap = FT_CMAP( face->charmaps[n] );
703    
704    
705        FT_CMap_Done( cmap );        ft_cmap_done_internal( cmap );
706    
707        face->charmaps[n] = NULL;        face->charmaps[n] = NULL;
708      }      }
# Line 2255  Line 2259 
2259    }    }
2260    
2261    
2262      static void
2263      ft_cmap_done_internal( FT_CMap  cmap )
2264      {
2265        FT_CMap_Class  clazz  = cmap->clazz;
2266        FT_Face        face   = cmap->charmap.face;
2267        FT_Memory      memory = FT_FACE_MEMORY(face);
2268    
2269    
2270        if ( clazz->done )
2271          clazz->done( cmap );
2272    
2273        FT_FREE( cmap );
2274      }
2275    
2276    
2277    FT_BASE_DEF( void )    FT_BASE_DEF( void )
2278    FT_CMap_Done( FT_CMap  cmap )    FT_CMap_Done( FT_CMap  cmap )
2279    {    {
2280      if ( cmap )      if ( cmap )
2281      {      {
2282        FT_CMap_Class  clazz  = cmap->clazz;        FT_Face    face   = cmap->charmap.face;
2283        FT_Face        face   = cmap->charmap.face;        FT_Memory  memory = FT_FACE_MEMORY( face );
2284        FT_Memory      memory = FT_FACE_MEMORY(face);        FT_Error   error;
2285          FT_Int     i, j;
2286    
2287    
2288          for ( i = 0; i < face->num_charmaps; i++ )
2289          {
2290            if ( (FT_CMap)face->charmaps[i] == cmap )
2291            {
2292              FT_CharMap  last_charmap = face->charmaps[face->num_charmaps - 1];
2293    
2294    
2295              if ( FT_RENEW_ARRAY( face->charmaps,
2296                                   face->num_charmaps,
2297                                   face->num_charmaps - 1 ) )
2298                return;
2299    
2300              /* remove it from our list of charmaps */
2301              for ( j = i + 1; j < face->num_charmaps; j++ )
2302              {
2303                if ( j == face->num_charmaps - 1 )
2304                  face->charmaps[j - 1] = last_charmap;
2305                else
2306                  face->charmaps[j - 1] = face->charmaps[j];
2307              }
2308    
2309              face->num_charmaps--;
2310    
2311              if ( (FT_CMap)face->charmap == cmap )
2312                face->charmap = NULL;
2313    
2314        if ( clazz->done )            ft_cmap_done_internal( cmap );
         clazz->done( cmap );  
2315    
2316        FT_FREE( cmap );            break;
2317            }
2318          }
2319      }      }
2320    }    }
2321    
# Line 2319  Line 2366 
2366      return error;      return error;
2367    
2368    Fail:    Fail:
2369      FT_CMap_Done( cmap );      ft_cmap_done_internal( cmap );
2370      cmap = NULL;      cmap = NULL;
2371      goto Exit;      goto Exit;
2372    }    }

Legend:
Removed from v.1.213  
changed lines
  Added in v.1.214

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26