ref: 0a24bd259aad26d1191fca26a34890a68e8c088c
parent: 607dec79bb6ad524a9d2e7f93b836b795fe234cf
author: David Turner <[email protected]>
date: Tue May 15 06:54:10 EDT 2007
do not use functions from <ctypes.h>, they are locale-dependent (and slower)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2007-05-15 David Turner <[email protected]>
+
+ * include/freetype/config/ftstdlib.h,
+ include/freetype/internal/ftobjs.h: as suggested by Graham Asher,
+ ensure that ft_isalnum, ft_isdigit, etc... use hard-coded values
+ instead on relying on the locale-dependent functions provided by
+ <ctypes.h>
+
2007-05-15 Graham Asher <[email protected]>
* src/autofit/afcjk.c (af_cjk_hints_compute_edges): Remove unused
--- a/include/freetype/config/ftstdlib.h
+++ b/include/freetype/config/ftstdlib.h
@@ -78,15 +78,6 @@
/**********************************************************************/
-#include <ctype.h>
-
-#define ft_isalnum isalnum
-#define ft_isdigit isdigit
-#define ft_islower islower
-#define ft_isupper isupper
-#define ft_isxdigit isxdigit
-
-
#include <string.h>
#define ft_memchr memchr
--- a/include/freetype/internal/ftobjs.h
+++ b/include/freetype/internal/ftobjs.h
@@ -89,6 +89,26 @@
ft_highpow2( FT_UInt32 value );
+ /*
+ * character classification functions. Since these are used to parse font
+ * files, we must not use those in <ctypes.h> which are locale-dependent !!
+ */
+#define ft_isdigit(x) (((unsigned)(x) - '0') < 10U)
+
+#define ft_isxdigit(x) ( ((unsigned)(x) - '0') < 10U || \
+ ((unsigned)(x) - 'a') < 6U || \
+ ((unsigned)(x) - 'A') < 6U )
+
+#define ft_isupper(x) ( ((unsigned)(x) - 'A') < 26U )
+
+#define ft_islower(x) ( ((unsigned)(x) - 'a') < 26U )
+
+#define ft_isalpha(x) ( ft_is_upper(x) || ft_is_lower(x) )
+
+#define ft_isalnum(x) ( ft_isdigit(x) || ft_isalpha(x) )
+
+
+
/*************************************************************************/
/*************************************************************************/
/*************************************************************************/