summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/libc/locale/runetype.c11
-rw-r--r--lib/libc/locale/setrunelocale.c1
-rw-r--r--lib/libc/locale/tolower.c10
-rw-r--r--lib/libc/locale/toupper.c10
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);
}
OpenPOWER on IntegriCloud