Copyright (C) 2000-2012 |
GNU Info (libc.info)Defining the Output HandlerDefining the Output Handler --------------------------- Now let's look at how to define the handler and arginfo functions which are passed as arguments to `register_printf_function'. *Compatibility Note:* The interface changed in GNU libc version 2.0. Previously the third argument was of type `va_list *'. You should define your handler functions with a prototype like: int FUNCTION (FILE *stream, const struct printf_info *info, const void *const *args) The STREAM argument passed to the handler function is the stream to which it should write output. The INFO argument is a pointer to a structure that contains information about the various options that were included with the conversion in the template string. You should not modify this structure inside your handler function. Note: Conversion Specifier Options, for a description of this data structure. The ARGS is a vector of pointers to the arguments data. The number of arguments was determined by calling the argument information function provided by the user. Your handler function should return a value just like `printf' does: it should return the number of characters it has written, or a negative value to indicate an error. - Data Type: printf_function This is the data type that a handler function should have. If you are going to use `parse_printf_format' in your application, you must also define a function to pass as the ARGINFO-FUNCTION argument for each new conversion you install with `register_printf_function'. You have to define these functions with a prototype like: int FUNCTION (const struct printf_info *info, size_t n, int *argtypes) The return value from the function should be the number of arguments the conversion expects. The function should also fill in no more than N elements of the ARGTYPES array with information about the types of each of these arguments. This information is encoded using the various `PA_' macros. (You will notice that this is the same calling convention `parse_printf_format' itself uses.) - Data Type: printf_arginfo_function This type is used to describe functions that return information about the number and type of arguments used by a conversion specifier. |