提交 85a3ba3a 编写于 作者: R Rich Felker

fix localeconv values and implementation

dynamic-allocation of the structure is not valid; it can crash an
application if malloc fails. since localeconv is not specified to have
failure conditions, the object needs to have static storage duration.

need to review whether all the values are right or not still..
上级 ee96c50d
...@@ -2,21 +2,34 @@ ...@@ -2,21 +2,34 @@
#include <string.h> #include <string.h>
#include <stdlib.h> #include <stdlib.h>
static const struct lconv posix_lconv = {
.decimal_point = ".",
.thousands_sep = "",
.grouping = "",
.int_curr_symbol = "",
.currency_symbol = "",
.mon_decimal_point = "",
.mon_thousands_sep = "",
.mon_grouping = "",
.positive_sign = "",
.negative_sign = "",
.int_frac_digits = -1,
.frac_digits = -1,
.p_cs_precedes = -1,
.p_sep_by_space = -1,
.n_cs_precedes = -1,
.n_sep_by_space = -1,
.p_sign_posn = -1,
.n_sign_posn = -1,
.int_p_cs_precedes = -1,
.int_p_sep_by_space = -1,
.int_n_cs_precedes = -1,
.int_n_sep_by_space = -1,
.int_p_sign_posn = -1,
.int_n_sign_posn = -1,
};
struct lconv *localeconv(void) struct lconv *localeconv(void)
{ {
static struct lconv *posix_lconv; return (void *)&posix_lconv;
if (posix_lconv) return posix_lconv;
posix_lconv = malloc(sizeof *posix_lconv);
memset(posix_lconv, -1, sizeof *posix_lconv);
posix_lconv->decimal_point = ".";
posix_lconv->thousands_sep = "";
posix_lconv->grouping = "\xff";
posix_lconv->int_curr_symbol = ""; //"\xc2\xa4";
posix_lconv->currency_symbol = "";
posix_lconv->mon_decimal_point = "";
posix_lconv->mon_thousands_sep = "";
posix_lconv->mon_grouping = "\xff";
posix_lconv->positive_sign = ""; // "+";
posix_lconv->negative_sign = ""; // "-";
return posix_lconv;
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册