Adds custom printf formats
[akaros.git] / user / parlib / include / printf-ext.h
1 /* Copyright (c) 2013 The Regents of the University of California
2  * Barret Rhoden <brho@cs.berkeley.edu>
3  * See LICENSE for details.
4  *
5  * Common printf format extensions.  For now, %r is installed by default
6  * (in early init code), and the others need to be requested.
7  *
8  * To register, for example %i for ipaddr, call:
9  *              register_printf_specifier('i', printf_ipaddr, printf_ipaddr_info);
10  */
11
12 #ifndef _PRINTF_EXT_H
13 #define _PRINTF_EXT_H
14
15 #include <ros/common.h>
16 #include <printf.h>
17
18 /* Commonly used as %i, will print out a 16-byte plan9 IP address */
19 int printf_ipaddr(FILE *stream, const struct printf_info *info,
20                   const void *const *args);
21 int printf_ipaddr_info(const struct printf_info* info, size_t n, int *argtypes,
22                        int *size);
23
24 /* Commonly used as %M, will print out a plan9 IPv6 mask, preferably as /xx */
25 int printf_ipmask(FILE *stream, const struct printf_info *info,
26                   const void *const *args);
27 int printf_ipmask_info(const struct printf_info* info, size_t n, int *argtypes,
28                        int *size);
29
30 /* Commonly used as %E, will print out an ethernet address */
31 int printf_ethaddr(FILE *stream, const struct printf_info *info,
32                    const void *const *args);
33 int printf_ethaddr_info(const struct printf_info* info, size_t n, int *argtypes,
34                         int *size);
35
36 /* Installed by default, will print the errstr for %r */
37 int printf_errstr(FILE *stream, const struct printf_info *info,
38                   const void *const *args);
39 int printf_errstr_info(const struct printf_info* info, size_t n, int *argtypes,
40                        int *size);
41
42 #endif /* _PRINTF_EXT_H */