6 #include "locale_impl.h"
8 static ssize_t
vstrfmon_l(char *s
, size_t n
, locale_t loc
, const char *fmt
, va_list ap
)
12 int fill
, nogrp
, negpar
, nosym
, left
, intl
;
23 if (*fmt
== '%') goto literal
;
52 for (fw
=0; isdigit(*fmt
); fmt
++)
53 fw
= 10*fw
+ (*fmt
-'0');
56 if (*fmt
=='#') for (lp
=0, fmt
++; isdigit(*fmt
); fmt
++)
57 lp
= 10*lp
+ (*fmt
-'0');
58 if (*fmt
=='.') for (rp
=0, fmt
++; isdigit(*fmt
); fmt
++)
59 rp
= 10*rp
+ (*fmt
-'0');
64 if (!left
&& fw
>w
) w
= fw
;
66 x
= va_arg(ap
, double);
67 l
= snprintf(s
, n
, "%*.*f", w
, rp
, x
);
78 ssize_t
strfmon_l(char *restrict s
, size_t n
, locale_t loc
, const char *restrict fmt
, ...)
84 ret
= vstrfmon_l(s
, n
, loc
, fmt
, ap
);
91 ssize_t
strfmon(char *restrict s
, size_t n
, const char *restrict fmt
, ...)
97 ret
= vstrfmon_l(s
, n
, CURRENT_LOCALE
, fmt
, ap
);