summaryrefslogtreecommitdiff
path: root/lib/libc
diff options
context:
space:
mode:
authorRong-En Fan <rafan@FreeBSD.org>2007-10-24 14:32:33 +0000
committerRong-En Fan <rafan@FreeBSD.org>2007-10-24 14:32:33 +0000
commit0bb276dd2b10f18120607ebde097f6bebfe28577 (patch)
tree349055156364cd51b84d76b87381bbe0aab3c1f5 /lib/libc
parent60c98c8a09b9431bc9e59db4013d0d0abbcf8eb6 (diff)
Notes
Diffstat (limited to 'lib/libc')
-rw-r--r--lib/libc/locale/big5.c3
-rw-r--r--lib/libc/locale/euc.c3
-rw-r--r--lib/libc/locale/gb18030.c3
-rw-r--r--lib/libc/locale/gb2312.c3
-rw-r--r--lib/libc/locale/gbk.c3
-rw-r--r--lib/libc/locale/isctype.c38
-rw-r--r--lib/libc/locale/mskanji.c3
-rw-r--r--lib/libc/locale/none.c7
-rw-r--r--lib/libc/locale/setrunelocale.c5
-rw-r--r--lib/libc/locale/utf8.c8
10 files changed, 56 insertions, 20 deletions
diff --git a/lib/libc/locale/big5.c b/lib/libc/locale/big5.c
index 44b9957b59789..19977d035dc51 100644
--- a/lib/libc/locale/big5.c
+++ b/lib/libc/locale/big5.c
@@ -49,6 +49,8 @@ __FBSDID("$FreeBSD$");
#include <wchar.h>
#include "mblocal.h"
+extern int __mb_sb_limit;
+
static size_t _BIG5_mbrtowc(wchar_t * __restrict, const char * __restrict,
size_t, mbstate_t * __restrict);
static int _BIG5_mbsinit(const mbstate_t *);
@@ -68,6 +70,7 @@ _BIG5_init(_RuneLocale *rl)
__mbsinit = _BIG5_mbsinit;
_CurrentRuneLocale = rl;
__mb_cur_max = 2;
+ __mb_sb_limit = 128;
return (0);
}
diff --git a/lib/libc/locale/euc.c b/lib/libc/locale/euc.c
index b3b35edb5b6c4..188073e49e38d 100644
--- a/lib/libc/locale/euc.c
+++ b/lib/libc/locale/euc.c
@@ -49,6 +49,8 @@ __FBSDID("$FreeBSD$");
#include <wchar.h>
#include "mblocal.h"
+extern int __mb_sb_limit;
+
static size_t _EUC_mbrtowc(wchar_t * __restrict, const char * __restrict,
size_t, mbstate_t * __restrict);
static int _EUC_mbsinit(const mbstate_t *);
@@ -116,6 +118,7 @@ _EUC_init(_RuneLocale *rl)
__mbrtowc = _EUC_mbrtowc;
__wcrtomb = _EUC_wcrtomb;
__mbsinit = _EUC_mbsinit;
+ __mb_sb_limit = 256;
return (0);
}
diff --git a/lib/libc/locale/gb18030.c b/lib/libc/locale/gb18030.c
index 3e43179d92137..1457d3e7540c3 100644
--- a/lib/libc/locale/gb18030.c
+++ b/lib/libc/locale/gb18030.c
@@ -39,6 +39,8 @@ __FBSDID("$FreeBSD$");
#include <wchar.h>
#include "mblocal.h"
+extern int __mb_sb_limit;
+
static size_t _GB18030_mbrtowc(wchar_t * __restrict, const char * __restrict,
size_t, mbstate_t * __restrict);
static int _GB18030_mbsinit(const mbstate_t *);
@@ -59,6 +61,7 @@ _GB18030_init(_RuneLocale *rl)
__mbsinit = _GB18030_mbsinit;
_CurrentRuneLocale = rl;
__mb_cur_max = 4;
+ __mb_sb_limit = 128;
return (0);
}
diff --git a/lib/libc/locale/gb2312.c b/lib/libc/locale/gb2312.c
index 232dabae866e1..74a7bdc3be79a 100644
--- a/lib/libc/locale/gb2312.c
+++ b/lib/libc/locale/gb2312.c
@@ -35,6 +35,8 @@ __FBSDID("$FreeBSD$");
#include <wchar.h>
#include "mblocal.h"
+extern int __mb_sb_limit;
+
static size_t _GB2312_mbrtowc(wchar_t * __restrict, const char * __restrict,
size_t, mbstate_t * __restrict);
static int _GB2312_mbsinit(const mbstate_t *);
@@ -55,6 +57,7 @@ _GB2312_init(_RuneLocale *rl)
__wcrtomb = _GB2312_wcrtomb;
__mbsinit = _GB2312_mbsinit;
__mb_cur_max = 2;
+ __mb_sb_limit = 128;
return (0);
}
diff --git a/lib/libc/locale/gbk.c b/lib/libc/locale/gbk.c
index 573fd08f34efa..1929861df9c39 100644
--- a/lib/libc/locale/gbk.c
+++ b/lib/libc/locale/gbk.c
@@ -46,6 +46,8 @@ __FBSDID("$FreeBSD$");
#include <wchar.h>
#include "mblocal.h"
+extern int __mb_sb_limit;
+
static size_t _GBK_mbrtowc(wchar_t * __restrict, const char * __restrict,
size_t, mbstate_t * __restrict);
static int _GBK_mbsinit(const mbstate_t *);
@@ -65,6 +67,7 @@ _GBK_init(_RuneLocale *rl)
__mbsinit = _GBK_mbsinit;
_CurrentRuneLocale = rl;
__mb_cur_max = 2;
+ __mb_sb_limit = 128;
return (0);
}
diff --git a/lib/libc/locale/isctype.c b/lib/libc/locale/isctype.c
index d25772bec279e..e0e0db13f5b03 100644
--- a/lib/libc/locale/isctype.c
+++ b/lib/libc/locale/isctype.c
@@ -52,7 +52,7 @@ int
digittoint(c)
int c;
{
- return (__maskrune(c, 0xFF));
+ return (__sbmaskrune(c, 0xFF));
}
#undef isalnum
@@ -60,7 +60,7 @@ int
isalnum(c)
int c;
{
- return (__istype(c, _CTYPE_A|_CTYPE_D));
+ return (__sbistype(c, _CTYPE_A|_CTYPE_D));
}
#undef isalpha
@@ -68,7 +68,7 @@ int
isalpha(c)
int c;
{
- return (__istype(c, _CTYPE_A));
+ return (__sbistype(c, _CTYPE_A));
}
#undef isascii
@@ -84,7 +84,7 @@ int
isblank(c)
int c;
{
- return (__istype(c, _CTYPE_B));
+ return (__sbistype(c, _CTYPE_B));
}
#undef iscntrl
@@ -92,7 +92,7 @@ int
iscntrl(c)
int c;
{
- return (__istype(c, _CTYPE_C));
+ return (__sbistype(c, _CTYPE_C));
}
#undef isdigit
@@ -108,7 +108,7 @@ int
isgraph(c)
int c;
{
- return (__istype(c, _CTYPE_G));
+ return (__sbistype(c, _CTYPE_G));
}
#undef ishexnumber
@@ -116,7 +116,7 @@ int
ishexnumber(c)
int c;
{
- return (__istype(c, _CTYPE_X));
+ return (__sbistype(c, _CTYPE_X));
}
#undef isideogram
@@ -124,7 +124,7 @@ int
isideogram(c)
int c;
{
- return (__istype(c, _CTYPE_I));
+ return (__sbistype(c, _CTYPE_I));
}
#undef islower
@@ -132,7 +132,7 @@ int
islower(c)
int c;
{
- return (__istype(c, _CTYPE_L));
+ return (__sbistype(c, _CTYPE_L));
}
#undef isnumber
@@ -140,7 +140,7 @@ int
isnumber(c)
int c;
{
- return (__istype(c, _CTYPE_D));
+ return (__sbistype(c, _CTYPE_D));
}
#undef isphonogram
@@ -148,7 +148,7 @@ int
isphonogram(c)
int c;
{
- return (__istype(c, _CTYPE_Q));
+ return (__sbistype(c, _CTYPE_Q));
}
#undef isprint
@@ -156,7 +156,7 @@ int
isprint(c)
int c;
{
- return (__istype(c, _CTYPE_R));
+ return (__sbistype(c, _CTYPE_R));
}
#undef ispunct
@@ -164,7 +164,7 @@ int
ispunct(c)
int c;
{
- return (__istype(c, _CTYPE_P));
+ return (__sbistype(c, _CTYPE_P));
}
#undef isrune
@@ -172,7 +172,7 @@ int
isrune(c)
int c;
{
- return (__istype(c, 0xFFFFFF00L));
+ return (__sbistype(c, 0xFFFFFF00L));
}
#undef isspace
@@ -180,7 +180,7 @@ int
isspace(c)
int c;
{
- return (__istype(c, _CTYPE_S));
+ return (__sbistype(c, _CTYPE_S));
}
#undef isspecial
@@ -188,7 +188,7 @@ int
isspecial(c)
int c;
{
- return (__istype(c, _CTYPE_T));
+ return (__sbistype(c, _CTYPE_T));
}
#undef isupper
@@ -196,7 +196,7 @@ int
isupper(c)
int c;
{
- return (__istype(c, _CTYPE_U));
+ return (__sbistype(c, _CTYPE_U));
}
#undef isxdigit
@@ -220,7 +220,7 @@ int
tolower(c)
int c;
{
- return (__tolower(c));
+ return (__sbtolower(c));
}
#undef toupper
@@ -228,6 +228,6 @@ int
toupper(c)
int c;
{
- return (__toupper(c));
+ return (__sbtoupper(c));
}
diff --git a/lib/libc/locale/mskanji.c b/lib/libc/locale/mskanji.c
index aba87e75ec86c..9ee91de28c155 100644
--- a/lib/libc/locale/mskanji.c
+++ b/lib/libc/locale/mskanji.c
@@ -47,6 +47,8 @@ __FBSDID("$FreeBSD$");
#include <wchar.h>
#include "mblocal.h"
+extern int __mb_sb_limit;
+
static size_t _MSKanji_mbrtowc(wchar_t * __restrict, const char * __restrict,
size_t, mbstate_t * __restrict);
static int _MSKanji_mbsinit(const mbstate_t *);
@@ -66,6 +68,7 @@ _MSKanji_init(_RuneLocale *rl)
__mbsinit = _MSKanji_mbsinit;
_CurrentRuneLocale = rl;
__mb_cur_max = 2;
+ __mb_sb_limit = 256;
return (0);
}
diff --git a/lib/libc/locale/none.c b/lib/libc/locale/none.c
index 06b55b9071d50..cc84b94305e0c 100644
--- a/lib/libc/locale/none.c
+++ b/lib/libc/locale/none.c
@@ -62,6 +62,11 @@ static size_t _none_wcrtomb(char * __restrict, wchar_t,
static size_t _none_wcsnrtombs(char * __restrict, const wchar_t ** __restrict,
size_t, size_t, mbstate_t * __restrict);
+/* setup defaults */
+
+int __mb_cur_max = 1;
+int __mb_sb_limit = 256; /* Expected to be <= _CACHED_RUNES */
+
int
_none_init(_RuneLocale *rl)
{
@@ -73,6 +78,7 @@ _none_init(_RuneLocale *rl)
__wcsnrtombs = _none_wcsnrtombs;
_CurrentRuneLocale = rl;
__mb_cur_max = 1;
+ __mb_sb_limit = 256;
return(0);
}
@@ -180,7 +186,6 @@ _none_wcsnrtombs(char * __restrict dst, const wchar_t ** __restrict src,
/* setup defaults */
-int __mb_cur_max = 1;
size_t (*__mbrtowc)(wchar_t * __restrict, const char * __restrict, size_t,
mbstate_t * __restrict) = _none_mbrtowc;
int (*__mbsinit)(const mbstate_t *) = _none_mbsinit;
diff --git a/lib/libc/locale/setrunelocale.c b/lib/libc/locale/setrunelocale.c
index 398bfc5bb46db..73cd0e78c1944 100644
--- a/lib/libc/locale/setrunelocale.c
+++ b/lib/libc/locale/setrunelocale.c
@@ -49,6 +49,8 @@ __FBSDID("$FreeBSD$");
#include "mblocal.h"
#include "setlocale.h"
+extern int __mb_sb_limit;
+
extern _RuneLocale *_Read_RuneMagi(FILE *);
static int __setrunelocale(const char *);
@@ -63,6 +65,7 @@ __setrunelocale(const char *encoding)
static char ctype_encoding[ENCODING_LEN + 1];
static _RuneLocale *CachedRuneLocale;
static int Cached__mb_cur_max;
+ static int Cached__mb_sb_limit;
static size_t (*Cached__mbrtowc)(wchar_t * __restrict,
const char * __restrict, size_t, mbstate_t * __restrict);
static size_t (*Cached__wcrtomb)(char * __restrict, wchar_t,
@@ -89,6 +92,7 @@ __setrunelocale(const char *encoding)
strcmp(encoding, ctype_encoding) == 0) {
_CurrentRuneLocale = CachedRuneLocale;
__mb_cur_max = Cached__mb_cur_max;
+ __mb_sb_limit = Cached__mb_sb_limit;
__mbrtowc = Cached__mbrtowc;
__mbsinit = Cached__mbsinit;
__mbsnrtowcs = Cached__mbsnrtowcs;
@@ -151,6 +155,7 @@ __setrunelocale(const char *encoding)
}
CachedRuneLocale = _CurrentRuneLocale;
Cached__mb_cur_max = __mb_cur_max;
+ Cached__mb_sb_limit = __mb_sb_limit;
Cached__mbrtowc = __mbrtowc;
Cached__mbsinit = __mbsinit;
Cached__mbsnrtowcs = __mbsnrtowcs;
diff --git a/lib/libc/locale/utf8.c b/lib/libc/locale/utf8.c
index e467fc0533904..0ccadd3e8d3bf 100644
--- a/lib/libc/locale/utf8.c
+++ b/lib/libc/locale/utf8.c
@@ -35,6 +35,8 @@ __FBSDID("$FreeBSD$");
#include <wchar.h>
#include "mblocal.h"
+extern int __mb_sb_limit;
+
static size_t _UTF8_mbrtowc(wchar_t * __restrict, const char * __restrict,
size_t, mbstate_t * __restrict);
static int _UTF8_mbsinit(const mbstate_t *);
@@ -63,6 +65,12 @@ _UTF8_init(_RuneLocale *rl)
__wcsnrtombs = _UTF8_wcsnrtombs;
_CurrentRuneLocale = rl;
__mb_cur_max = 6;
+ /*
+ * UCS-4 encoding used as the internal representation, so
+ * slots 0x0080-0x00FF are occuped and must be excluded
+ * from the single byte ctype by setting the limit.
+ */
+ __mb_sb_limit = 128;
return (0);
}