summaryrefslogtreecommitdiff
path: root/libc/misc/locale/locale.c
diff options
context:
space:
mode:
Diffstat (limited to 'libc/misc/locale/locale.c')
-rw-r--r--libc/misc/locale/locale.c119
1 files changed, 63 insertions, 56 deletions
diff --git a/libc/misc/locale/locale.c b/libc/misc/locale/locale.c
index 1a20300db..28ebb3fb2 100644
--- a/libc/misc/locale/locale.c
+++ b/libc/misc/locale/locale.c
@@ -46,15 +46,10 @@
* locale support had (8-bit codesets only).
*/
-#define stpcpy __stpcpy
-#define strtok_r __strtok_r
-/* #define fflush __fflush */
-
#define _GNU_SOURCE
#define __CTYPE_HAS_8_BIT_LOCALES 1
-
#include <string.h>
#include <stdlib.h>
#include <stddef.h>
@@ -65,6 +60,18 @@
#include <ctype.h>
#include <stdio.h>
+libc_hidden_proto(memcpy)
+libc_hidden_proto(memset)
+libc_hidden_proto(stpcpy)
+libc_hidden_proto(strtok_r)
+libc_hidden_proto(strlen)
+libc_hidden_proto(strcmp)
+libc_hidden_proto(strcpy)
+libc_hidden_proto(strncmp)
+libc_hidden_proto(strchr)
+libc_hidden_proto(getenv)
+/*libc_hidden_proto(fflush)*/
+
#ifdef __UCLIBC_MJN3_ONLY__
#ifdef L_setlocale
#warning TODO: Make the link_warning()s a config option?
@@ -157,7 +164,7 @@ char *setlocale(int category, register const char *locale)
&& ( (!locale) /* Request for locale category string. */
|| (!*locale) /* Implementation-defined default is C. */
|| ((*locale == 'C') && !locale[1])
- || (!__strcmp(locale, "POSIX"))) )
+ || (!strcmp(locale, "POSIX"))) )
? (char *) C_string /* Always in C/POSIX locale. */
: NULL;
}
@@ -186,6 +193,8 @@ static const char utf8[] = "UTF-8";
*/
static char hr_locale[(MAX_LOCALE_CATEGORY_STR * LC_ALL) + MAX_LOCALE_STR];
+libc_hidden_proto(newlocale)
+
static void update_hr_locale(const unsigned char *spec)
{
const unsigned char *loc;
@@ -228,7 +237,7 @@ static void update_hr_locale(const unsigned char *spec)
*n = 0;
} else {
char at = 0;
- __memcpy(n, LOCALE_NAMES + 5*((*loc)-1), 5);
+ memcpy(n, LOCALE_NAMES + 5*((*loc)-1), 5);
if (n[2] != '_') {
at = n[2];
n[2] = '_';
@@ -263,9 +272,6 @@ static void update_hr_locale(const unsigned char *spec)
} while (!done);
}
-extern __locale_t __newlocale (int __category_mask, __const char *__locale,
- __locale_t __base) __THROW attribute_hidden;
-
char *setlocale(int category, const char *locale)
{
if (((unsigned int)(category)) > LC_ALL) {
@@ -276,7 +282,7 @@ char *setlocale(int category, const char *locale)
}
if (locale != NULL) { /* Not just a query... */
- if (!__newlocale((1 << category), locale, __global_locale)) {
+ if (!newlocale((1 << category), locale, __global_locale)) {
return NULL; /* Failed! */
}
update_hr_locale(__global_locale->cur_locale);
@@ -460,7 +466,7 @@ static int init_cur_collate(int der_num, __collate_t *cur_collate)
+ cdd->base_idx * sizeof(coldata_base_t)
)/2 );
- __memcpy(cur_collate, cdb, offsetof(coldata_base_t,index2weight_offset));
+ memcpy(cur_collate, cdb, offsetof(coldata_base_t,index2weight_offset));
cur_collate->undefined_idx = cdd->undefined_idx;
cur_collate->ti_mask = (1 << cur_collate->ti_shift)-1;
@@ -512,9 +518,9 @@ static int init_cur_collate(int der_num, __collate_t *cur_collate)
cur_collate->index2ruleidx = cur_collate->index2weight
+ cur_collate->max_col_index + 1;
- __memcpy(cur_collate->index2weight, cur_collate->index2weight_tbl,
+ memcpy(cur_collate->index2weight, cur_collate->index2weight_tbl,
cur_collate->num_col_base * sizeof(uint16_t));
- __memcpy(cur_collate->index2ruleidx, cur_collate->index2ruleidx_tbl,
+ memcpy(cur_collate->index2ruleidx, cur_collate->index2ruleidx_tbl,
cur_collate->num_col_base * sizeof(uint16_t));
/* now do the overrides */
@@ -599,7 +605,7 @@ int attribute_hidden _locale_set_l(const unsigned char *p, __locale_t base)
return 0; /* calloc failed. */
}
free(base->collate.index2weight);
- __memcpy(&base->collate, &newcol, sizeof(__collate_t));
+ memcpy(&base->collate, &newcol, sizeof(__collate_t));
}
do {
@@ -669,15 +675,15 @@ int attribute_hidden _locale_set_l(const unsigned char *p, __locale_t base)
* All of this will be replaced in the next generation
* of locale support anyway... */
- __memcpy(base->__ctype_b_data,
+ memcpy(base->__ctype_b_data,
__C_ctype_b - __UCLIBC_CTYPE_B_TBL_OFFSET,
(256 + __UCLIBC_CTYPE_B_TBL_OFFSET)
* sizeof(__ctype_mask_t));
- __memcpy(base->__ctype_tolower_data,
+ memcpy(base->__ctype_tolower_data,
__C_ctype_tolower - __UCLIBC_CTYPE_TO_TBL_OFFSET,
(256 + __UCLIBC_CTYPE_TO_TBL_OFFSET)
* sizeof(__ctype_touplow_t));
- __memcpy(base->__ctype_toupper_data,
+ memcpy(base->__ctype_toupper_data,
__C_ctype_toupper - __UCLIBC_CTYPE_TO_TBL_OFFSET,
(256 + __UCLIBC_CTYPE_TO_TBL_OFFSET)
* sizeof(__ctype_touplow_t));
@@ -787,7 +793,7 @@ int attribute_hidden _locale_set_l(const unsigned char *p, __locale_t base)
d = base->outdigit_length;
x = &base->outdigit0_mb;
for (c = 0 ; c < 10 ; c++) {
- ((unsigned char *)d)[c] = __strlen(x[c]);
+ ((unsigned char *)d)[c] = strlen(x[c]);
assert(d[c] > 0);
}
} else if (i == LC_NUMERIC) {
@@ -852,10 +858,10 @@ static const uint16_t __code2flag[16] = {
void attribute_hidden _locale_init_l(__locale_t base)
{
- __memset(base->cur_locale, 0, LOCALE_SELECTOR_SIZE);
+ memset(base->cur_locale, 0, LOCALE_SELECTOR_SIZE);
base->cur_locale[0] = '#';
- __memcpy(base->category_item_count,
+ memcpy(base->category_item_count,
__locale_mmap->lc_common_item_offsets_LEN,
LC_ALL);
@@ -1006,7 +1012,7 @@ static const unsigned char nl_data[C_LC_ALL + 1 + 90 + 320] = {
']', '\x00', '^', '[', 'n', 'N', ']', '\x00',
};
-char attribute_hidden *__nl_langinfo(nl_item item)
+char *nl_langinfo(nl_item item)
{
unsigned int c;
unsigned int i;
@@ -1019,25 +1025,27 @@ char attribute_hidden *__nl_langinfo(nl_item item)
}
return (char *) cat_start; /* Conveniently, this is the empty string. */
}
-strong_alias(__nl_langinfo,nl_langinfo)
+libc_hidden_proto(nl_langinfo)
+libc_hidden_def(nl_langinfo)
#else /* __LOCALE_C_ONLY */
#if defined(__UCLIBC_HAS_XLOCALE__) && !defined(__UCLIBC_DO_XLOCALE)
-extern char *__nl_langinfo_l (nl_item __item, __locale_t l) attribute_hidden;
+libc_hidden_proto(nl_langinfo_l)
-char attribute_hidden *__nl_langinfo(nl_item item)
+char *nl_langinfo(nl_item item)
{
- return __nl_langinfo_l(item, __UCLIBC_CURLOCALE);
+ return nl_langinfo_l(item, __UCLIBC_CURLOCALE);
}
-strong_alias(__nl_langinfo,nl_langinfo)
+libc_hidden_proto(nl_langinfo)
+libc_hidden_def(nl_langinfo)
#else /* defined(__UCLIBC_HAS_XLOCALE__) && !defined(__UCLIBC_DO_XLOCALE) */
static const char empty[] = "";
-char attribute_hidden *__UCXL(nl_langinfo)(nl_item item __LOCALE_PARAM )
+char *__XL_NPP(nl_langinfo)(nl_item item __LOCALE_PARAM )
{
unsigned int c = _NL_ITEM_CATEGORY(item);
unsigned int i = _NL_ITEM_INDEX(item);
@@ -1049,7 +1057,8 @@ char attribute_hidden *__UCXL(nl_langinfo)(nl_item item __LOCALE_PARAM )
return (char *) empty;
}
-__UCXL_ALIAS(nl_langinfo)
+libc_hidden_proto(__XL_NPP(nl_langinfo))
+libc_hidden_def(__XL_NPP(nl_langinfo))
#endif /* defined(__UCLIBC_HAS_XLOCALE__) && !defined(__UCLIBC_DO_XLOCALE) */
@@ -1082,14 +1091,14 @@ static int find_locale(int category_mask, const char *p,
char buf[18]; /* TODO: 7+{max codeset name length} */
const char *q;
- if ((q = __strchr(p,'@')) != NULL) {
+ if ((q = strchr(p,'@')) != NULL) {
if ((((size_t)((q-p)-5)) > (sizeof(buf) - 5)) || (p[2] != '_')) {
return 0;
}
/* locale name at least 5 chars long and 3rd char is '_' */
s = LOCALE_AT_MODIFIERS;
do {
- if (!__strcmp(s+2, q+1)) {
+ if (!strcmp(s+2, q+1)) {
break;
}
s += 2 + *s; /* TODO - fix this throughout */
@@ -1098,7 +1107,7 @@ static int find_locale(int category_mask, const char *p,
return 0;
}
assert(q - p < sizeof(buf));
- __memcpy(buf, p, q-p);
+ memcpy(buf, p, q-p);
buf[q-p] = 0;
buf[2] = s[1];
p = buf;
@@ -1106,19 +1115,19 @@ static int find_locale(int category_mask, const char *p,
#endif
lang_cult = codeset = 0; /* Assume C and default codeset. */
- if (((*p == 'C') && !p[1]) || !__strcmp(p, posix)) {
+ if (((*p == 'C') && !p[1]) || !strcmp(p, posix)) {
goto FIND_LOCALE;
}
- if ((__strlen(p) > 5) && (p[5] == '.')) { /* Codeset in locale name? */
+ if ((strlen(p) > 5) && (p[5] == '.')) { /* Codeset in locale name? */
/* TODO: maybe CODESET_LIST + *s ??? */
/* 7bit is 1, UTF-8 is 2, 8-bit is >= 3 */
codeset = 2;
- if (__strcmp(utf8,p+6) != 0) {/* TODO - fix! */
+ if (strcmp(utf8,p+6) != 0) {/* TODO - fix! */
s = CODESET_LIST;
do {
++codeset; /* Increment codeset first. */
- if (!__strcmp(CODESET_LIST+*s, p+6)) {
+ if (!strcmp(CODESET_LIST+*s, p+6)) {
goto FIND_LANG_CULT;
}
} while (*++s);
@@ -1131,7 +1140,7 @@ static int find_locale(int category_mask, const char *p,
do { /* TODO -- do a binary search? */
/* TODO -- fix gen_mmap!*/
++lang_cult; /* Increment first since C/POSIX is 0. */
- if (!__strncmp(s,p,5)) { /* Found a matching locale name; */
+ if (!strncmp(s,p,5)) { /* Found a matching locale name; */
goto FIND_LOCALE;
}
s += 5;
@@ -1173,14 +1182,14 @@ static unsigned char *composite_locale(int category_mask, const char *locale,
int c;
int component_mask;
- if (!__strchr(locale,'=')) {
+ if (!strchr(locale,'=')) {
if (!find_locale(category_mask, locale, new_locale)) {
return NULL;
}
return new_locale;
}
- if (__strlen(locale) >= sizeof(buf)) {
+ if (strlen(locale) >= sizeof(buf)) {
return NULL;
}
stpcpy(buf, locale);
@@ -1189,7 +1198,7 @@ static unsigned char *composite_locale(int category_mask, const char *locale,
t = strtok_r(buf, "=", &e); /* This can't fail because of strchr test above. */
do {
c = 0;
- while (__strcmp(CATEGORY_NAMES + (int) CATEGORY_NAMES[c], t)) {
+ while (strcmp(CATEGORY_NAMES + (int) CATEGORY_NAMES[c], t)) {
if (++c == LC_ALL) { /* Unknown category name! */
return NULL;
}
@@ -1212,7 +1221,7 @@ static unsigned char *composite_locale(int category_mask, const char *locale,
return new_locale;
}
-__locale_t attribute_hidden __newlocale(int category_mask, const char *locale, __locale_t base)
+__locale_t newlocale(int category_mask, const char *locale, __locale_t base)
{
const unsigned char *p;
int i, j, k;
@@ -1231,7 +1240,7 @@ __locale_t attribute_hidden __newlocale(int category_mask, const char *locale, _
#ifdef __UCLIBC_MJN3_ONLY__
#warning TODO: Rename cur_locale to locale_selector.
#endif
- __strcpy((char *) new_selector,
+ strcpy((char *) new_selector,
(base ? (char *) base->cur_locale : C_LOCALE_SELECTOR));
if (!*locale) { /* locale == "", so check environment. */
@@ -1251,7 +1260,7 @@ __locale_t attribute_hidden __newlocale(int category_mask, const char *locale, _
j = 0;
do {
p = envstr[j];
- } while ((++j < 4) && (!(p = __getenv(p)) || !*p));
+ } while ((++j < 4) && (!(p = getenv(p)) || !*p));
/* The user set something... is it valid? */
@@ -1296,8 +1305,8 @@ __locale_t attribute_hidden __newlocale(int category_mask, const char *locale, _
return base;
}
-
-weak_alias(__newlocale, newlocale)
+libc_hidden_proto(newlocale)
+libc_hidden_def(newlocale)
#endif
/**********************************************************************/
@@ -1307,7 +1316,7 @@ weak_alias(__newlocale, newlocale)
#warning REMINDER: When we allocate ctype tables, remember to dup them.
#endif
-__locale_t attribute_hidden __duplocale(__locale_t dataset)
+__locale_t duplocale(__locale_t dataset)
{
__locale_t r;
uint16_t * i2w;
@@ -1320,9 +1329,9 @@ __locale_t attribute_hidden __duplocale(__locale_t dataset)
if ((i2w = calloc(n, sizeof(uint16_t)))
!= NULL
) {
- __memcpy(r, dataset, sizeof(__uclibc_locale_t));
+ memcpy(r, dataset, sizeof(__uclibc_locale_t));
r->collate.index2weight = i2w;
- __memcpy(i2w, dataset->collate.index2weight, n * sizeof(uint16_t));
+ memcpy(i2w, dataset->collate.index2weight, n * sizeof(uint16_t));
} else {
free(r);
r = NULL;
@@ -1330,8 +1339,8 @@ __locale_t attribute_hidden __duplocale(__locale_t dataset)
}
return r;
}
-
-weak_alias(__duplocale, duplocale)
+libc_hidden_proto(duplocale)
+libc_hidden_def(duplocale)
#endif
/**********************************************************************/
@@ -1341,7 +1350,7 @@ weak_alias(__duplocale, duplocale)
#warning REMINDER: When we allocate ctype tables, remember to free them.
#endif
-void __freelocale(__locale_t dataset)
+void freelocale(__locale_t dataset)
{
assert(dataset != __global_locale);
assert(dataset != LC_GLOBAL_LOCALE);
@@ -1350,13 +1359,11 @@ void __freelocale(__locale_t dataset)
free(dataset); /* Free locale */
}
-weak_alias(__freelocale, freelocale)
-
#endif
/**********************************************************************/
#ifdef L_uselocale
-__locale_t attribute_hidden __uselocale(__locale_t dataset)
+__locale_t uselocale(__locale_t dataset)
{
__locale_t old;
@@ -1379,8 +1386,8 @@ __locale_t attribute_hidden __uselocale(__locale_t dataset)
}
return old;
}
-
-weak_alias(__uselocale, uselocale)
+libc_hidden_proto(uselocale)
+libc_hidden_def(uselocale)
#endif
/**********************************************************************/