Index: third_party/harfbuzz-ng/src/hb-private.hh |
diff --git a/third_party/harfbuzz-ng/src/hb-private.hh b/third_party/harfbuzz-ng/src/hb-private.hh |
index a451d164f91a0de224be1793e26c8c544eb9df29..6b9d791d214bf34dfd40fb00fe4109e51da2b5c6 100644 |
--- a/third_party/harfbuzz-ng/src/hb-private.hh |
+++ b/third_party/harfbuzz-ng/src/hb-private.hh |
@@ -87,7 +87,7 @@ |
#endif |
#ifndef HB_INTERNAL |
-# ifndef __MINGW32__ |
+# if !defined(__MINGW32__) && !defined(__CYGWIN__) |
# define HB_INTERNAL __attribute__((__visibility__("hidden"))) |
# else |
# define HB_INTERNAL |
@@ -96,6 +96,8 @@ |
#if (defined(__WIN32__) && !defined(__WINE__)) || defined(_MSC_VER) |
#define snprintf _snprintf |
+/* Windows CE only has _strdup, while rest of Windows has both. */ |
+#define strdup _strdup |
#endif |
#ifdef _MSC_VER |
@@ -116,7 +118,55 @@ |
#define HB_FUNC __func__ |
#endif |
+#if defined(_WIN32) || defined(__CYGWIN__) |
+ /* We need Windows Vista for both Uniscribe backend and for |
+ * MemoryBarrier. We don't support compiling on Windows XP, |
+ * though we run on it fine. */ |
+# if defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0600 |
+# undef _WIN32_WINNT |
+# endif |
+# ifndef _WIN32_WINNT |
+# define _WIN32_WINNT 0x0600 |
+# endif |
+# ifndef WIN32_LEAN_AND_MEAN |
+# define WIN32_LEAN_AND_MEAN |
+# endif |
+# define STRICT |
+#endif |
+#ifdef _WIN32_WCE |
+/* Some things not defined on Windows CE. */ |
+#define MemoryBarrier() |
+#define getenv(Name) NULL |
+#define setlocale(Category, Locale) "C" |
+static int errno = 0; /* Use something better? */ |
+#endif |
+ |
+#if HAVE_ATEXIT |
+/* atexit() is only safe to be called from shared libraries on certain |
+ * platforms. Whitelist. |
+ * https://bugs.freedesktop.org/show_bug.cgi?id=82246 */ |
+# if defined(__linux) && defined(__GLIBC_PREREQ) |
+# if __GLIBC_PREREQ(2,3) |
+/* From atexit() manpage, it's safe with glibc 2.2.3 on Linux. */ |
+# define HB_USE_ATEXIT 1 |
+# endif |
+# elif defined(_MSC_VER) || defined(__MINGW32__) |
+/* For MSVC: |
+ * http://msdn.microsoft.com/en-ca/library/tze57ck3.aspx |
+ * http://msdn.microsoft.com/en-ca/library/zk17ww08.aspx |
+ * mingw32 headers say atexit is safe to use in shared libraries. |
+ */ |
+# define HB_USE_ATEXIT 1 |
+# elif defined(__ANDROID__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) |
+/* This was fixed in Android NKD r8 or r8b: |
+ * https://code.google.com/p/android/issues/detail?id=6455 |
+ * which introduced GCC 4.6: |
+ * https://developer.android.com/tools/sdk/ndk/index.html |
+ */ |
+# define HB_USE_ATEXIT 1 |
+# endif |
+#endif |
/* Basics */ |
@@ -271,7 +321,7 @@ typedef int (*hb_compare_func_t) (const void *, const void *); |
/* arrays and maps */ |
-#define HB_PREALLOCED_ARRAY_INIT {0} |
+#define HB_PREALLOCED_ARRAY_INIT {0, 0, NULL} |
template <typename Type, unsigned int StaticSize=16> |
struct hb_prealloced_array_t |
{ |
@@ -580,6 +630,15 @@ _hb_debug_msg_va (const char *what, |
unsigned int level, |
int level_dir, |
const char *message, |
+ va_list ap) HB_PRINTF_FUNC(7, 0); |
+template <int max_level> static inline void |
+_hb_debug_msg_va (const char *what, |
+ const void *obj, |
+ const char *func, |
+ bool indented, |
+ unsigned int level, |
+ int level_dir, |
+ const char *message, |
va_list ap) |
{ |
if (!_hb_debug (level, max_level)) |
@@ -802,7 +861,9 @@ hb_in_range (T u, T lo, T hi) |
* to generate a warning than unused variables. */ |
ASSERT_STATIC (sizeof (hb_assert_unsigned_t<T>) >= 0); |
- return (u - lo) <= (hi - lo); |
+ /* The casts below are important as if T is smaller than int, |
+ * the subtract results will become a signed int! */ |
+ return (T)(u - lo) <= (T)(hi - lo); |
} |
template <typename T> static inline bool |