[HarfBuzz] harfbuzz: Branch 'master'

Konstantin Ritt ritt.ks at gmail.com
Fri Sep 15 01:03:57 UTC 2017


What about MinGW, MSVC, WinCE? I don't think they'll be so nice to use
autoconf ;)

Regards,
Konstantin

2017-09-15 4:51 GMT+04:00 Behdad Esfahbod <behdad at kemper.freedesktop.org>:

>  configure.ac     |    4 ++--
>  src/hb-common.cc |   53 ++++++++++++++++++++++++++++++
> +++++++++++++++++++++--
>  2 files changed, 53 insertions(+), 4 deletions(-)
>
> New commits:
> commit 3ca69c8c32b8408dd9f8e6e866cd07e58c0d79b7
> Author: Behdad Esfahbod <behdad at behdad.org>
> Date:   Thu Sep 14 20:50:35 2017 -0400
>
>     Use strtod_l() to correctly parse decimal numbers in French & other
> locales
>
>     Test with, eg.:
>     $ LC_ALL=fr_FR.utf-8 ./hb-view NotoSansArabic-VF.ttf بهداد
> --variations wght=1.2
>
> diff --git a/configure.ac b/configure.ac
> index 9151abc0..d65cae8c 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -69,8 +69,8 @@ GTK_DOC_CHECK([1.15],[--flavour no-tmpl])
>  ])
>
>  # Functions and headers
> -AC_CHECK_FUNCS(atexit mprotect sysconf getpagesize mmap isatty)
> -AC_CHECK_HEADERS(unistd.h sys/mman.h)
> +AC_CHECK_FUNCS(atexit mprotect sysconf getpagesize mmap isatty newlocale
> strtod_l)
> +AC_CHECK_HEADERS(unistd.h sys/mman.h xlocale.h)
>
>  # Compiler flags
>  AC_CANONICAL_HOST
> diff --git a/src/hb-common.cc b/src/hb-common.cc
> index 0483816d..8e8e5565 100644
> --- a/src/hb-common.cc
> +++ b/src/hb-common.cc
> @@ -32,6 +32,9 @@
>  #include "hb-object-private.hh"
>
>  #include <locale.h>
> +#ifdef HAVE_XLOCALE_H
> +#include <xlocale.h>
> +#endif
>
>
>  /* hb_options_t */
> @@ -246,8 +249,8 @@ struct hb_language_item_t {
>  static hb_language_item_t *langs;
>
>  #ifdef HB_USE_ATEXIT
> -static
> -void free_langs (void)
> +static void
> +free_langs (void)
>  {
>    while (langs) {
>      hb_language_item_t *next = langs->next;
> @@ -694,6 +697,48 @@ parse_uint32 (const char **pp, const char *end,
> uint32_t *pv)
>    return true;
>  }
>
> +#if defined (HAVE_NEWLOCALE) && defined (HAVE_STRTOD_L)
> +#define USE_XLOCALE 1
> +#endif
> +
> +#ifdef USE_XLOCALE
> +
> +static locale_t C_locale;
> +
> +#ifdef HB_USE_ATEXIT
> +static void
> +free_C_locale (void)
> +{
> +  if (C_locale)
> +    freelocale (C_locale);
> +}
> +#endif
> +
> +static locale_t
> +get_C_locale (void)
> +{
> +retry:
> +  locale_t C = (locale_t) hb_atomic_ptr_get (&C_locale);
> +
> +  if (unlikely (!C))
> +  {
> +    C = newlocale (LC_ALL_MASK, "C", NULL);
> +
> +    if (!hb_atomic_ptr_cmpexch (&C_locale, NULL, C))
> +    {
> +      freelocale (C_locale);
> +      goto retry;
> +    }
> +
> +#ifdef HB_USE_ATEXIT
> +    atexit (free_C_locale); /* First person registers atexit() callback.
> */
> +#endif
> +  }
> +
> +  return C;
> +}
> +#endif
> +
>  static bool
>  parse_float (const char **pp, const char *end, float *pv)
>  {
> @@ -707,7 +752,11 @@ parse_float (const char **pp, const char *end, float
> *pv)
>    float v;
>
>    errno = 0;
> +#ifdef USE_XLOCALE
> +  v = strtod_l (p, &pend, get_C_locale ());
> +#else
>    v = strtod (p, &pend);
> +#endif
>    if (errno || p == pend)
>      return false;
>
>
> _______________________________________________
> HarfBuzz mailing list
> HarfBuzz at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/harfbuzz
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/harfbuzz/attachments/20170915/66ab7ea2/attachment.html>


More information about the HarfBuzz mailing list