43 #ifdef CLIB_LINUX_KERNEL 44 #include <linux/unistd.h> 45 #include <linux/kernel.h> 54 #ifdef CLIB_STANDALONE 55 #include <vppinfra/standalone_stdio.h> 101 for (i = 0; i <
vec_len (handlers); i++)
102 handlers[i].func (handlers[i].arg, msg, vec_len (msg));
105 if (vec_len (handlers) == 0)
106 os_puts (msg, vec_len (msg), 1);
112 _clib_error (
int how_to_die,
113 char *function_name,
uword line_number,
char *fmt, ...)
120 msg =
format (msg,
"%s:", function_name);
122 msg =
format (msg,
"%wd:", line_number);
132 msg =
format (msg,
": %s (errno %d)", strerror (errno), errno);
157 word errno_save = errno;
206 where =
format (where,
"from ");
209 s =
format (s,
"%v: ", where);
244 return error_return (0,
"x is odd %d", x);
250 return error_return (0,
"x is even %d", x);
262 return error_return (e, 0);
266 error_handler (
void *arg,
char *msg,
int msg_len)
268 write (2, msg, msg_len);
272 main (
int argc,
char *argv[])
276 register_error_handler (error_handler, 0);
sll srl srl sll sra u16x4 i
void * clib_error_free_vector(clib_error_t *errors)
void os_puts(u8 *string, uword length, uword is_error)
u8 * format_clib_error(u8 *s, va_list *va)
#define vec_add1(V, E)
Add 1 element to end of vector (unspecified alignment).
#define vec_add2(V, P, N)
Add N elements to end of vector V, return pointer to new elements in P.
void clib_error_handler_func_t(void *arg, u8 *msg, int msg_len)
#define vec_end(v)
End (last data address) of vector.
static void error_exit(int code)
#define vec_free(V)
Free vector's memory (no header).
#define clib_error_free(e)
clib_error_handler_func_t * func
void clib_error_register_handler(clib_error_handler_func_t func, void *arg)
static void debugger(void)
#define vec_len(v)
Number of elements in vector (rvalue-only, NULL tolerant)
#define vec_foreach(var, vec)
Vector iterator.
static u8 * dispatch_message(u8 *msg)
CLIB vectors are ubiquitous dynamically resized arrays with by user defined "headers".