From 0bfe5e27ef9c3c3c6ef22aef397ada73677de962 Mon Sep 17 00:00:00 2001 From: apio Date: Wed, 9 Nov 2022 11:38:14 +0100 Subject: [PATCH] libc: Add localeconv() Always returns the default C locale values. --- libs/libc/include/locale.h | 31 ++++++++++++++++++++++++++++++- libs/libc/src/locale.cpp | 13 +++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/libs/libc/include/locale.h b/libs/libc/include/locale.h index d43fc8e7..c2182e6a 100644 --- a/libs/libc/include/locale.h +++ b/libs/libc/include/locale.h @@ -5,13 +5,42 @@ #define LC_CTYPE 1 #define LC_COLLATE 2 #define LC_NUMERIC 3 +#define LC_MONETARY 4 +#define LC_TIME 5 + +/* Structure representing numeric formatting information for the current locale. */ +struct lconv +{ + char* decimal_point; + char* thousands_sep; + char* grouping; + char* int_curr_symbol; + char* currency_symbol; + char* mon_decimal_point; + char* mon_thousands_sep; + char* mon_grouping; + char* positive_sign; + char* negative_sign; + char int_frac_digits; + char frac_digits; + char p_cs_precedes; + char p_sep_by_space; + char n_cs_precedes; + char n_sep_by_space; + char p_sign_posn; + char n_sign_posn; +}; #ifdef __cplusplus extern "C" { #endif - char* setlocale(int category, const char* locale); // Not implemented. + /* Set or query the current locale. */ + char* setlocale(int category, const char* locale); + + /* Retrieve numeric formatting information for the current locale. */ + struct lconv* localeconv(void); #ifdef __cplusplus } diff --git a/libs/libc/src/locale.cpp b/libs/libc/src/locale.cpp index bf6167c0..656cfa3b 100644 --- a/libs/libc/src/locale.cpp +++ b/libs/libc/src/locale.cpp @@ -1,12 +1,25 @@ +#include #include #include static char default_locale[] = "C"; +static char dot[] = "."; +static char empty[] = ""; + +static struct lconv default_lconv = {dot, empty, empty, empty, empty, empty, + empty, empty, empty, empty, CHAR_MAX, CHAR_MAX, + CHAR_MAX, CHAR_MAX, CHAR_MAX, CHAR_MAX, CHAR_MAX, CHAR_MAX}; + extern "C" { char* setlocale(int, const char*) { return default_locale; } + + struct lconv* localeconv(void) + { + return &default_lconv; + } } \ No newline at end of file