* src/sfnt/ttkern.c (tt_face_load_kern): fixing a small bug which returned invalid (random) values for the horizontal kerning
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
diff --git a/ChangeLog b/ChangeLog
index 5fa7f2e..d62607d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2005-02-27 David Turner <david@freetype.org>
+
+ * src/sfnt/ttkern.c (tt_face_load_kern): fixing a small bug which returned
+ invalid (random) values for the horizontal kerning
+
2005-02-25 David Turner <david@freetype.org>
* many, many files: several memory optimizations were implemented to
diff --git a/src/sfnt/ttkern.c b/src/sfnt/ttkern.c
index a75d566..f59dc03 100644
--- a/src/sfnt/ttkern.c
+++ b/src/sfnt/ttkern.c
@@ -175,7 +175,6 @@
FT_UInt right_glyph )
{
FT_Int result = 0;
- FT_Int value;
FT_UInt count, mask = 1;
FT_Byte* p = face->kern_table;
FT_Byte* p_limit = p + face->kern_table_size;
@@ -190,6 +189,7 @@
FT_UInt version = FT_NEXT_USHORT(p);
FT_UInt length = FT_NEXT_USHORT(p);
FT_UInt coverage = FT_NEXT_USHORT(p);
+ FT_Int value = 0;
next = base + length;
@@ -205,8 +205,7 @@
{
FT_UInt num_pairs = FT_NEXT_USHORT(p);
FT_ULong key0 = TT_KERN_INDEX(left_glyph,right_glyph);
- FT_Int value = 0;
-
+
p += 6;
if ( face->kern_order_bits & mask ) /* binary search */
@@ -226,7 +225,7 @@
if ( key == key0 )
{
value = FT_PEEK_SHORT(q);
- break;
+ goto Found;
}
if ( key < key0 )
min = mid+1;
@@ -245,7 +244,7 @@
if ( key == key0 )
{
value = FT_PEEK_SHORT(p);
- break;
+ goto Found;
}
p += 2;
}
@@ -261,6 +260,9 @@
;
}
+ goto NextTable;
+
+ Found:
if ( coverage & 8 ) /* overide or addition */
result = value;
else