autofit: Fix some data types mismatching with their sources.
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 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
diff --git a/ChangeLog b/ChangeLog
index 7798e46..b969011 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,32 @@
2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+ autofit: Fix some data types mismatching with their sources.
+
+ * src/autofit/afglobal.c: Correct the type of
+ AF_FaceGlobalsRec.glyph_count to match with
+ FT_Face->num_glyphs.
+ (af_face_globals_compute_script_coverage):
+ Insert explicit cast to compare
+ FT_Long AF_FaceGlobalsRec.glyph_count versus
+ FT_UInt gindex. The type of `nn' is changed
+ to scan glyph index upto AF_FaceGlobalsRec.glyph_count.
+ (af_face_globals_get_metrics): The type of `script_max'
+ is changed to cover size_t value. Insert explicit cast
+ to compare FT_Long AF_FaceGlobalsRec.glyph_count versus
+ FT_UInt gindex.
+
+ * src/autofit/afhints.c (af_axis_hints_new_segment):
+ Insert explicit cast to calculate `big_max' from
+ integer and size_t values.
+ (af_axis_hints_new_edge): Ditto.
+
+ * src/autofit/aflatin.c (af_latin_metrics_init_blues):
+ The type of `best_y' is matched to FT_Vector.y.
+ (af_latin_compute_stem_width): The type of `delta' is
+ matched to `dist' and `org_dist'.
+
+2009-07-31 suzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>
+
autofit: Count the size of the memory object by ptrdiff_t.
* src/autofit/afcjk.c (af_cjk_hint_edges): The
diff --git a/src/autofit/afglobal.c b/src/autofit/afglobal.c
index 452e704..01f5b1e 100644
--- a/src/autofit/afglobal.c
+++ b/src/autofit/afglobal.c
@@ -65,7 +65,7 @@
typedef struct AF_FaceGlobalsRec_
{
FT_Face face;
- FT_UInt glyph_count; /* same as face->num_glyphs */
+ FT_Long glyph_count; /* same as face->num_glyphs */
FT_Byte* glyph_scripts;
AF_ScriptMetrics metrics[AF_SCRIPT_MAX];
@@ -124,7 +124,7 @@
gindex = FT_Get_Char_Index( face, charcode );
if ( gindex != 0 &&
- gindex < globals->glyph_count &&
+ gindex < (FT_ULong)globals->glyph_count &&
gscripts[gindex] == AF_SCRIPT_LIST_NONE )
{
gscripts[gindex] = (FT_Byte)ss;
@@ -137,7 +137,7 @@
if ( gindex == 0 || charcode > range->last )
break;
- if ( gindex < globals->glyph_count &&
+ if ( gindex < (FT_ULong)globals->glyph_count &&
gscripts[gindex] == AF_SCRIPT_LIST_NONE )
{
gscripts[gindex] = (FT_Byte)ss;
@@ -162,7 +162,7 @@
* XXX: Shouldn't we disable hinting or do something similar?
*/
{
- FT_UInt nn;
+ FT_Long nn;
for ( nn = 0; nn < globals->glyph_count; nn++ )
@@ -252,12 +252,12 @@
FT_UInt gidx;
AF_ScriptClass clazz;
FT_UInt script = options & 15;
- const FT_UInt script_max = sizeof ( AF_SCRIPT_CLASSES_GET ) /
+ const FT_Offset script_max = sizeof ( AF_SCRIPT_CLASSES_GET ) /
sizeof ( AF_SCRIPT_CLASSES_GET[0] );
FT_Error error = AF_Err_Ok;
- if ( gindex >= globals->glyph_count )
+ if ( gindex >= (FT_ULong)globals->glyph_count )
{
error = AF_Err_Invalid_Argument;
goto Exit;
diff --git a/src/autofit/afhints.c b/src/autofit/afhints.c
index 8396a20..fe38fba 100644
--- a/src/autofit/afhints.c
+++ b/src/autofit/afhints.c
@@ -34,7 +34,7 @@
{
FT_Int old_max = axis->max_segments;
FT_Int new_max = old_max;
- FT_Int big_max = FT_INT_MAX / sizeof ( *segment );
+ FT_Int big_max = (FT_Int)( FT_INT_MAX / sizeof ( *segment ) );
if ( old_max >= big_max )
@@ -77,7 +77,7 @@
{
FT_Int old_max = axis->max_edges;
FT_Int new_max = old_max;
- FT_Int big_max = FT_INT_MAX / sizeof ( *edge );
+ FT_Int big_max = (FT_Int)( FT_INT_MAX / sizeof ( *edge ) );
if ( old_max >= big_max )
diff --git a/src/autofit/aflatin.c b/src/autofit/aflatin.c
index 252703e..bcb5601 100644
--- a/src/autofit/aflatin.c
+++ b/src/autofit/aflatin.c
@@ -198,7 +198,8 @@
for ( ; p < limit && *p; p++ )
{
FT_UInt glyph_index;
- FT_Int best_point, best_y, best_first, best_last;
+ FT_Pos best_y; /* same as points.y */
+ FT_Int best_point, best_first, best_last;
FT_Vector* points;
FT_Bool round = 0;
@@ -1617,7 +1618,7 @@
/* not hinted, appear a lot bolder or thinner than the */
/* vertical stems. */
- FT_Int delta;
+ FT_Pos delta;
dist = ( dist + 22 ) & ~63;