summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Johnson <ajohnson@redneon.com>2014-03-24 19:08:10 +1030
committerBryce Harrington <bryce@osg.samsung.com>2014-09-23 11:40:03 -0700
commit9a19ef185884da1e7d5344b301f48aa2ba0f88b6 (patch)
tree39f752f1e4746d2d9f601eebaf7af04d88812488
parenta02e29a12d82f177bdf99ed8cfd0c3b3b78c44da (diff)
downloadcairo-9a19ef185884da1e7d5344b301f48aa2ba0f88b6.tar.gz
Fix compilation with bionic libc
Refactor out a cairo_get_locale_decimal_point() routine to handle a case where localeconv() is not available. Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=70492 Reviewed-by: Bryce Harrington <b.harrington@samsung.com> [edit: Condensed cairo_get_locale_decimal_point and conditionalized locale.h inclusion. -- bryce]
-rw-r--r--src/cairo-cff-subset.c4
-rw-r--r--src/cairo-misc.c18
-rw-r--r--src/cairo-output-stream.c5
-rw-r--r--src/cairo-type1-subset.c5
-rw-r--r--src/cairoint.h3
5 files changed, 24 insertions, 11 deletions
diff --git a/src/cairo-cff-subset.c b/src/cairo-cff-subset.c
index 1bb9461c7..4660d6e09 100644
--- a/src/cairo-cff-subset.c
+++ b/src/cairo-cff-subset.c
@@ -295,7 +295,6 @@ decode_nibble (int n, char *buf)
static unsigned char *
decode_real (unsigned char *p, double *real)
{
- struct lconv *locale_data;
const char *decimal_point;
int decimal_point_len;
int n;
@@ -305,8 +304,7 @@ decode_real (unsigned char *p, double *real)
char *buf = buffer;
char *buf_end = buffer + sizeof (buffer);
- locale_data = localeconv ();
- decimal_point = locale_data->decimal_point;
+ decimal_point = cairo_get_locale_decimal_point ();
decimal_point_len = strlen (decimal_point);
assert (decimal_point_len != 0);
diff --git a/src/cairo-misc.c b/src/cairo-misc.c
index 7575d42ce..df8a4efc9 100644
--- a/src/cairo-misc.c
+++ b/src/cairo-misc.c
@@ -759,6 +759,24 @@ _cairo_half_from_float (float f)
}
}
+#ifndef __BIONIC__
+# include <locale.h>
+
+const char *
+cairo_get_locale_decimal_point (void)
+{
+ struct lconv *locale_data = localeconv ();
+ return locale_data->decimal_point;
+}
+
+#else
+/* Android's Bionic libc doesn't provide decimal_point */
+const char *
+cairo_get_locale_decimal_point (void)
+{
+ return '.';
+}
+#endif
#ifdef _WIN32
diff --git a/src/cairo-output-stream.c b/src/cairo-output-stream.c
index 6d6c180c6..369a59bfb 100644
--- a/src/cairo-output-stream.c
+++ b/src/cairo-output-stream.c
@@ -43,7 +43,6 @@
#include "cairo-compiler-private.h"
#include <stdio.h>
-#include <locale.h>
#include <errno.h>
/* Numbers printed with %f are printed with this number of significant
@@ -303,7 +302,6 @@ _cairo_output_stream_write_hex_string (cairo_output_stream_t *stream,
static void
_cairo_dtostr (char *buffer, size_t size, double d, cairo_bool_t limited_precision)
{
- struct lconv *locale_data;
const char *decimal_point;
int decimal_point_len;
char *p;
@@ -314,8 +312,7 @@ _cairo_dtostr (char *buffer, size_t size, double d, cairo_bool_t limited_precisi
if (d == 0.0)
d = 0.0;
- locale_data = localeconv ();
- decimal_point = locale_data->decimal_point;
+ decimal_point = cairo_get_locale_decimal_point ();
decimal_point_len = strlen (decimal_point);
assert (decimal_point_len != 0);
diff --git a/src/cairo-type1-subset.c b/src/cairo-type1-subset.c
index 47d85b2fb..b15663509 100644
--- a/src/cairo-type1-subset.c
+++ b/src/cairo-type1-subset.c
@@ -53,7 +53,6 @@
#include "cairo-output-stream-private.h"
#include <ctype.h>
-#include <locale.h>
#define TYPE1_STACKSIZE 24 /* Defined in Type 1 Font Format */
@@ -309,12 +308,10 @@ cairo_type1_font_subset_get_matrix (cairo_type1_font_subset_t *font,
const char *start, *end, *segment_end;
int ret, s_max, i, j;
char *s;
- struct lconv *locale_data;
const char *decimal_point;
int decimal_point_len;
- locale_data = localeconv ();
- decimal_point = locale_data->decimal_point;
+ decimal_point = cairo_get_locale_decimal_point ();
decimal_point_len = strlen (decimal_point);
assert (decimal_point_len != 0);
diff --git a/src/cairoint.h b/src/cairoint.h
index 080bb5ddc..75b34d00c 100644
--- a/src/cairoint.h
+++ b/src/cairoint.h
@@ -871,6 +871,9 @@ _cairo_intern_string (const char **str_inout, int len);
cairo_private void
_cairo_intern_string_reset_static_data (void);
+cairo_private const char *
+cairo_get_locale_decimal_point (void);
+
/* cairo-path-fixed.c */
cairo_private cairo_path_fixed_t *
_cairo_path_fixed_create (void);