63 const char *p = format;
66 int total_width = strlen (format) + 1;
69 memcpy (&ap, args,
sizeof (va_list));
75 while (strchr (
"-+ #0", *p))
80 total_width += abs (va_arg (ap,
int));
83 total_width += strtoul (p, (
char **) &p, 10);
90 total_width += abs (va_arg (ap,
int));
93 total_width += strtoul (p, (
char **) &p, 10);
95 while (strchr (
"hlLjtz", *p))
109 (void) va_arg (ap,
int);
113 double arg = va_arg (ap,
double);
114 if (arg >= 1.0 || arg <= -1.0)
124 (void) va_arg (ap,
double);
127 total_width += strlen (va_arg (ap,
char *));
131 (void) va_arg (ap,
char *);
138 global_total_width = total_width;
140 *
result = malloc (total_width);
142 return vsprintf (*
result, format, *args);