1 /* This file is part of Netwib. Read and honor its license.
2 */
3
4 /*-------------------------------------------------------------*/
netwib_priv_notify_string(netwib_priv_notifytype type,netwib_conststring msg)5 netwib_err netwib_priv_notify_string(netwib_priv_notifytype type,
6 netwib_conststring msg)
7 {
8 /* currently, we use "fprintf(stderr" on every system. On Windows,
9 we could popup a new window. */
10 if (type == NETWIB_PRIV_NOTIFYTYPE_EMERG ||
11 type == NETWIB_PRIV_NOTIFYTYPE_ALERT) {
12 fprintf(stderr, "\n");
13 fprintf(stderr, "%s\n", " _ _ _");
14 fprintf(stderr, "%s\n", " / \\ / \\ / \\");
15 fprintf(stderr, "%s\n", " / I \\ / I \\ / I \\");
16 fprintf(stderr, "%s\n", " / o \\ / o \\ / o \\");
17 fprintf(stderr, "%s\n", " /_______\\ /_______\\ /_______\\");
18 fprintf(stderr, "\n");
19 }
20
21 fprintf(stderr, "%s\n", msg);
22
23 if (type == NETWIB_PRIV_NOTIFYTYPE_EMERG) {
24 fprintf(stderr, "%s\n", "This is a fatal error.");
25 fprintf(stderr, "%s\n", "Please contact Laurent.");
26 } else if (type == NETWIB_PRIV_NOTIFYTYPE_ALERT) {
27 fprintf(stderr, "%s\n", "This is a fatal error.");
28 fprintf(stderr, "%s\n", "You must change your program.");
29 } else if (type == NETWIB_PRIV_NOTIFYTYPE_WARNING) {
30 fprintf(stderr, "%s\n", "This is a warning.");
31 fprintf(stderr, "%s\n", "You should correct your program.");
32 }
33
34 fflush(stderr);
35
36 #if NETWIB_DEBUG_ERROR_BT==1
37 if (type != NETWIB_PRIV_NOTIFYTYPE_DEBUG) {
38 netwib_string str;
39 fprintf(stderr, "Backtrace : ");
40 netwib_er(netwib_debug_backtrace_string(&str));
41 fprintf(stderr, "%s\n", str);
42 netwib_er(netwib_debug_string_close(&str));
43 fflush(stderr);
44 }
45 #endif
46
47 if (type == NETWIB_PRIV_NOTIFYTYPE_EMERG ||
48 type == NETWIB_PRIV_NOTIFYTYPE_ALERT) {
49 netwib_er(netwib_priv_program_exit());
50 }
51
52 return(NETWIB_ERR_OK);
53 }
54
55 /*-------------------------------------------------------------*/
netwib_priv_notify_fmt(netwib_priv_notifytype type,netwib_conststring fmt,...)56 netwib_err netwib_priv_notify_fmt(netwib_priv_notifytype type,
57 netwib_conststring fmt,
58 ...)
59 {
60 va_list ap;
61 netwib_err ret;
62 netwib_char arr[4096];
63 netwib_string pc;
64 netwib_buf buf;
65
66 netwib_er(netwib_buf_init_ext_arraysizeofempty(arr, &buf));
67 va_start(ap, fmt);
68 ret = netwib_priv_buf_append_vfmt(&buf, fmt, &ap);
69 va_end(ap);
70 if (ret != NETWIB_ERR_OK) {
71 netwib__buf_reinit(&buf);
72 netwib_er(netwib_buf_append_string("Error when trying to generate ", &buf));
73 netwib_er(netwib_buf_append_string(fmt, &buf));
74 }
75
76 netwib_er(netwib_buf_ref_string(&buf, &pc));
77 netwib_er(netwib_priv_notify_string(type, pc));
78
79 return(NETWIB_ERR_OK);
80 }
81
82 /*-------------------------------------------------------------*/
netwib_priv_notify_err(netwib_priv_notifytype type,netwib_err error)83 netwib_err netwib_priv_notify_err(netwib_priv_notifytype type,
84 netwib_err error)
85 {
86 netwib_buf buf;
87 netwib_string pc;
88 netwib_uint32 varerrno, varherrno, vargetlasterror;
89 netwib_char arr[1024];
90
91 netwib_er(netwib_priv_err_syserrors(&varerrno, &varherrno,
92 &vargetlasterror));
93
94 netwib_er(netwib_buf_init_ext_arraysizeofempty(arr, &buf));
95 netwib_er(netwib_priv_err_append_err(error, varerrno, varherrno,
96 vargetlasterror,
97 NETWIB_ERR_ENCODETYPE_FULL, &buf));
98 netwib_er(netwib_buf_ref_string(&buf, &pc));
99 netwib_er(netwib_priv_notify_string(type, pc));
100 return(NETWIB_ERR_OK);
101 }
102
103