langinfo.cpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. /*
  2. * Copyright (c) 2021, the SerenityOS developers.
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include <langinfo.h>
  7. // Values taken from glibc's en_US locale files.
  8. static const char* __nl_langinfo(nl_item item)
  9. {
  10. switch (item) {
  11. case CODESET:
  12. return "UTF-8";
  13. case D_T_FMT:
  14. return "%a %d %b %Y %r %Z";
  15. case D_FMT:
  16. return "%m/%d/%Y";
  17. case T_FMT:
  18. return "%r";
  19. case T_FMT_AMPM:
  20. return "%I:%M:%S %p";
  21. case AM_STR:
  22. return "AM";
  23. case PM_STR:
  24. return "PM";
  25. case DAY_1:
  26. return "Sunday";
  27. case DAY_2:
  28. return "Monday";
  29. case DAY_3:
  30. return "Tuesday";
  31. case DAY_4:
  32. return "Wednesday";
  33. case DAY_5:
  34. return "Thursday";
  35. case DAY_6:
  36. return "Friday";
  37. case DAY_7:
  38. return "Saturday";
  39. case ABDAY_1:
  40. return "Sun";
  41. case ABDAY_2:
  42. return "Mon";
  43. case ABDAY_3:
  44. return "Tue";
  45. case ABDAY_4:
  46. return "Wed";
  47. case ABDAY_5:
  48. return "Thu";
  49. case ABDAY_6:
  50. return "Fri";
  51. case ABDAY_7:
  52. return "Sat";
  53. case MON_1:
  54. return "January";
  55. case MON_2:
  56. return "February";
  57. case MON_3:
  58. return "March";
  59. case MON_4:
  60. return "April";
  61. case MON_5:
  62. return "May";
  63. case MON_6:
  64. return "June";
  65. case MON_7:
  66. return "July";
  67. case MON_8:
  68. return "August";
  69. case MON_9:
  70. return "September";
  71. case MON_10:
  72. return "October";
  73. case MON_11:
  74. return "November";
  75. case MON_12:
  76. return "December";
  77. case ABMON_1:
  78. return "Jan";
  79. case ABMON_2:
  80. return "Feb";
  81. case ABMON_3:
  82. return "Mar";
  83. case ABMON_4:
  84. return "Apr";
  85. case ABMON_5:
  86. return "May";
  87. case ABMON_6:
  88. return "Jun";
  89. case ABMON_7:
  90. return "Jul";
  91. case ABMON_8:
  92. return "Aug";
  93. case ABMON_9:
  94. return "Sep";
  95. case ABMON_10:
  96. return "Oct";
  97. case ABMON_11:
  98. return "Nov";
  99. case ABMON_12:
  100. return "Dec";
  101. case RADIXCHAR:
  102. return ".";
  103. case THOUSEP:
  104. return ",";
  105. case YESEXPR:
  106. return "^[+1yY]";
  107. case NOEXPR:
  108. return "^[-0nN]";
  109. // en_US does not have ERA.
  110. case ERA:
  111. case ERA_D_FMT:
  112. case ERA_D_T_FMT:
  113. case ERA_T_FMT:
  114. // en_US also doesn't have special digit symbols.
  115. case ALT_DIGITS:
  116. // Invalid values also return an empty string.
  117. default:
  118. return "";
  119. }
  120. }
  121. extern "C" {
  122. char* nl_langinfo(nl_item item)
  123. {
  124. // POSIX states that returned strings should not be modified,
  125. // so this cast is probably fine.
  126. return const_cast<char*>(__nl_langinfo(item));
  127. }
  128. }