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