summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Craig <ben.craig@codeaurora.org>2016-02-18 17:40:16 +0000
committerBen Craig <ben.craig@codeaurora.org>2016-02-18 17:40:16 +0000
commitb8aea04ef51f02b9224a7a4a577ee44c5c69d899 (patch)
tree43fb50849b6470bde91eeaf57a77e327a5e0b5d3
parent217946da98f41bc6cb0ca54bc01a5e804e034937 (diff)
downloadbcm5719-llvm-b8aea04ef51f02b9224a7a4a577ee44c5c69d899.tar.gz
bcm5719-llvm-b8aea04ef51f02b9224a7a4a577ee44c5c69d899.zip
Split locale management out of newlib/xlocale.h. NFCI
This is one part of many of a locale refactor. See http://reviews.llvm.org/D17146 for an idea of where this is going. For the locale refactor, the locale management functions (newlocale, freelocale, uselocale) are needed in a separate header from the various _l functions. This is because some platforms implement the _l functions in terms of a locale switcher RAII helper, and the locale switcher RAII helper needs the locale management functions. This patch helps pave the way by getting all the functions in the right files, so that later diffs aren't completely horrible. The "do-nothing" / "nop" locale functions are also useful on their own for other lightweight platforms. Putting these nop implementations in support/xlocale should enable code sharing. Unfortunately, I have no access to a newlib system to build and test with, so this change has been made blind. Reviewed: http://reviews.llvm.org/D17382 llvm-svn: 261231
-rw-r--r--libcxx/include/support/newlib/xlocale.h31
-rw-r--r--libcxx/include/support/xlocale/__nop_locale_mgmt.h52
2 files changed, 53 insertions, 30 deletions
diff --git a/libcxx/include/support/newlib/xlocale.h b/libcxx/include/support/newlib/xlocale.h
index d067cf85a3b..f729ee5f071 100644
--- a/libcxx/include/support/newlib/xlocale.h
+++ b/libcxx/include/support/newlib/xlocale.h
@@ -16,41 +16,12 @@
#include <clocale>
#include <cwctype>
#include <ctype.h>
+#include <support/xlocale/__nop_locale_mgmt.h>
#ifdef __cplusplus
extern "C" {
#endif
-// Patch over newlib's lack of extended locale support
-typedef void *locale_t;
-static inline locale_t duplocale(locale_t) {
- return NULL;
-}
-
-static inline void freelocale(locale_t) {
-}
-
-static inline locale_t newlocale(int, const char *, locale_t) {
- return NULL;
-}
-
-static inline locale_t uselocale(locale_t) {
- return NULL;
-}
-
-#define LC_COLLATE_MASK (1 << LC_COLLATE)
-#define LC_CTYPE_MASK (1 << LC_CTYPE)
-#define LC_MESSAGES_MASK (1 << LC_MESSAGES)
-#define LC_MONETARY_MASK (1 << LC_MONETARY)
-#define LC_NUMERIC_MASK (1 << LC_NUMERIC)
-#define LC_TIME_MASK (1 << LC_TIME)
-#define LC_ALL_MASK (LC_COLLATE_MASK|\
- LC_CTYPE_MASK|\
- LC_MONETARY_MASK|\
- LC_NUMERIC_MASK|\
- LC_TIME_MASK|\
- LC_MESSAGES_MASK)
-
// Share implementation with Android's Bionic
#include <support/xlocale/xlocale.h>
diff --git a/libcxx/include/support/xlocale/__nop_locale_mgmt.h b/libcxx/include/support/xlocale/__nop_locale_mgmt.h
new file mode 100644
index 00000000000..0d3f23a2c96
--- /dev/null
+++ b/libcxx/include/support/xlocale/__nop_locale_mgmt.h
@@ -0,0 +1,52 @@
+// -*- C++ -*-
+//===------------ support/xlocale/__nop_locale_mgmt.h -----------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef _LIBCPP_SUPPORT_XLOCALE_NOP_LOCALE_MGMT_H
+#define _LIBCPP_SUPPORT_XLOCALE_NOP_LOCALE_MGMT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Patch over lack of extended locale support
+typedef void *locale_t;
+static inline locale_t duplocale(locale_t) {
+ return NULL;
+}
+
+static inline void freelocale(locale_t) {
+}
+
+static inline locale_t newlocale(int, const char *, locale_t) {
+ return NULL;
+}
+
+static inline locale_t uselocale(locale_t) {
+ return NULL;
+}
+
+#define LC_COLLATE_MASK (1 << LC_COLLATE)
+#define LC_CTYPE_MASK (1 << LC_CTYPE)
+#define LC_MESSAGES_MASK (1 << LC_MESSAGES)
+#define LC_MONETARY_MASK (1 << LC_MONETARY)
+#define LC_NUMERIC_MASK (1 << LC_NUMERIC)
+#define LC_TIME_MASK (1 << LC_TIME)
+#define LC_ALL_MASK (LC_COLLATE_MASK|\
+ LC_CTYPE_MASK|\
+ LC_MONETARY_MASK|\
+ LC_NUMERIC_MASK|\
+ LC_TIME_MASK|\
+ LC_MESSAGES_MASK)
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif // _LIBCPP_SUPPORT_XLOCALE_NOP_LOCALE_MGMT_H
OpenPOWER on IntegriCloud