blob: 8e5b86e4388781044921e7e5e41e6fddfde0f784 [file] [log] [blame]
#include "libc.h"
#include "locale_impl.h"
#include <langinfo.h>
#include <locale.h>
static const char c_time[] = "Sun\0"
"Mon\0"
"Tue\0"
"Wed\0"
"Thu\0"
"Fri\0"
"Sat\0"
"Sunday\0"
"Monday\0"
"Tuesday\0"
"Wednesday\0"
"Thursday\0"
"Friday\0"
"Saturday\0"
"Jan\0"
"Feb\0"
"Mar\0"
"Apr\0"
"May\0"
"Jun\0"
"Jul\0"
"Aug\0"
"Sep\0"
"Oct\0"
"Nov\0"
"Dec\0"
"January\0"
"February\0"
"March\0"
"April\0"
"May\0"
"June\0"
"July\0"
"August\0"
"September\0"
"October\0"
"November\0"
"December\0"
"AM\0"
"PM\0"
"%a %b %e %T %Y\0"
"%m/%d/%y\0"
"%H:%M:%S\0"
"%I:%M:%S %p\0"
"\0"
"\0"
"%m/%d/%y\0"
"0123456789\0"
"%a %b %e %T %Y\0"
"%H:%M:%S";
static const char c_messages[] = "^[yY]\0"
"^[nN]\0"
"yes\0"
"no";
static const char c_numeric[] = ".\0"
"";
char* __nl_langinfo_l(nl_item item, locale_t loc) {
int cat = item >> 16;
int idx = item & 65535;
const char* str;
if (item == CODESET)
return (char*)(MB_CUR_MAX == 1 ? "ASCII" : "UTF-8");
switch (cat) {
case LC_NUMERIC:
if (idx > 1)
return (char*)"";
str = c_numeric;
break;
case LC_TIME:
if (idx > 0x31)
return (char*)"";
str = c_time;
break;
case LC_MONETARY:
if (idx > 0)
return (char*)"";
str = "";
break;
case LC_MESSAGES:
if (idx > 3)
return (char*)"";
str = c_messages;
break;
default:
return (char*)"";
}
for (; idx; idx--, str++)
for (; *str; str++)
;
if (cat != LC_NUMERIC && *str)
str = LCTRANS(str, cat, loc);
return (char*)str;
}
char* __nl_langinfo(nl_item item) {
return __nl_langinfo_l(item, CURRENT_LOCALE);
}
weak_alias(__nl_langinfo, nl_langinfo);
weak_alias(__nl_langinfo_l, nl_langinfo_l);