Annotation of embedaddon/strongswan/src/libstrongswan/utils/printf_hook/printf_hook.h, revision 1.1
1.1 ! misho 1: /*
! 2: * Copyright (C) 2009 Tobias Brunner
! 3: * Copyright (C) 2006-2008 Martin Willi
! 4: * HSR Hochschule fuer Technik Rapperswil
! 5: *
! 6: * This program is free software; you can redistribute it and/or modify it
! 7: * under the terms of the GNU General Public License as published by the
! 8: * Free Software Foundation; either version 2 of the License, or (at your
! 9: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
! 10: *
! 11: * This program is distributed in the hope that it will be useful, but
! 12: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
! 13: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
! 14: * for more details.
! 15: */
! 16:
! 17: /**
! 18: * @defgroup printf_hook printf_hook
! 19: * @{ @ingroup utils
! 20: */
! 21:
! 22: #ifndef PRINTF_HOOK_H_
! 23: #define PRINTF_HOOK_H_
! 24:
! 25: #include <stdlib.h>
! 26:
! 27: typedef struct printf_hook_t printf_hook_t;
! 28: typedef struct printf_hook_spec_t printf_hook_spec_t;
! 29: typedef struct printf_hook_data_t printf_hook_data_t;
! 30: typedef enum printf_hook_argtype_t printf_hook_argtype_t;
! 31:
! 32: #if defined(USE_VSTR)
! 33: # include "printf_hook_vstr.h"
! 34: #elif defined(USE_BUILTIN_PRINTF)
! 35: # include "printf_hook_builtin.h"
! 36: #endif
! 37:
! 38: /**
! 39: * Argument types to pass to printf hook.
! 40: */
! 41: enum printf_hook_argtype_t {
! 42: PRINTF_HOOK_ARGTYPE_END,
! 43: PRINTF_HOOK_ARGTYPE_INT,
! 44: PRINTF_HOOK_ARGTYPE_POINTER,
! 45: };
! 46:
! 47: /**
! 48: * Callback function type for printf hooks.
! 49: *
! 50: * @param data hook data, to pass to print_in_hook()
! 51: * @param spec format specifier
! 52: * @param args arguments array
! 53: * @return number of characters written
! 54: */
! 55: typedef int (*printf_hook_function_t)(printf_hook_data_t *data,
! 56: printf_hook_spec_t *spec,
! 57: const void *const *args);
! 58:
! 59: /**
! 60: * Properties of the format specifier
! 61: */
! 62: struct printf_hook_spec_t {
! 63:
! 64: /**
! 65: * TRUE if a '#' was used in the format specifier
! 66: */
! 67: int hash;
! 68:
! 69: /**
! 70: * TRUE if a '-' was used in the format specifier
! 71: */
! 72: int minus;
! 73:
! 74: /**
! 75: * TRUE if a '+' was used in the format specifier
! 76: */
! 77: int plus;
! 78:
! 79: /**
! 80: * The width as given in the format specifier.
! 81: */
! 82: int width;
! 83: };
! 84:
! 85: /**
! 86: * Printf handler management.
! 87: */
! 88: struct printf_hook_t {
! 89:
! 90: /**
! 91: * Register a printf handler.
! 92: *
! 93: * @param spec printf hook format character
! 94: * @param hook hook function
! 95: * @param ... list of PRINTF_HOOK_ARGTYPE_*, MUST end with PRINTF_HOOK_ARGTYPE_END
! 96: */
! 97: void (*add_handler)(printf_hook_t *this, char spec,
! 98: printf_hook_function_t hook, ...);
! 99:
! 100: /**
! 101: * Destroy a printf_hook instance.
! 102: */
! 103: void (*destroy)(printf_hook_t *this);
! 104: };
! 105:
! 106: /**
! 107: * Create a printf_hook instance.
! 108: */
! 109: printf_hook_t *printf_hook_create();
! 110:
! 111: /**
! 112: * Print with format string within a printf hook.
! 113: *
! 114: * @param data hook data, as passed to printf hook
! 115: * @param fmt printf format string
! 116: * @param ... arguments to format string
! 117: * @return number of characters written
! 118: */
! 119: size_t print_in_hook(printf_hook_data_t *data, char *fmt, ...);
! 120:
! 121: #endif /** PRINTF_HOOK_H_ @}*/
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>