16 #define MAX_DIGIT_LEN 14
34 static inline int hex_to_str(
unsigned d,
char *out)
36 const char *hex_table =
"0123456789abcdef";
43 tmp[ret++] = hex_table[(d % 16)];
47 tmp[ret++] = hex_table[(d % 16)];
57 static inline int unsigned_to_str(
unsigned d,
char *out)
65 tmp[ret++] = (d % 10) +
'0';
69 tmp[ret++] = (d % 10) +
'0';
79 static inline int signed_to_str(
int d,
char *out)
94 tmp[ret++] = (d % 10) +
'0';
98 tmp[ret++] = (d % 10) +
'0';
105 return (
int)(ptr - out);
108 static inline int fill_space(
struct info *
info,
char ch,
int len)
113 if (info->
type == BUFFER) {
123 static inline int fmt_write(
struct info *info,
const char *ch,
int len)
128 if (info->
type == BUFFER) {
140 static inline int fmt_parser(
struct info *info,
const char *format,
va_list ap)
159 for (fmt = format; *fmt; fmt++) {
164 buffer = (
char *)fmt;
169 fill_zero = (*fmt ==
'.');
183 len = len * 10 + (*fmt -
'0');
192 buffer = digit_buffer;
208 i = signed_to_str(
va_arg(ap,
int), buffer);
212 i = hex_to_str(
va_arg(ap,
int), buffer);
216 i = unsigned_to_str(
va_arg(ap,
unsigned), buffer);
222 i = hex_to_str(
va_arg(ap,
unsigned), buffer + 2);
226 buffer =
va_arg(ap,
char *);
227 i = buffer ?
strlen(buffer) : 0;
231 buffer[0] = (char)
va_arg(ap,
int);
239 pntsz += fill_space(info, (fill_zero ?
'0' :
' '), len - i);
250 buffer = (
char *)fmt;
254 pntsz += fmt_write(info, buffer, i);
273 ret =
vsnprintf(str, 0x7FFFFFFF, format, ap);
285 return fmt_parser(&info, format, ap);
297 return fmt_parser(&info, format, ap);