mirror of
https://github.com/opnsense/src.git
synced 2026-04-15 14:29:58 -04:00
strfmon: style fixes
(cherry picked from commit 56a0d5444d6f39302f3476b61c1b81ed39abe589)
This commit is contained in:
parent
ea99922484
commit
2f427cbb35
1 changed files with 99 additions and 98 deletions
|
|
@ -33,6 +33,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#include <ctype.h>
|
||||
#include <errno.h>
|
||||
#include <limits.h>
|
||||
|
|
@ -57,7 +58,7 @@
|
|||
|
||||
/* internal macros */
|
||||
#define PRINT(CH) do { \
|
||||
if (dst >= s + maxsize) \
|
||||
if (dst >= s + maxsize) \
|
||||
goto e2big_error; \
|
||||
*dst++ = CH; \
|
||||
} while (0)
|
||||
|
|
@ -68,9 +69,9 @@
|
|||
PRINT(*tmps++); \
|
||||
} while (0)
|
||||
|
||||
#define GET_NUMBER(VAR, LOC) do { \
|
||||
#define GET_NUMBER(VAR, LOC) do { \
|
||||
VAR = 0; \
|
||||
while (isdigit_l((unsigned char)*fmt, LOC)) { \
|
||||
while (isdigit_l((unsigned char)*fmt, LOC)) { \
|
||||
if (VAR > INT_MAX / 10) \
|
||||
goto e2big_error; \
|
||||
VAR *= 10; \
|
||||
|
|
@ -101,22 +102,22 @@ static char *__format_grouped_double(double, int *, int, int, int,
|
|||
struct lconv *, locale_t);
|
||||
|
||||
static ssize_t
|
||||
vstrfmon_l(char * __restrict s, size_t maxsize, locale_t loc,
|
||||
const char * __restrict format, va_list ap)
|
||||
vstrfmon_l(char *__restrict s, size_t maxsize, locale_t loc,
|
||||
const char *__restrict format, va_list ap)
|
||||
{
|
||||
char *dst; /* output destination pointer */
|
||||
const char *fmt; /* current format poistion pointer */
|
||||
struct lconv *lc; /* pointer to lconv structure */
|
||||
char *asciivalue; /* formatted double pointer */
|
||||
|
||||
int flags; /* formatting options */
|
||||
int pad_char; /* padding character */
|
||||
int pad_size; /* pad size */
|
||||
int width; /* field width */
|
||||
int left_prec; /* left precision */
|
||||
int right_prec; /* right precision */
|
||||
double value; /* just value */
|
||||
char space_char = ' '; /* space after currency */
|
||||
int flags; /* formatting options */
|
||||
int pad_char; /* padding character */
|
||||
int pad_size; /* pad size */
|
||||
int width; /* field width */
|
||||
int left_prec; /* left precision */
|
||||
int right_prec; /* right precision */
|
||||
double value; /* just value */
|
||||
char space_char = ' '; /* space after currency */
|
||||
|
||||
char cs_precedes, /* values gathered from struct lconv */
|
||||
sep_by_space,
|
||||
|
|
@ -126,6 +127,7 @@ vstrfmon_l(char * __restrict s, size_t maxsize, locale_t loc,
|
|||
|
||||
char *tmpptr; /* temporary vars */
|
||||
int sverrno;
|
||||
|
||||
FIX_LOCALE(loc);
|
||||
|
||||
lc = localeconv_l(loc);
|
||||
|
|
@ -134,7 +136,7 @@ vstrfmon_l(char * __restrict s, size_t maxsize, locale_t loc,
|
|||
asciivalue = NULL;
|
||||
currency_symbol = NULL;
|
||||
|
||||
while (*fmt) {
|
||||
while (*fmt != 0) {
|
||||
/* pass nonformating characters AS IS */
|
||||
if (*fmt != '%')
|
||||
goto literal;
|
||||
|
|
@ -144,13 +146,13 @@ vstrfmon_l(char * __restrict s, size_t maxsize, locale_t loc,
|
|||
/* "%%" mean just '%' */
|
||||
if (*(fmt + 1) == '%') {
|
||||
fmt++;
|
||||
literal:
|
||||
literal:
|
||||
PRINT(*fmt++);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* set up initial values */
|
||||
flags = (NEED_GROUPING|LOCALE_POSN);
|
||||
flags = NEED_GROUPING | LOCALE_POSN;
|
||||
pad_char = ' '; /* padding character is "space" */
|
||||
pad_size = 0; /* no padding initially */
|
||||
left_prec = -1; /* no left precision specified */
|
||||
|
|
@ -160,32 +162,32 @@ vstrfmon_l(char * __restrict s, size_t maxsize, locale_t loc,
|
|||
/* Flags */
|
||||
while (1) {
|
||||
switch (*++fmt) {
|
||||
case '=': /* fill character */
|
||||
pad_char = *++fmt;
|
||||
if (pad_char == '\0')
|
||||
goto format_error;
|
||||
continue;
|
||||
case '^': /* not group currency */
|
||||
flags &= ~(NEED_GROUPING);
|
||||
continue;
|
||||
case '+': /* use locale defined signs */
|
||||
if (flags & SIGN_POSN_USED)
|
||||
goto format_error;
|
||||
flags |= (SIGN_POSN_USED|LOCALE_POSN);
|
||||
continue;
|
||||
case '(': /* enclose negatives with () */
|
||||
if (flags & SIGN_POSN_USED)
|
||||
goto format_error;
|
||||
flags |= (SIGN_POSN_USED|PARENTH_POSN);
|
||||
continue;
|
||||
case '!': /* suppress currency symbol */
|
||||
flags |= SUPPRESS_CURR_SYMBOL;
|
||||
continue;
|
||||
case '-': /* alignment (left) */
|
||||
flags |= LEFT_JUSTIFY;
|
||||
continue;
|
||||
default:
|
||||
break;
|
||||
case '=': /* fill character */
|
||||
pad_char = *++fmt;
|
||||
if (pad_char == '\0')
|
||||
goto format_error;
|
||||
continue;
|
||||
case '^': /* not group currency */
|
||||
flags &= ~(NEED_GROUPING);
|
||||
continue;
|
||||
case '+': /* use locale defined signs */
|
||||
if (flags & SIGN_POSN_USED)
|
||||
goto format_error;
|
||||
flags |= (SIGN_POSN_USED | LOCALE_POSN);
|
||||
continue;
|
||||
case '(': /* enclose negatives with () */
|
||||
if (flags & SIGN_POSN_USED)
|
||||
goto format_error;
|
||||
flags |= (SIGN_POSN_USED | PARENTH_POSN);
|
||||
continue;
|
||||
case '!': /* suppress currency symbol */
|
||||
flags |= SUPPRESS_CURR_SYMBOL;
|
||||
continue;
|
||||
case '-': /* alignment (left) */
|
||||
flags |= LEFT_JUSTIFY;
|
||||
continue;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
@ -193,7 +195,8 @@ vstrfmon_l(char * __restrict s, size_t maxsize, locale_t loc,
|
|||
/* field Width */
|
||||
if (isdigit_l((unsigned char)*fmt, loc)) {
|
||||
GET_NUMBER(width, loc);
|
||||
/* Do we have enough space to put number with
|
||||
/*
|
||||
* Do we have enough space to put number with
|
||||
* required width ?
|
||||
*/
|
||||
if ((unsigned int)width >= maxsize - (dst - s))
|
||||
|
|
@ -214,22 +217,24 @@ vstrfmon_l(char * __restrict s, size_t maxsize, locale_t loc,
|
|||
if (!isdigit_l((unsigned char)*++fmt, loc))
|
||||
goto format_error;
|
||||
GET_NUMBER(right_prec, loc);
|
||||
if ((unsigned int)right_prec >= maxsize - (dst - s) -
|
||||
left_prec)
|
||||
if ((unsigned int)right_prec >=
|
||||
maxsize - (dst - s) - left_prec)
|
||||
goto e2big_error;
|
||||
}
|
||||
|
||||
/* Conversion Characters */
|
||||
switch (*fmt++) {
|
||||
case 'i': /* use international currency format */
|
||||
flags |= USE_INTL_CURRENCY;
|
||||
break;
|
||||
case 'n': /* use national currency format */
|
||||
flags &= ~(USE_INTL_CURRENCY);
|
||||
break;
|
||||
default: /* required character is missing or
|
||||
premature EOS */
|
||||
goto format_error;
|
||||
case 'i': /* use international currency format */
|
||||
flags |= USE_INTL_CURRENCY;
|
||||
break;
|
||||
case 'n': /* use national currency format */
|
||||
flags &= ~(USE_INTL_CURRENCY);
|
||||
break;
|
||||
default: /*
|
||||
* required character is missing or
|
||||
* premature EOS
|
||||
*/
|
||||
goto format_error;
|
||||
}
|
||||
|
||||
if (currency_symbol != NULL)
|
||||
|
|
@ -245,7 +250,7 @@ vstrfmon_l(char * __restrict s, size_t maxsize, locale_t loc,
|
|||
currency_symbol = strdup(lc->currency_symbol);
|
||||
|
||||
if (currency_symbol == NULL)
|
||||
goto end_error; /* ENOMEM. */
|
||||
goto end_error; /* ENOMEM. */
|
||||
|
||||
/* value itself */
|
||||
value = va_arg(ap, double);
|
||||
|
|
@ -267,15 +272,17 @@ vstrfmon_l(char * __restrict s, size_t maxsize, locale_t loc,
|
|||
|
||||
if (asciivalue != NULL)
|
||||
free(asciivalue);
|
||||
asciivalue = __format_grouped_double(value, &flags,
|
||||
left_prec, right_prec, pad_char, lc, loc);
|
||||
asciivalue = __format_grouped_double(value, &flags, left_prec,
|
||||
right_prec, pad_char, lc, loc);
|
||||
if (asciivalue == NULL)
|
||||
goto end_error; /* errno already set */
|
||||
/* to ENOMEM by malloc() */
|
||||
goto end_error; /*
|
||||
* errno already set to ENOMEM by
|
||||
* malloc()
|
||||
*/
|
||||
|
||||
/* set some variables for later use */
|
||||
__setup_vars(flags, &cs_precedes, &sep_by_space,
|
||||
&sign_posn, &signstr, lc);
|
||||
__setup_vars(flags, &cs_precedes, &sep_by_space, &sign_posn,
|
||||
&signstr, lc);
|
||||
|
||||
/*
|
||||
* Description of some LC_MONETARY's values:
|
||||
|
|
@ -306,7 +313,6 @@ vstrfmon_l(char * __restrict s, size_t maxsize, locale_t loc,
|
|||
* $currency_symbol
|
||||
* = 3 - the sign string precedes the $currency_symbol
|
||||
* = 4 - the sign string succeeds the $currency_symbol
|
||||
*
|
||||
*/
|
||||
|
||||
tmpptr = dst;
|
||||
|
|
@ -352,12 +358,10 @@ vstrfmon_l(char * __restrict s, size_t maxsize, locale_t loc,
|
|||
}
|
||||
|
||||
if (!(flags & SUPPRESS_CURR_SYMBOL)) {
|
||||
if ((sign_posn == 3 && sep_by_space == 2)
|
||||
|| (sep_by_space == 1
|
||||
&& (sign_posn == 0
|
||||
|| sign_posn == 1
|
||||
|| sign_posn == 2
|
||||
|| sign_posn == 4)))
|
||||
if ((sign_posn == 3 && sep_by_space == 2) ||
|
||||
(sep_by_space == 1 &&
|
||||
(sign_posn == 0 || sign_posn == 1 ||
|
||||
sign_posn == 2 || sign_posn == 4)))
|
||||
PRINT(space_char);
|
||||
PRINTS(currency_symbol);
|
||||
if (sign_posn == 4) {
|
||||
|
|
@ -398,7 +402,7 @@ vstrfmon_l(char * __restrict s, size_t maxsize, locale_t loc,
|
|||
PRINT('\0');
|
||||
free(asciivalue);
|
||||
free(currency_symbol);
|
||||
return (dst - s - 1); /* return size of put data except trailing '\0' */
|
||||
return (dst - s - 1); /* size of put data except trailing '\0' */
|
||||
|
||||
e2big_error:
|
||||
errno = E2BIG;
|
||||
|
|
@ -418,15 +422,15 @@ end_error:
|
|||
}
|
||||
|
||||
static void
|
||||
__setup_vars(int flags, char *cs_precedes, char *sep_by_space,
|
||||
char *sign_posn, char **signstr, struct lconv *lc)
|
||||
__setup_vars(int flags, char *cs_precedes, char *sep_by_space, char *sign_posn,
|
||||
char **signstr, struct lconv *lc)
|
||||
{
|
||||
if ((flags & IS_NEGATIVE) && (flags & USE_INTL_CURRENCY)) {
|
||||
*cs_precedes = lc->int_n_cs_precedes;
|
||||
*sep_by_space = lc->int_n_sep_by_space;
|
||||
*sign_posn = (flags & PARENTH_POSN) ? 0 : lc->int_n_sign_posn;
|
||||
*signstr = (lc->negative_sign[0] == '\0') ? "-"
|
||||
: lc->negative_sign;
|
||||
*signstr = (lc->negative_sign[0] == '\0') ? "-" :
|
||||
lc->negative_sign;
|
||||
} else if (flags & USE_INTL_CURRENCY) {
|
||||
*cs_precedes = lc->int_p_cs_precedes;
|
||||
*sep_by_space = lc->int_p_sep_by_space;
|
||||
|
|
@ -436,8 +440,8 @@ __setup_vars(int flags, char *cs_precedes, char *sep_by_space,
|
|||
*cs_precedes = lc->n_cs_precedes;
|
||||
*sep_by_space = lc->n_sep_by_space;
|
||||
*sign_posn = (flags & PARENTH_POSN) ? 0 : lc->n_sign_posn;
|
||||
*signstr = (lc->negative_sign[0] == '\0') ? "-"
|
||||
: lc->negative_sign;
|
||||
*signstr = (lc->negative_sign[0] == '\0') ? "-" :
|
||||
lc->negative_sign;
|
||||
} else {
|
||||
*cs_precedes = lc->p_cs_precedes;
|
||||
*sep_by_space = lc->p_sep_by_space;
|
||||
|
|
@ -460,8 +464,8 @@ __calc_left_pad(int flags, char *cur_symb, struct lconv *lc)
|
|||
char cs_precedes, sep_by_space, sign_posn, *signstr;
|
||||
int left_chars = 0;
|
||||
|
||||
__setup_vars(flags, &cs_precedes, &sep_by_space, &sign_posn,
|
||||
&signstr, lc);
|
||||
__setup_vars(flags, &cs_precedes, &sep_by_space, &sign_posn, &signstr,
|
||||
lc);
|
||||
|
||||
if (cs_precedes != 0) {
|
||||
left_chars += strlen(cur_symb);
|
||||
|
|
@ -470,17 +474,17 @@ __calc_left_pad(int flags, char *cur_symb, struct lconv *lc)
|
|||
}
|
||||
|
||||
switch (sign_posn) {
|
||||
case 0:
|
||||
if (flags & IS_NEGATIVE)
|
||||
left_chars++;
|
||||
break;
|
||||
case 1:
|
||||
case 0:
|
||||
if (flags & IS_NEGATIVE)
|
||||
left_chars++;
|
||||
break;
|
||||
case 1:
|
||||
left_chars += strlen(signstr);
|
||||
break;
|
||||
case 3:
|
||||
case 4:
|
||||
if (cs_precedes != 0)
|
||||
left_chars += strlen(signstr);
|
||||
break;
|
||||
case 3:
|
||||
case 4:
|
||||
if (cs_precedes != 0)
|
||||
left_chars += strlen(signstr);
|
||||
}
|
||||
return (left_chars);
|
||||
}
|
||||
|
|
@ -510,8 +514,8 @@ get_groups(int size, char *grouping)
|
|||
|
||||
/* convert double to locale-encoded string */
|
||||
static char *
|
||||
__format_grouped_double(double value, int *flags,
|
||||
int left_prec, int right_prec, int pad_char, struct lconv *lc, locale_t loc)
|
||||
__format_grouped_double(double value, int *flags, int left_prec, int right_prec,
|
||||
int pad_char, struct lconv *lc, locale_t loc)
|
||||
{
|
||||
|
||||
char *rslt;
|
||||
|
|
@ -529,7 +533,7 @@ __format_grouped_double(double value, int *flags,
|
|||
size_t decimal_point_size;
|
||||
size_t thousands_sep_size;
|
||||
|
||||
int groups = 0;
|
||||
int groups = 0;
|
||||
|
||||
grouping = lc->mon_grouping;
|
||||
decimal_point = lc->mon_decimal_point;
|
||||
|
|
@ -592,10 +596,8 @@ __format_grouped_double(double value, int *flags,
|
|||
avalue_size -= (right_prec + 1);
|
||||
}
|
||||
|
||||
if ((*flags & NEED_GROUPING) &&
|
||||
thousands_sep_size > 0 &&
|
||||
*grouping != CHAR_MAX &&
|
||||
*grouping > 0) {
|
||||
if ((*flags & NEED_GROUPING) && thousands_sep_size > 0 &&
|
||||
*grouping != CHAR_MAX && *grouping > 0) {
|
||||
while (avalue_size > (int)*grouping) {
|
||||
GRPCPY(*grouping);
|
||||
GRPSEP;
|
||||
|
|
@ -638,8 +640,7 @@ __format_grouped_double(double value, int *flags,
|
|||
}
|
||||
|
||||
ssize_t
|
||||
strfmon(char * __restrict s, size_t maxsize, const char * __restrict format,
|
||||
...)
|
||||
strfmon(char *__restrict s, size_t maxsize, const char *__restrict format, ...)
|
||||
{
|
||||
ssize_t ret;
|
||||
va_list ap;
|
||||
|
|
@ -652,8 +653,8 @@ strfmon(char * __restrict s, size_t maxsize, const char * __restrict format,
|
|||
}
|
||||
|
||||
ssize_t
|
||||
strfmon_l(char * __restrict s, size_t maxsize, locale_t loc,
|
||||
const char * __restrict format, ...)
|
||||
strfmon_l(char *__restrict s, size_t maxsize, locale_t loc,
|
||||
const char *__restrict format, ...)
|
||||
{
|
||||
ssize_t ret;
|
||||
va_list ap;
|
||||
|
|
|
|||
Loading…
Reference in a new issue