Index: Font-FreeType-0.03/FreeType.xs
--- Font-FreeType-0.03/FreeType.xs.orig	2004-09-11 22:50:44 +0200
+++ Font-FreeType-0.03/FreeType.xs	2009-01-15 15:21:09 +0100
@@ -21,6 +21,8 @@
 #include FT_GLYPH_H
 #include FT_OUTLINE_H
 #include FT_BBOX_H
+#include FT_TYPE1_TABLES_H
+#include FT_SFNT_NAMES_H
 
 #undef assert
 #include <assert.h>
@@ -763,6 +765,33 @@
             char_code = FT_Get_Next_Char(face, char_code, &glyph_idx);
         }
 
+long
+qefft2_face_number_of_charmaps (Font_FreeType_Face face)
+    CODE:
+        RETVAL = face->num_charmaps;
+    OUTPUT:
+        RETVAL
+
+int
+qefft2_face_sfnt_name_count (Font_FreeType_Face face)
+    CODE:
+        RETVAL = FT_Get_Sfnt_Name_Count(face);
+    OUTPUT:
+        RETVAL
+
+SV *
+qefft2_face_sfnt_name (Font_FreeType_Face face, FT_UInt idx)
+    PREINIT:
+        const char *ps_name;
+    CODE:
+        ps_name = FT_Get_Postscript_Name(face);
+        if (ps_name)
+            RETVAL = newSVpv(ps_name, 0);
+        else
+            RETVAL = &PL_sv_undef;
+    OUTPUT:
+        RETVAL
+
 
 MODULE = Font::FreeType   PACKAGE = Font::FreeType::Glyph   PREFIX = qefft2_glyph_
 
@@ -805,7 +834,8 @@
             char_code = FT_Get_First_Char(face, &glyph_idx);
             while (glyph_idx) {
                 if (glyph_idx == glyph->index) {
-                    RETVAL = newSVuv((UV) glyph->char_code = char_code);
+                    glyph->char_code = char_code;	
+                    RETVAL = newSVuv((UV) glyph->char_code);
                     break;
                 }
                 char_code = FT_Get_Next_Char(face, char_code, &glyph_idx);
@@ -1052,7 +1082,7 @@
         rows = newAV();
         av_extend(rows, bitmap->rows - 1);
         buf = bitmap->buffer;
-        row_buf = New(0, row_buf, bitmap->width, unsigned char);
+        New(0, row_buf, bitmap->width, unsigned char);
 
         if (bitmap->pixel_mode == FT_PIXEL_MODE_MONO) {
             for (i = 0; i < bitmap->rows; ++i) {
