locale: fix display of "grouping" and "mon_grouping" values
The "grouping" and "mon_grouping" values are arrays of one-byte integers, not arrays of ASCII characters. Display them in a format similar to GNU and MacOS. MFC after: 3 days Sponsored by: Dell EMC
This commit is contained in:
parent
6e8bf3b9a6
commit
4790abad81
@ -50,6 +50,7 @@
|
||||
#include "setlocale.h"
|
||||
|
||||
/* Local prototypes */
|
||||
char *format_grouping(const char *);
|
||||
void init_locales_list(void);
|
||||
void list_charmaps(void);
|
||||
void list_locales(void);
|
||||
@ -488,6 +489,34 @@ showlocale(void)
|
||||
printf("LC_ALL=%s\n", vval);
|
||||
}
|
||||
|
||||
char *
|
||||
format_grouping(const char *binary)
|
||||
{
|
||||
static char rval[64];
|
||||
const char *cp;
|
||||
size_t len;
|
||||
|
||||
rval[0] = '\0';
|
||||
for (cp = binary; *cp != '\0'; ++cp) {
|
||||
char group[sizeof("127;")];
|
||||
snprintf(group, sizeof(group), "%hhd;", *cp);
|
||||
len = strlcat(rval, group, sizeof(rval));
|
||||
if (len >= sizeof(rval)) {
|
||||
len = sizeof(rval) - 1;
|
||||
break;
|
||||
}
|
||||
if (*cp == CHAR_MAX) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Remove the trailing ';'. */
|
||||
rval[len - 1] = '\0';
|
||||
|
||||
return (rval);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* keyword value lookup helper (via localeconv())
|
||||
*/
|
||||
@ -501,7 +530,7 @@ kwval_lconv(int id)
|
||||
lc = localeconv();
|
||||
switch (id) {
|
||||
case KW_GROUPING:
|
||||
rval = lc->grouping;
|
||||
rval = format_grouping(lc->grouping);
|
||||
break;
|
||||
case KW_INT_CURR_SYMBOL:
|
||||
rval = lc->int_curr_symbol;
|
||||
@ -516,7 +545,7 @@ kwval_lconv(int id)
|
||||
rval = lc->mon_thousands_sep;
|
||||
break;
|
||||
case KW_MON_GROUPING:
|
||||
rval = lc->mon_grouping;
|
||||
rval = format_grouping(lc->mon_grouping);
|
||||
break;
|
||||
case KW_POSITIVE_SIGN:
|
||||
rval = lc->positive_sign;
|
||||
|
Loading…
Reference in New Issue
Block a user