1 /**
2 * Copyright (C) Mellanox Technologies Ltd. 2001-2018.  ALL RIGHTS RESERVED.
3 *
4 * See file LICENSE for terms.
5 */
6 
7 #ifdef HAVE_CONFIG_H
8 #  include "config.h"
9 #endif
10 
11 #include "assert.h"
12 
13 #include <ucs/config/global_opts.h>
14 #include <ucs/debug/debug.h>
15 #include <ucs/debug/log.h>
16 #include <ucs/sys/compiler.h>
17 #include <ucs/sys/string.h>
18 #include <stdarg.h>
19 #include <stdlib.h>
20 #include <string.h>
21 
22 
ucs_fatal_error_message(const char * file,unsigned line,const char * function,char * message_buf)23 void ucs_fatal_error_message(const char *file, unsigned line,
24                              const char *function, char *message_buf)
25 {
26     char *message_line, *save_ptr = NULL;
27 
28     ucs_log_flush();
29 
30     message_line = (message_buf == NULL) ? NULL :
31                    strtok_r(message_buf, "\n", &save_ptr);
32     while (message_line != NULL) {
33         ucs_log_fatal_error("%13s:%-4u %s", ucs_basename(file), line, message_line);
34         message_line = strtok_r(NULL, "\n", &save_ptr);
35     }
36 
37     ucs_handle_error(message_buf);
38     abort();
39 }
40 
ucs_fatal_error_format(const char * file,unsigned line,const char * function,const char * format,...)41 void ucs_fatal_error_format(const char *file, unsigned line,
42                             const char *function, const char *format, ...)
43 {
44     size_t buffer_size = ucs_log_get_buffer_size();
45     char *buffer;
46     va_list ap;
47 
48     buffer = ucs_alloca(buffer_size + 1);
49     va_start(ap, format);
50     vsnprintf(buffer, buffer_size, format, ap);
51     va_end(ap);
52 
53     ucs_fatal_error_message(file, line, function, buffer);
54 }
55