Bug 95481 - Build fails on Android due to broken lconv struct

This commit is contained in:
Akira TAGOH 2016-05-27 11:16:09 +09:00
parent 3c2793a32e
commit 7441dbec03
1 changed files with 16 additions and 5 deletions

View File

@ -1352,7 +1352,11 @@ FcParseInt (FcConfigParse *parse)
static double
FcStrtod (char *s, char **end)
{
#ifndef __BIONIC__
struct lconv *locale_data;
#endif
const char *decimal_point;
int dlen;
char *dot;
double v;
@ -1360,14 +1364,21 @@ FcStrtod (char *s, char **end)
* Have to swap the decimal point to match the current locale
* if that locale doesn't use 0x2e
*/
#ifndef __BIONIC__
locale_data = localeconv ();
decimal_point = locale_data->decimal_point;
dlen = strlen (decimal_point);
#else
decimal_point = ".";
dlen = 1;
#endif
if ((dot = strchr (s, 0x2e)) &&
(locale_data = localeconv ()) &&
(locale_data->decimal_point[0] != 0x2e ||
locale_data->decimal_point[1] != 0))
(decimal_point[0] != 0x2e ||
decimal_point[1] != 0))
{
char buf[128];
int slen = strlen (s);
int dlen = strlen (locale_data->decimal_point);
if (slen + dlen > (int) sizeof (buf))
{
@ -1381,7 +1392,7 @@ FcStrtod (char *s, char **end)
/* mantissa */
strncpy (buf, s, dot - s);
/* decimal point */
strcpy (buf + (dot - s), locale_data->decimal_point);
strcpy (buf + (dot - s), decimal_point);
/* rest of number */
strcpy (buf + (dot - s) + dlen, dot + 1);
buf_end = 0;