Serenity Operating System
at master 99 lines 2.2 kB view raw
1/* 2 * Copyright (c) 2021, the SerenityOS developers. 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#include <AK/DateConstants.h> 8#include <langinfo.h> 9 10// Values taken from glibc's en_US locale files. 11static char const* __nl_langinfo(nl_item item) 12{ 13 switch (item) { 14 case CODESET: 15 return "UTF-8"; 16 case D_T_FMT: 17 return "%a %d %b %Y %r %Z"; 18 case D_FMT: 19 return "%m/%d/%Y"; 20 case T_FMT: 21 return "%r"; 22 case T_FMT_AMPM: 23 return "%I:%M:%S %p"; 24 case AM_STR: 25 return "AM"; 26 case PM_STR: 27 return "PM"; 28 case DAY_1: 29 case DAY_2: 30 case DAY_3: 31 case DAY_4: 32 case DAY_5: 33 case DAY_6: 34 case DAY_7: 35 return long_day_names[item - DAY_1].characters_without_null_termination(); 36 case ABDAY_1: 37 case ABDAY_2: 38 case ABDAY_3: 39 case ABDAY_4: 40 case ABDAY_5: 41 case ABDAY_6: 42 case ABDAY_7: 43 return short_day_names[item - ABDAY_1].characters_without_null_termination(); 44 case MON_1: 45 case MON_2: 46 case MON_3: 47 case MON_4: 48 case MON_5: 49 case MON_6: 50 case MON_7: 51 case MON_8: 52 case MON_9: 53 case MON_10: 54 case MON_11: 55 case MON_12: 56 return long_month_names[item - MON_1].characters_without_null_termination(); 57 case ABMON_1: 58 case ABMON_2: 59 case ABMON_3: 60 case ABMON_4: 61 case ABMON_5: 62 case ABMON_6: 63 case ABMON_7: 64 case ABMON_8: 65 case ABMON_9: 66 case ABMON_10: 67 case ABMON_11: 68 case ABMON_12: 69 return short_month_names[item - ABMON_1].characters_without_null_termination(); 70 case RADIXCHAR: 71 return "."; 72 case THOUSEP: 73 return ","; 74 case YESEXPR: 75 return "^[+1yY]"; 76 case NOEXPR: 77 return "^[-0nN]"; 78 // en_US does not have ERA. 79 case ERA: 80 case ERA_D_FMT: 81 case ERA_D_T_FMT: 82 case ERA_T_FMT: 83 // en_US also doesn't have special digit symbols. 84 case ALT_DIGITS: 85 // Invalid values also return an empty string. 86 default: 87 return ""; 88 } 89} 90 91extern "C" { 92 93char* nl_langinfo(nl_item item) 94{ 95 // POSIX states that returned strings should not be modified, 96 // so this cast is probably fine. 97 return const_cast<char*>(__nl_langinfo(item)); 98} 99}