mirror of https://github.com/flysand7/ciabatta.git
Cleaned up code in locale for safety
This commit is contained in:
parent
55d39d289d
commit
843f13b504
|
@ -7,55 +7,63 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
#define _LC_FIRST 0
|
#define _LC_FIRST 0
|
||||||
#define _LC_LAST 5
|
#define _LC_LAST 5
|
||||||
|
|
||||||
static struct lconv _locale;
|
static struct lconv _locale;
|
||||||
static const char *_locale_str;
|
static char _locale_str[16];
|
||||||
|
|
||||||
char *setlocale(int category, const char *locale)
|
// Even if the user doesn't enable LIB_EXT1 we still have it existing
|
||||||
{
|
size_t strnlen_s(const char *s, size_t maxsize);
|
||||||
assert(_LC_FIRST <= category && category <= _LC_LAST);
|
|
||||||
|
|
||||||
if(locale == NULL) {
|
char *setlocale(int category, const char *locale) {
|
||||||
return _locale_str;
|
if (_LC_FIRST <= category && category <= _LC_LAST) return NULL;
|
||||||
}
|
if (locale == NULL) return _locale_str;
|
||||||
if(strcmp(locale, "C") == 0) {
|
|
||||||
if(category == LC_ALL) {
|
// Validate the string a bit
|
||||||
_locale.decimal_point = ".";
|
size_t locale_len = strnlen_s(locale, sizeof(_locale_str));
|
||||||
_locale.thousands_sep = "";
|
if (locale_len == 0 || locale_len >= sizeof(_locale_str)) return NULL;
|
||||||
_locale.grouping = "";
|
|
||||||
_locale.mon_decimal_point = "";
|
if(strcmp(locale, "C") == 0) {
|
||||||
_locale.mon_thousands_sep = "";
|
switch (category) {
|
||||||
_locale.mon_grouping = "";
|
case LC_ALL: {
|
||||||
_locale.positive_sign = "";
|
_locale.decimal_point = ".";
|
||||||
_locale.negative_sign = "";
|
_locale.thousands_sep = "";
|
||||||
_locale.currency_symbol = "";
|
_locale.grouping = "";
|
||||||
_locale.frac_digits = CHAR_MAX;
|
_locale.mon_decimal_point = "";
|
||||||
_locale.p_cs_precedes = CHAR_MAX;
|
_locale.mon_thousands_sep = "";
|
||||||
_locale.n_cs_precedes = CHAR_MAX;
|
_locale.mon_grouping = "";
|
||||||
_locale.p_sep_by_space = CHAR_MAX;
|
_locale.positive_sign = "";
|
||||||
_locale.n_sep_by_space = CHAR_MAX;
|
_locale.negative_sign = "";
|
||||||
_locale.p_sign_posn = CHAR_MAX;
|
_locale.currency_symbol = "";
|
||||||
_locale.n_sign_posn = CHAR_MAX;
|
_locale.frac_digits = CHAR_MAX;
|
||||||
_locale.int_curr_symbol = "";
|
_locale.p_cs_precedes = CHAR_MAX;
|
||||||
_locale.int_frac_digits = CHAR_MAX;
|
_locale.n_cs_precedes = CHAR_MAX;
|
||||||
_locale.int_p_cs_precedes = CHAR_MAX;
|
_locale.p_sep_by_space = CHAR_MAX;
|
||||||
_locale.int_n_cs_precedes = CHAR_MAX;
|
_locale.n_sep_by_space = CHAR_MAX;
|
||||||
_locale.int_p_sep_by_space = CHAR_MAX;
|
_locale.p_sign_posn = CHAR_MAX;
|
||||||
_locale.int_n_sep_by_space = CHAR_MAX;
|
_locale.n_sign_posn = CHAR_MAX;
|
||||||
_locale.int_p_sign_posn = CHAR_MAX;
|
_locale.int_curr_symbol = "";
|
||||||
_locale.int_n_sign_posn = CHAR_MAX;
|
_locale.int_frac_digits = CHAR_MAX;
|
||||||
}
|
_locale.int_p_cs_precedes = CHAR_MAX;
|
||||||
}
|
_locale.int_n_cs_precedes = CHAR_MAX;
|
||||||
else {
|
_locale.int_p_sep_by_space = CHAR_MAX;
|
||||||
return NULL;
|
_locale.int_n_sep_by_space = CHAR_MAX;
|
||||||
}
|
_locale.int_p_sign_posn = CHAR_MAX;
|
||||||
_locale_str = locale;
|
_locale.int_n_sign_posn = CHAR_MAX;
|
||||||
return locale;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default: return NULL;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(_locale_str, locale, locale_len);
|
||||||
|
return _locale_str;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct lconv *localeconv(void)
|
struct lconv *localeconv(void) {
|
||||||
{
|
return &_locale;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue