|  | /* Copyright (c) 2013 The Regents of the University of California | 
|  | * Barret Rhoden <brho@cs.berkeley.edu> | 
|  | * See LICENSE for details. | 
|  | * | 
|  | * Common printf format extensions.  For now, %r is installed by default | 
|  | * (in early init code), and the others need to be requested. | 
|  | * | 
|  | * To register, for example %i for ipaddr, call: | 
|  | * 		register_printf_specifier('i', printf_ipaddr, printf_ipaddr_info); | 
|  | */ | 
|  |  | 
|  | #pragma once | 
|  |  | 
|  | #include <parlib/common.h> | 
|  | #include <printf.h> | 
|  |  | 
|  | __BEGIN_DECLS | 
|  |  | 
|  | /* Commonly used as %i, will print out a 16-byte plan9 IP address */ | 
|  | int printf_ipaddr(FILE *stream, const struct printf_info *info, | 
|  | const void *const *args); | 
|  | int printf_ipaddr_info(const struct printf_info* info, size_t n, int *argtypes, | 
|  | int *size); | 
|  |  | 
|  | /* Commonly used as %M, will print out a plan9 IPv6 mask, preferably as /xx */ | 
|  | int printf_ipmask(FILE *stream, const struct printf_info *info, | 
|  | const void *const *args); | 
|  | int printf_ipmask_info(const struct printf_info* info, size_t n, int *argtypes, | 
|  | int *size); | 
|  |  | 
|  | /* Commonly used as %E, will print out an ethernet address */ | 
|  | int printf_ethaddr(FILE *stream, const struct printf_info *info, | 
|  | const void *const *args); | 
|  | int printf_ethaddr_info(const struct printf_info* info, size_t n, int *argtypes, | 
|  | int *size); | 
|  |  | 
|  | /* Installed by default, will print the errstr for %r */ | 
|  | int printf_errstr(FILE *stream, const struct printf_info *info, | 
|  | const void *const *args); | 
|  | int printf_errstr_info(const struct printf_info* info, size_t n, int *argtypes, | 
|  | int *size); | 
|  |  | 
|  | __END_DECLS |