diff options
author | ache <ache@FreeBSD.org> | 1995-11-03 08:59:02 +0000 |
---|---|---|
committer | ache <ache@FreeBSD.org> | 1995-11-03 08:59:02 +0000 |
commit | 94bfe4fc2daad94a8db6f6357509d07c43ba23e7 (patch) | |
tree | a19d0b48f043559abd58365a4b3393bbc6da9c5c /lib | |
parent | 5f00167641d57332e1952cd7ec49cfc0aa9444d9 (diff) | |
download | FreeBSD-src-94bfe4fc2daad94a8db6f6357509d07c43ba23e7.zip FreeBSD-src-94bfe4fc2daad94a8db6f6357509d07c43ba23e7.tar.gz |
Move more stuff out to XPG4
Handle negative chars inside runetype/tolower/toupper
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libc/locale/runetype.c | 11 | ||||
-rw-r--r-- | lib/libc/locale/setrunelocale.c | 1 | ||||
-rw-r--r-- | lib/libc/locale/tolower.c | 10 | ||||
-rw-r--r-- | lib/libc/locale/toupper.c | 10 |
4 files changed, 32 insertions, 0 deletions
diff --git a/lib/libc/locale/runetype.c b/lib/libc/locale/runetype.c index 6dd7ea8..ba128c6 100644 --- a/lib/libc/locale/runetype.c +++ b/lib/libc/locale/runetype.c @@ -41,12 +41,22 @@ unsigned long ___runetype(c) _BSD_RUNE_T_ c; { +#ifdef XPG4 int x; _RuneRange *rr = &_CurrentRuneLocale->runetype_ext; _RuneEntry *re = rr->ranges; +#endif if (c == EOF) return(0); + if (c < 0) { + if (c >= -128) /* signed char */ + return(_CurrentRuneLocale->runetype[(unsigned char)c]); + else + return(0); + } + +#ifdef XPG4 for (x = 0; x < rr->nranges; ++x, ++re) { if (c < re->min) return(0L); @@ -57,6 +67,7 @@ ___runetype(c) return(re->map); } } +#endif return(0L); } diff --git a/lib/libc/locale/setrunelocale.c b/lib/libc/locale/setrunelocale.c index df2db3c..4889667 100644 --- a/lib/libc/locale/setrunelocale.c +++ b/lib/libc/locale/setrunelocale.c @@ -47,6 +47,7 @@ extern int _none_init __P((_RuneLocale *)); #ifdef XPG4 extern int _UTF2_init __P((_RuneLocale *)); extern int _EUC_init __P((_RuneLocale *)); +extern int _xpg4_setrunelocale __P((char *)); #endif extern _RuneLocale *_Read_RuneMagi __P((FILE *)); diff --git a/lib/libc/locale/tolower.c b/lib/libc/locale/tolower.c index f1d6fe0..e72a52c 100644 --- a/lib/libc/locale/tolower.c +++ b/lib/libc/locale/tolower.c @@ -41,18 +41,28 @@ _BSD_RUNE_T_ ___tolower(c) _BSD_RUNE_T_ c; { +#ifdef XPG4 int x; _RuneRange *rr = &_CurrentRuneLocale->maplower_ext; _RuneEntry *re = rr->ranges; +#endif if (c == EOF) return(EOF); + if (c < 0) { + if (c >= -128) /* signed char */ + return(_CurrentRuneLocale->maplower[(unsigned char)c]); + else + return(c); + } +#ifdef XPG4 for (x = 0; x < rr->nranges; ++x, ++re) { if (c < re->min) return(c); if (c <= re->max) return(re->map + c - re->min); } +#endif return(c); } diff --git a/lib/libc/locale/toupper.c b/lib/libc/locale/toupper.c index 1e5aa40..08be64b 100644 --- a/lib/libc/locale/toupper.c +++ b/lib/libc/locale/toupper.c @@ -41,18 +41,28 @@ _BSD_RUNE_T_ ___toupper(c) _BSD_RUNE_T_ c; { +#ifdef XPG4 int x; _RuneRange *rr = &_CurrentRuneLocale->mapupper_ext; _RuneEntry *re = rr->ranges; +#endif if (c == EOF) return(EOF); + if (c < 0) { + if (c >= -128) /* signed char */ + return(_CurrentRuneLocale->mapupper[(unsigned char)c]); + else + return(c); + } +#ifdef XPG4 for (x = 0; x < rr->nranges; ++x, ++re) { if (c < re->min) return(c); if (c <= re->max) return(re->map + c - re->min); } +#endif return(c); } |