summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManuel Novoa III <mjn3@codepoet.org>2003-09-16 22:22:30 +0000
committerManuel Novoa III <mjn3@codepoet.org>2003-09-16 22:22:30 +0000
commitdeadfa70fc14c6cb582046ace402db291207db28 (patch)
treeb498afa73bf29b4568504b1aac1c05fab38545ba
parent4c7710885ea0d4aaf72fb60e7933e1d3f1a2aaf5 (diff)
This should enabled building of uClibc locale support when using uClibc itself.
Sorry I didn't test this before the release. Please remember that the locale data generation tools are not very robust, so doing something like disabling 8-bit codeset support is likely to break things. As it stands, UTF-8 support is required, but I'm not sure I test for that. Also, you will notice a difference in the locale data generated by uClibc verses glibc. That's because the bg_BG locale specifies use of grouping in LC_NUMERIC, but supplies no grouping char. The uClibc locale code tests for and works around this (at the moment) by disabling grouping. But the result is slightly different data which ripples throughout the rest of the tables.
-rw-r--r--extra/locale/gen_wc8bit.c5
-rw-r--r--extra/locale/gen_wctype.c5
-rw-r--r--libc/sysdeps/linux/common/bits/uClibc_locale.h11
3 files changed, 13 insertions, 8 deletions
diff --git a/extra/locale/gen_wc8bit.c b/extra/locale/gen_wc8bit.c
index 75054667a..8a6d47a11 100644
--- a/extra/locale/gen_wc8bit.c
+++ b/extra/locale/gen_wc8bit.c
@@ -7,12 +7,13 @@
#include <wctype.h>
#include <limits.h>
-#ifndef __UCLIBC__
+#ifndef _CTYPE_H
+#define _CTYPE_H
+#endif
#ifndef _WCTYPE_H
#define _WCTYPE_H
#endif
#include "../../libc/sysdeps/linux/common/bits/uClibc_ctype.h"
-#endif
/* #define CTYPE_PACKED */
diff --git a/extra/locale/gen_wctype.c b/extra/locale/gen_wctype.c
index a9bcf614b..6a90b92c7 100644
--- a/extra/locale/gen_wctype.c
+++ b/extra/locale/gen_wctype.c
@@ -10,12 +10,13 @@
#include <wchar.h>
#include <ctype.h>
-#ifndef __UCLIBC__
+#ifndef _CTYPE_H
+#define _CTYPE_H
+#endif
#ifndef _WCTYPE_H
#define _WCTYPE_H
#endif
#include "../../libc/sysdeps/linux/common/bits/uClibc_ctype.h"
-#endif
/* 0x9 : space blank */
/* 0xa : space */
diff --git a/libc/sysdeps/linux/common/bits/uClibc_locale.h b/libc/sysdeps/linux/common/bits/uClibc_locale.h
index 88226c638..0b8699e32 100644
--- a/libc/sysdeps/linux/common/bits/uClibc_locale.h
+++ b/libc/sysdeps/linux/common/bits/uClibc_locale.h
@@ -71,7 +71,9 @@
#include <stdint.h>
#include <bits/uClibc_touplow.h>
+#if defined(_LIBC) && !defined(__UCLIBC_GEN_LOCALE)
#include <bits/uClibc_locale_data.h>
+#endif
extern void _locale_set(const unsigned char *p);
extern void _locale_init(void);
@@ -96,6 +98,7 @@ enum {
* In particular, C/POSIX locale is '#' + "\x80\x01"}*LC_ALL + nul.
*/
+#if defined(_LIBC) && !defined(__UCLIBC_GEN_LOCALE)
typedef struct {
uint16_t num_weights;
uint16_t num_starters;
@@ -139,7 +142,7 @@ typedef struct {
/* static unsigned char cur_locale[LOCALE_STRING_SIZE]; */
-typedef struct {
+typedef struct __uclibc_locale_struct {
#ifdef __UCLIBC_HAS_XLOCALE__
const __ctype_mask_t *__ctype_b;
const __ctype_touplow_t *__ctype_tolower;
@@ -311,10 +314,10 @@ typedef struct {
} __uclibc_locale_t;
-typedef __uclibc_locale_t *__locale_t;
-
-extern __locale_t __global_locale;
+extern struct __uclibc_locale_struct * __global_locale;
+#endif
+typedef struct __uclibc_locale_struct *__locale_t;
extern int __locale_mbrtowc_l(wchar_t *__restrict dst,
const char *__restrict src,