Clean up localeconv(3).
The OpenBSD doesn't support C99, and the extent to which we support
locales is trivial, so just do it ourselves.
Change-Id: If0a06e627ecc593f7b8ea3e9389365782e49b00e
diff --git a/libc/Android.mk b/libc/Android.mk
index e4e58b7..07a0735 100644
--- a/libc/Android.mk
+++ b/libc/Android.mk
@@ -142,6 +142,7 @@
bionic/libc_logging.cpp \
bionic/libgen.cpp \
bionic/link.cpp \
+ bionic/locale.cpp \
bionic/lstat.cpp \
bionic/mkdir.cpp \
bionic/mkfifo.cpp \
@@ -187,7 +188,6 @@
bionic/setegid.cpp \
bionic/__set_errno.cpp \
bionic/seteuid.cpp \
- bionic/setlocale.cpp \
bionic/setpgrp.cpp \
bionic/sigaction.cpp \
bionic/sigaddset.cpp \
diff --git a/libc/arch-arm64/arm64.mk b/libc/arch-arm64/arm64.mk
index 7b6b1c3..88da1f3 100644
--- a/libc/arch-arm64/arm64.mk
+++ b/libc/arch-arm64/arm64.mk
@@ -14,11 +14,6 @@
upstream-freebsd/lib/libc/string/wcslen.c \
upstream-freebsd/lib/libc/string/wcsrchr.c \
upstream-freebsd/lib/libc/string/wmemcmp.c \
- upstream-openbsd/lib/libc/locale/_def_numeric.c \
- upstream-openbsd/lib/libc/locale/_def_messages.c \
- upstream-openbsd/lib/libc/locale/_def_monetary.c \
- upstream-openbsd/lib/libc/locale/_def_time.c \
- upstream-openbsd/lib/libc/locale/localeconv.c \
upstream-openbsd/lib/libc/string/bcopy.c \
upstream-openbsd/lib/libc/string/strcat.c \
upstream-openbsd/lib/libc/string/strcpy.c \
diff --git a/libc/arch-mips64/mips64.mk b/libc/arch-mips64/mips64.mk
index 9b29f0d..28806e1 100644
--- a/libc/arch-mips64/mips64.mk
+++ b/libc/arch-mips64/mips64.mk
@@ -16,11 +16,6 @@
upstream-freebsd/lib/libc/string/wcslen.c \
upstream-freebsd/lib/libc/string/wcsrchr.c \
upstream-freebsd/lib/libc/string/wmemcmp.c \
- upstream-openbsd/lib/libc/locale/_def_numeric.c \
- upstream-openbsd/lib/libc/locale/_def_messages.c \
- upstream-openbsd/lib/libc/locale/_def_monetary.c \
- upstream-openbsd/lib/libc/locale/_def_time.c \
- upstream-openbsd/lib/libc/locale/localeconv.c \
upstream-openbsd/lib/libc/string/bcopy.c \
upstream-openbsd/lib/libc/string/strcat.c \
upstream-openbsd/lib/libc/string/strcmp.c \
diff --git a/libc/arch-x86_64/x86_64.mk b/libc/arch-x86_64/x86_64.mk
index a3adaa4..9bce065 100644
--- a/libc/arch-x86_64/x86_64.mk
+++ b/libc/arch-x86_64/x86_64.mk
@@ -18,11 +18,6 @@
upstream-freebsd/lib/libc/string/wcslen.c \
upstream-freebsd/lib/libc/string/wcsrchr.c \
upstream-freebsd/lib/libc/string/wmemcmp.c \
- upstream-openbsd/lib/libc/locale/_def_numeric.c \
- upstream-openbsd/lib/libc/locale/_def_messages.c \
- upstream-openbsd/lib/libc/locale/_def_monetary.c \
- upstream-openbsd/lib/libc/locale/_def_time.c \
- upstream-openbsd/lib/libc/locale/localeconv.c \
upstream-openbsd/lib/libc/string/bcopy.c \
upstream-openbsd/lib/libc/string/strcat.c \
upstream-openbsd/lib/libc/string/strcmp.c \
diff --git a/libc/bionic/locale.cpp b/libc/bionic/locale.cpp
new file mode 100644
index 0000000..e20a1de
--- /dev/null
+++ b/libc/bionic/locale.cpp
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <locale.h>
+#include <pthread.h>
+#include <stdlib.h>
+
+static pthread_once_t locale_once = PTHREAD_ONCE_INIT;
+static lconv locale;
+
+static void __locale_init() {
+ locale.decimal_point = const_cast<char*>(".");
+
+ char* not_available = const_cast<char*>("");
+ locale.thousands_sep = not_available;
+ locale.grouping = not_available;
+ locale.int_curr_symbol = not_available;
+ locale.currency_symbol = not_available;
+ locale.mon_decimal_point = not_available;
+ locale.mon_thousands_sep = not_available;
+ locale.mon_grouping = not_available;
+ locale.positive_sign = not_available;
+ locale.negative_sign = not_available;
+
+ locale.int_frac_digits = CHAR_MAX;
+ locale.frac_digits = CHAR_MAX;
+ locale.p_cs_precedes = CHAR_MAX;
+ locale.p_sep_by_space = CHAR_MAX;
+ locale.n_cs_precedes = CHAR_MAX;
+ locale.n_sep_by_space = CHAR_MAX;
+ locale.p_sign_posn = CHAR_MAX;
+ locale.n_sign_posn = CHAR_MAX;
+ locale.int_p_cs_precedes = CHAR_MAX;
+ locale.int_p_sep_by_space = CHAR_MAX;
+ locale.int_n_cs_precedes = CHAR_MAX;
+ locale.int_n_sep_by_space = CHAR_MAX;
+ locale.int_p_sign_posn = CHAR_MAX;
+ locale.int_n_sign_posn = CHAR_MAX;
+}
+
+lconv* localeconv() {
+ pthread_once(&locale_once, __locale_init);
+ return &locale;
+}
+
+// setlocale(3) always fails on bionic.
+char* setlocale(int /*category*/, char const* /*locale*/) {
+ return NULL;
+}
diff --git a/libc/bionic/setlocale.cpp b/libc/bionic/setlocale.cpp
deleted file mode 100644
index e8fdc9e..0000000
--- a/libc/bionic/setlocale.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <locale.h>
-#include <stdlib.h>
-
-// setlocale(3) always fails on bionic.
-char* setlocale(int /*category*/, char const* /*locale*/) {
- return NULL;
-}
diff --git a/libc/include/locale.h b/libc/include/locale.h
index 4efc564..aa6b474 100644
--- a/libc/include/locale.h
+++ b/libc/include/locale.h
@@ -49,9 +49,6 @@
LC_IDENTIFICATION = 12
};
-extern char* setlocale(int, const char*);
-
-#if defined(__LP64__)
struct lconv {
char* decimal_point;
char* thousands_sep;
@@ -71,7 +68,6 @@
char n_sep_by_space;
char p_sign_posn;
char n_sign_posn;
- /* ISO-C99 */
char int_p_cs_precedes;
char int_p_sep_by_space;
char int_n_cs_precedes;
@@ -79,12 +75,9 @@
char int_p_sign_posn;
char int_n_sign_posn;
};
-#else
-// Keep old declaration for ILP32 for compatibility
-struct lconv { };
-#endif
struct lconv* localeconv(void);
+extern char* setlocale(int, const char*);
__END_DECLS
diff --git a/libc/include/sys/localedef.h b/libc/include/sys/localedef.h
deleted file mode 100644
index b6b5eb1..0000000
--- a/libc/include/sys/localedef.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/* $OpenBSD: localedef.h,v 1.3 1996/04/21 22:31:47 deraadt Exp $ */
-/* $NetBSD: localedef.h,v 1.4 1996/04/09 20:55:31 cgd Exp $ */
-
-/*
- * Copyright (c) 1994 Winning Strategies, Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Winning Strategies, Inc.
- * 4. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _SYS_LOCALEDEF_H_
-#define _SYS_LOCALEDEF_H_
-
-#include <sys/param.h>
-#include <sys/types.h>
-
-typedef struct
-{
- char *yesexpr;
- char *noexpr;
- char *yesstr;
- char *nostr;
-} _MessagesLocale;
-
-extern const _MessagesLocale *_CurrentMessagesLocale;
-extern const _MessagesLocale _DefaultMessagesLocale;
-
-
-typedef struct
-{
- char *int_curr_symbol;
- char *currency_symbol;
- char *mon_decimal_point;
- char *mon_thousands_sep;
- char *mon_grouping;
- char *positive_sign;
- char *negative_sign;
- char int_frac_digits;
- char frac_digits;
- char p_cs_precedes;
- char p_sep_by_space;
- char n_cs_precedes;
- char n_sep_by_space;
- char p_sign_posn;
- char n_sign_posn;
-} _MonetaryLocale;
-
-extern const _MonetaryLocale *_CurrentMonetaryLocale;
-extern const _MonetaryLocale _DefaultMonetaryLocale;
-
-
-typedef struct
-{
- const char *decimal_point;
- const char *thousands_sep;
- const char *grouping;
-} _NumericLocale;
-
-extern const _NumericLocale *_CurrentNumericLocale;
-extern const _NumericLocale _DefaultNumericLocale;
-
-
-typedef struct {
- const char *abday[7];
- const char *day[7];
- const char *abmon[12];
- const char *mon[12];
- const char *am_pm[2];
- const char *d_t_fmt;
- const char *d_fmt;
- const char *t_fmt;
- const char *t_fmt_ampm;
-} _TimeLocale;
-
-extern const _TimeLocale *_CurrentTimeLocale;
-extern const _TimeLocale _DefaultTimeLocale;
-
-#endif /* !_SYS_LOCALEDEF_H_ */
diff --git a/libc/stdlib/strtod.c b/libc/stdlib/strtod.c
index b39c90e..95d0e19 100644
--- a/libc/stdlib/strtod.c
+++ b/libc/stdlib/strtod.c
@@ -1332,15 +1332,11 @@
Bigint *bb1, *bd0;
Bigint *bb = NULL, *bd = NULL, *bs = NULL, *delta = NULL;/* pacify gcc */
-#if defined(__LP64__) /* BEGIN android-changed: no localeconv for ILP32. */
#ifndef KR_headers
CONST char decimal_point = localeconv()->decimal_point[0];
#else
CONST char decimal_point = '.';
#endif
-#else
- CONST char decimal_point = '.';
-#endif /* END android-changed */
sign = nz0 = nz = 0;
value(rv) = 0.;
diff --git a/libc/upstream-openbsd/lib/libc/locale/_def_messages.c b/libc/upstream-openbsd/lib/libc/locale/_def_messages.c
deleted file mode 100644
index 1ed653a..0000000
--- a/libc/upstream-openbsd/lib/libc/locale/_def_messages.c
+++ /dev/null
@@ -1,18 +0,0 @@
-/* $OpenBSD: _def_messages.c,v 1.5 2005/08/08 08:05:35 espie Exp $ */
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <sys/localedef.h>
-#include <locale.h>
-
-const _MessagesLocale _DefaultMessagesLocale =
-{
- "^[Yy]",
- "^[Nn]",
- "yes",
- "no"
-} ;
-
-const _MessagesLocale *_CurrentMessagesLocale = &_DefaultMessagesLocale;
diff --git a/libc/upstream-openbsd/lib/libc/locale/_def_monetary.c b/libc/upstream-openbsd/lib/libc/locale/_def_monetary.c
deleted file mode 100644
index aa92c75..0000000
--- a/libc/upstream-openbsd/lib/libc/locale/_def_monetary.c
+++ /dev/null
@@ -1,30 +0,0 @@
-/* $OpenBSD: _def_monetary.c,v 1.4 2005/08/08 08:05:35 espie Exp $ */
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <sys/localedef.h>
-#include <limits.h>
-#include <locale.h>
-
-const _MonetaryLocale _DefaultMonetaryLocale =
-{
- "",
- "",
- "",
- "",
- "",
- "",
- "",
- CHAR_MAX,
- CHAR_MAX,
- CHAR_MAX,
- CHAR_MAX,
- CHAR_MAX,
- CHAR_MAX,
- CHAR_MAX,
- CHAR_MAX
-};
-
-const _MonetaryLocale *_CurrentMonetaryLocale = &_DefaultMonetaryLocale;
diff --git a/libc/upstream-openbsd/lib/libc/locale/_def_numeric.c b/libc/upstream-openbsd/lib/libc/locale/_def_numeric.c
deleted file mode 100644
index 6511254..0000000
--- a/libc/upstream-openbsd/lib/libc/locale/_def_numeric.c
+++ /dev/null
@@ -1,17 +0,0 @@
-/* $OpenBSD: _def_numeric.c,v 1.4 2005/08/08 08:05:35 espie Exp $ */
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <sys/localedef.h>
-#include <locale.h>
-
-const _NumericLocale _DefaultNumericLocale =
-{
- ".",
- "",
- ""
-};
-
-const _NumericLocale *_CurrentNumericLocale = &_DefaultNumericLocale;
diff --git a/libc/upstream-openbsd/lib/libc/locale/_def_time.c b/libc/upstream-openbsd/lib/libc/locale/_def_time.c
deleted file mode 100644
index 75179a6..0000000
--- a/libc/upstream-openbsd/lib/libc/locale/_def_time.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* $OpenBSD: _def_time.c,v 1.5 2011/10/09 06:39:53 ajacoutot Exp $ */
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <sys/localedef.h>
-#include <locale.h>
-
-const _TimeLocale _DefaultTimeLocale =
-{
- {
- "Sun","Mon","Tue","Wed","Thu","Fri","Sat",
- },
- {
- "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday",
- "Friday", "Saturday"
- },
- {
- "Jan", "Feb", "Mar", "Apr", "May", "Jun",
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
- },
- {
- "January", "February", "March", "April", "May", "June", "July",
- "August", "September", "October", "November", "December"
- },
- {
- "AM", "PM"
- },
- "%a %b %e %H:%M:%S %Y",
- "%m/%d/%y",
- "%H:%M:%S",
- "%I:%M:%S %p"
-};
-
-const _TimeLocale *_CurrentTimeLocale = &_DefaultTimeLocale;
diff --git a/libc/upstream-openbsd/lib/libc/locale/localeconv.c b/libc/upstream-openbsd/lib/libc/locale/localeconv.c
deleted file mode 100644
index 989eb4b..0000000
--- a/libc/upstream-openbsd/lib/libc/locale/localeconv.c
+++ /dev/null
@@ -1,59 +0,0 @@
-/* $OpenBSD: localeconv.c,v 1.5 2005/08/08 08:05:35 espie Exp $ */
-/*
- * Written by J.T. Conklin <jtc@netbsd.org>.
- * Public domain.
- */
-
-#include <sys/localedef.h>
-#include <locale.h>
-
-/*
- * The localeconv() function constructs a struct lconv from the current
- * monetary and numeric locales.
- *
- * Because localeconv() may be called many times (especially by library
- * routines like printf() & strtod()), the approprate members of the
- * lconv structure are computed only when the monetary or numeric
- * locale has been changed.
- */
-int __mlocale_changed = 1;
-int __nlocale_changed = 1;
-
-/*
- * Return the current locale conversion.
- */
-struct lconv *
-localeconv(void)
-{
- static struct lconv ret;
-
- if (__mlocale_changed) {
- /* LC_MONETARY */
- ret.int_curr_symbol = _CurrentMonetaryLocale->int_curr_symbol;
- ret.currency_symbol = _CurrentMonetaryLocale->currency_symbol;
- ret.mon_decimal_point = _CurrentMonetaryLocale->mon_decimal_point;
- ret.mon_thousands_sep = _CurrentMonetaryLocale->mon_thousands_sep;
- ret.mon_grouping = _CurrentMonetaryLocale->mon_grouping;
- ret.positive_sign = _CurrentMonetaryLocale->positive_sign;
- ret.negative_sign = _CurrentMonetaryLocale->negative_sign;
- ret.int_frac_digits = _CurrentMonetaryLocale->int_frac_digits;
- ret.frac_digits = _CurrentMonetaryLocale->frac_digits;
- ret.p_cs_precedes = _CurrentMonetaryLocale->p_cs_precedes;
- ret.p_sep_by_space = _CurrentMonetaryLocale->p_sep_by_space;
- ret.n_cs_precedes = _CurrentMonetaryLocale->n_cs_precedes;
- ret.n_sep_by_space = _CurrentMonetaryLocale->n_sep_by_space;
- ret.p_sign_posn = _CurrentMonetaryLocale->p_sign_posn;
- ret.n_sign_posn = _CurrentMonetaryLocale->n_sign_posn;
- __mlocale_changed = 0;
- }
-
- if (__nlocale_changed) {
- /* LC_NUMERIC */
- ret.decimal_point = (char *) _CurrentNumericLocale->decimal_point;
- ret.thousands_sep = (char *) _CurrentNumericLocale->thousands_sep;
- ret.grouping = (char *) _CurrentNumericLocale->grouping;
- __nlocale_changed = 0;
- }
-
- return (&ret);
-}
diff --git a/tests/locale_test.cpp b/tests/locale_test.cpp
index df58a70..87dd631 100644
--- a/tests/locale_test.cpp
+++ b/tests/locale_test.cpp
@@ -16,13 +16,32 @@
#include <gtest/gtest.h>
+#include <limits.h>
#include <locale.h>
TEST(locale, localeconv) {
-#ifdef __LP64__
- ASSERT_STREQ(".", localeconv()->decimal_point);
- ASSERT_STREQ("", localeconv()->currency_symbol);
-#else
- GTEST_LOG_(INFO) << "This test does nothing.\n";
-#endif
+ EXPECT_STREQ(".", localeconv()->decimal_point);
+ EXPECT_STREQ("", localeconv()->thousands_sep);
+ EXPECT_STREQ("", localeconv()->grouping);
+ EXPECT_STREQ("", localeconv()->int_curr_symbol);
+ EXPECT_STREQ("", localeconv()->currency_symbol);
+ EXPECT_STREQ("", localeconv()->mon_decimal_point);
+ EXPECT_STREQ("", localeconv()->mon_thousands_sep);
+ EXPECT_STREQ("", localeconv()->mon_grouping);
+ EXPECT_STREQ("", localeconv()->positive_sign);
+ EXPECT_STREQ("", localeconv()->negative_sign);
+ EXPECT_EQ(CHAR_MAX, localeconv()->int_frac_digits);
+ EXPECT_EQ(CHAR_MAX, localeconv()->frac_digits);
+ EXPECT_EQ(CHAR_MAX, localeconv()->p_cs_precedes);
+ EXPECT_EQ(CHAR_MAX, localeconv()->p_sep_by_space);
+ EXPECT_EQ(CHAR_MAX, localeconv()->n_cs_precedes);
+ EXPECT_EQ(CHAR_MAX, localeconv()->n_sep_by_space);
+ EXPECT_EQ(CHAR_MAX, localeconv()->p_sign_posn);
+ EXPECT_EQ(CHAR_MAX, localeconv()->n_sign_posn);
+ EXPECT_EQ(CHAR_MAX, localeconv()->int_p_cs_precedes);
+ EXPECT_EQ(CHAR_MAX, localeconv()->int_p_sep_by_space);
+ EXPECT_EQ(CHAR_MAX, localeconv()->int_n_cs_precedes);
+ EXPECT_EQ(CHAR_MAX, localeconv()->int_n_sep_by_space);
+ EXPECT_EQ(CHAR_MAX, localeconv()->int_p_sign_posn);
+ EXPECT_EQ(CHAR_MAX, localeconv()->int_n_sign_posn);
}