Hello, I'm currently updating the Android FreeType sources to the latest CVS. In doing so, I noticed something that unfortunately escaped me before that: we added a new field to a publicly declared structure, thus breaking the ABI.
More specifically, the declaration of PS_FontInfoRec in include/freetype/t1tables.h is now: typedef struct PS_FontInfoRec_ { FT_String* version; FT_String* notice; FT_String* full_name; FT_String* family_name; FT_String* weight; FT_Long italic_angle; FT_Bool is_fixed_pitch; FT_Short underline_position; FT_UShort underline_thickness; * /* since 2.3.8 */ FT_UShort fs_type; * } PS_FontInfoRec; the problem is that this structure can be allocated by the user (either in the heap or the stack), e.g. when calling a function like FT_Get_PS_Font_Info declared as: FT_EXPORT( FT_Error ) FT_Get_PS_Font_Info( FT_Face face, PS_FontInfo afont_info ); *This is very bad* !!. It means that any client code that was built against 2.3.7 or older will now experience a nice silent stack or heap memory corruption whenever it calls this function in 2.3.8. I suggest that we do the following instead: - remove the field from the definition - provide a new function to retrieve the corresponding information, as in FT_Get_PS_FsType() or whatever, that will not break the ABI - release 2.3.9 ASAP explaining why. I really hope that there isn't any code that relies on this new field out there. Generalyl speaking, we should *NOT* add fields to public structures, except a very few instances where we know that the corresponding object should never be stack or heap allocated by the user (FT_Face or FT_GlyphSlot for example). Even in these cases, I'd really prefer that we discuss such changes on the development mailing list before hand. - David
_______________________________________________ Freetype-devel mailing list Freetype-devel@nongnu.org http://lists.nongnu.org/mailman/listinfo/freetype-devel