36 #define FLOAT_PRECISION 9 
   38 static char *long_to_string_with_divisor(
char *p,
 
   62   } 
while ((ll /= radix) != 0);
 
   64   i = (int)(p + MAX_FILLER - q);
 
   72 static char *ch_ltoa(
char *p, 
long num, 
unsigned radix) {
 
   74   return long_to_string_with_divisor(p, num, radix, 0);
 
   77 #if CHPRINTF_USE_FLOAT 
   78 static const long pow10[FLOAT_PRECISION] = {
 
   79     10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000
 
   82 static char *ftoa(
char *p, 
double num, 
unsigned long precision) {
 
   85   if ((precision == 0) || (precision > FLOAT_PRECISION)) {
 
   86     precision = FLOAT_PRECISION;
 
   88   precision = pow10[precision - 1];
 
   91   p = long_to_string_with_divisor(p, l, 10, 0);
 
   93   l = (long)((num - l) * precision);
 
   95   return long_to_string_with_divisor(p, l, 10, precision / 10);
 
  126   char *p, *s, c, filler;
 
  127   int i, precision, width;
 
  129   bool is_long, left_align, do_sign;
 
  131 #if CHPRINTF_USE_FLOAT 
  133   char tmpbuf[2*MAX_FILLER + 1];
 
  135   char tmpbuf[MAX_FILLER + 1];
 
  176       width = va_arg(ap, 
int);
 
  187         if (c >= 
'0' && c <= 
'9') {
 
  189           width = width * 10 + c;
 
  205         precision = va_arg(ap, 
int);
 
  209         while (c >= 
'0' && c <= 
'9') {
 
  211           precision = precision * 10 + c;
 
  221     if (c == 
'l' || c == 
'L') {
 
  229       is_long = (c >= 
'A') && (c <= 
'Z');
 
  236       *p++ = va_arg(ap, 
int);
 
  240       if ((s = va_arg(ap, 
char *)) == 0) {
 
  243       if (precision == 0) {
 
  246       for (p = s; *p && (--precision >= 0); p++)
 
  254         l = va_arg(ap, 
long);
 
  267       p = ch_ltoa(p, l, 10);
 
  269 #if CHPRINTF_USE_FLOAT 
  271       f = (float) va_arg(ap, 
double);
 
  281       p = ftoa(p, f, precision);
 
  289       goto unsigned_common;
 
  293       goto unsigned_common;
 
  299         l = va_arg(ap, 
unsigned long);
 
  302         l = va_arg(ap, 
unsigned int);
 
  304       p = ch_ltoa(p, l, c);
 
  311     if ((width -= i) < 0) {
 
  314     if (left_align == 
false) {
 
  318       if ((*s == 
'-' || *s == 
'+') && filler == 
'0') {
 
  326       } 
while (++width != 0);
 
  371   formatted_bytes = 
chvprintf(chp, fmt, ap);
 
  374   return formatted_bytes;
 
  404 int chsnprintf(
char *str, 
size_t size, 
const char *fmt, ...) {
 
  445 int chvsnprintf(
char *str, 
size_t size, 
const char *fmt, va_list ap) {
 
  452     size_wo_nul = size - 1;