summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--meson.build4
-rw-r--r--src/libcamera/base/utils.cpp12
2 files changed, 16 insertions, 0 deletions
diff --git a/meson.build b/meson.build
index e86673dd..389c5472 100644
--- a/meson.build
+++ b/meson.build
@@ -72,6 +72,10 @@ if cc.has_header_symbol('unistd.h', 'issetugid')
config_h.set('HAVE_ISSETUGID', 1)
endif
+if cc.has_header_symbol('locale.h', 'locale_t', prefix : '#define _GNU_SOURCE')
+ config_h.set('HAVE_LOCALE_T', 1)
+endif
+
if cc.has_header_symbol('stdlib.h', 'secure_getenv', prefix : '#define _GNU_SOURCE')
config_h.set('HAVE_SECURE_GETENV', 1)
endif
diff --git a/src/libcamera/base/utils.cpp b/src/libcamera/base/utils.cpp
index 4a239427..3b73b442 100644
--- a/src/libcamera/base/utils.cpp
+++ b/src/libcamera/base/utils.cpp
@@ -464,6 +464,8 @@ std::string toAscii(const std::string &str)
* \a b
*/
+#if HAVE_LOCALE_T
+
namespace {
/*
@@ -493,6 +495,8 @@ Locale cLocale("C");
} /* namespace */
+#endif /* HAVE_LOCALE_T */
+
/**
* \brief Convert a string to a double independently of the current locale
* \param[in] nptr The string to convert
@@ -506,7 +510,15 @@ Locale cLocale("C");
*/
double strtod(const char *__restrict nptr, char **__restrict endptr)
{
+#if HAVE_LOCALE_T
return strtod_l(nptr, endptr, cLocale.locale());
+#else
+ /*
+ * If the libc implementation doesn't provide locale object support,
+ * assume that strtod() is locale-independent.
+ */
+ return strtod(nptr, endptr);
+#endif
}
} /* namespace utils */