<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Sep 14, 2017 at 6:03 PM, Konstantin Ritt <span dir="ltr"><<a href="mailto:ritt.ks@gmail.com" target="_blank">ritt.ks@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">What about MinGW, MSVC, WinCE? I don't think they'll be so nice to use autoconf ;)<br clear="all"></div></blockquote><div><br></div><div>They can define HAVE_...?</div><div><br></div><div>Or if you mean the cmake system, I don't maintain it.  Ebrahim, etc do. They can adapt this.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div><div class="m_-7950315999125594149gmail_signature">Regards,<br>Konstantin</div></div>
<br><div class="gmail_quote"><div><div class="h5">2017-09-15 4:51 GMT+04:00 Behdad Esfahbod <span dir="ltr"><<a href="mailto:behdad@kemper.freedesktop.org" target="_blank">behdad@kemper.freedesktop.org</a><wbr>></span>:<br></div></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div class="h5"> <a href="http://configure.ac" rel="noreferrer" target="_blank">configure.ac</a>     |    4 ++--<br>
 src/hb-common.cc |   53 ++++++++++++++++++++++++++++++<wbr>+++++++++++++++++++++--<br>
 2 files changed, 53 insertions(+), 4 deletions(-)<br>
<br>
New commits:<br>
commit 3ca69c8c32b8408dd9f8e6e866cd07<wbr>e58c0d79b7<br>
Author: Behdad Esfahbod <<a href="mailto:behdad@behdad.org" target="_blank">behdad@behdad.org</a>><br>
Date:   Thu Sep 14 20:50:35 2017 -0400<br>
<br>
    Use strtod_l() to correctly parse decimal numbers in French & other locales<br>
<br>
    Test with, eg.:<br>
    $ LC_ALL=fr_FR.utf-8 ./hb-view NotoSansArabic-VF.ttf بهداد --variations wght=1.2<br>
<br>
diff --git a/<a href="http://configure.ac" rel="noreferrer" target="_blank">configure.ac</a> b/<a href="http://configure.ac" rel="noreferrer" target="_blank">configure.ac</a><br>
index 9151abc0..d65cae8c 100644<br>
--- a/<a href="http://configure.ac" rel="noreferrer" target="_blank">configure.ac</a><br>
+++ b/<a href="http://configure.ac" rel="noreferrer" target="_blank">configure.ac</a><br>
@@ -69,8 +69,8 @@ GTK_DOC_CHECK([1.15],[--flavou<wbr>r no-tmpl])<br>
 ])<br>
<br>
 # Functions and headers<br>
-AC_CHECK_FUNCS(atexit mprotect sysconf getpagesize mmap isatty)<br>
-AC_CHECK_HEADERS(unistd.h sys/mman.h)<br>
+AC_CHECK_FUNCS(atexit mprotect sysconf getpagesize mmap isatty newlocale strtod_l)<br>
+AC_CHECK_HEADERS(unistd.h sys/mman.h xlocale.h)<br>
<br>
 # Compiler flags<br>
 AC_CANONICAL_HOST<br>
diff --git a/src/hb-common.cc b/src/hb-common.cc<br>
index 0483816d..8e8e5565 100644<br>
--- a/src/hb-common.cc<br>
+++ b/src/hb-common.cc<br>
@@ -32,6 +32,9 @@<br>
 #include "hb-object-private.hh"<br>
<br>
 #include <locale.h><br>
+#ifdef HAVE_XLOCALE_H<br>
+#include <xlocale.h><br>
+#endif<br>
<br>
<br>
 /* hb_options_t */<br>
@@ -246,8 +249,8 @@ struct hb_language_item_t {<br>
 static hb_language_item_t *langs;<br>
<br>
 #ifdef HB_USE_ATEXIT<br>
-static<br>
-void free_langs (void)<br>
+static void<br>
+free_langs (void)<br>
 {<br>
   while (langs) {<br>
     hb_language_item_t *next = langs->next;<br>
@@ -694,6 +697,48 @@ parse_uint32 (const char **pp, const char *end, uint32_t *pv)<br>
   return true;<br>
 }<br>
<br>
+#if defined (HAVE_NEWLOCALE) && defined (HAVE_STRTOD_L)<br>
+#define USE_XLOCALE 1<br>
+#endif<br>
+<br>
+#ifdef USE_XLOCALE<br>
+<br>
+static locale_t C_locale;<br>
+<br>
+#ifdef HB_USE_ATEXIT<br>
+static void<br>
+free_C_locale (void)<br>
+{<br>
+  if (C_locale)<br>
+    freelocale (C_locale);<br>
+}<br>
+#endif<br>
+<br>
+static locale_t<br>
+get_C_locale (void)<br>
+{<br>
+retry:<br>
+  locale_t C = (locale_t) hb_atomic_ptr_get (&C_locale);<br>
+<br>
+  if (unlikely (!C))<br>
+  {<br>
+    C = newlocale (LC_ALL_MASK, "C", NULL);<br>
+<br>
+    if (!hb_atomic_ptr_cmpexch (&C_locale, NULL, C))<br>
+    {<br>
+      freelocale (C_locale);<br>
+      goto retry;<br>
+    }<br>
+<br>
+#ifdef HB_USE_ATEXIT<br>
+    atexit (free_C_locale); /* First person registers atexit() callback. */<br>
+#endif<br>
+  }<br>
+<br>
+  return C;<br>
+}<br>
+#endif<br>
+<br>
 static bool<br>
 parse_float (const char **pp, const char *end, float *pv)<br>
 {<br>
@@ -707,7 +752,11 @@ parse_float (const char **pp, const char *end, float *pv)<br>
   float v;<br>
<br>
   errno = 0;<br>
+#ifdef USE_XLOCALE<br>
+  v = strtod_l (p, &pend, get_C_locale ());<br>
+#else<br>
   v = strtod (p, &pend);<br>
+#endif<br>
   if (errno || p == pend)<br>
     return false;<br>
<br>
<br></div></div>______________________________<wbr>_________________<br>
HarfBuzz mailing list<br>
<a href="mailto:HarfBuzz@lists.freedesktop.org" target="_blank">HarfBuzz@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/harfbuzz" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/harfbuzz</a><br>
<br></blockquote></div><br></div></div>
<br>______________________________<wbr>_________________<br>
HarfBuzz mailing list<br>
<a href="mailto:HarfBuzz@lists.freedesktop.org">HarfBuzz@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/harfbuzz" rel="noreferrer" target="_blank">https://lists.freedesktop.org/<wbr>mailman/listinfo/harfbuzz</a><br>
<br></blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">behdad<br><a href="http://behdad.org/" target="_blank">http://behdad.org/</a></div>
</div></div>