Go to the previous, next section.
If you define a meaning for `%q', what if the template contains `%+23q' or `%-#q'? To implement a sensible meaning for these, the handler when called needs to be able to get the options specified in the template.
Both the handler_function and arginfo_function arguments
to register_printf_function
accept an argument of type
struct printf_info
, which contains information about the options
appearing in an instance of the conversion specifier. This data type
is declared in the header file `printf.h'.
This structure is used to pass information about the options appearing
in an instance of a conversion specifier in a printf
template
string to the handler and arginfo functions for that specifier. It
contains the following members:
int prec
-1
if no precision
was specified. If the precision was given as `*', the
printf_info
structure passed to the handler function contains the
actual value retrieved from the argument list. But the structure passed
to the arginfo function contains a value of INT_MIN
, since the
actual value is not known.
int width
0
if no
width was specified. If the field width was given as `*', the
printf_info
structure passed to the handler function contains the
actual value retrieved from the argument list. But the structure passed
to the arginfo function contains a value of INT_MIN
, since the
actual value is not known.
char spec
unsigned int is_long_double
unsigned int is_short
unsigned int is_long
unsigned int alt
unsigned int space
unsigned int left
unsigned int showsign
char pad
'0'
if the `0' flag was specified, and
' '
otherwise.
Go to the previous, next section.