Branch data Line data Source code
1 : : /*
2 : : * Copyright (c) 2017 Oticon A/S
3 : : *
4 : : * SPDX-License-Identifier: Apache-2.0
5 : : */
6 : :
7 : : /**
8 : : * Functions to print errors and traces
9 : : */
10 : :
11 : : #include <stdlib.h> /* for exit */
12 : : #include <stdio.h> /* for printfs */
13 : : #include <stdarg.h> /* for va args */
14 : : #include <unistd.h>
15 : : #include "soc.h"
16 : : #include "posix_board_if.h"
17 : : #include "cmdline.h"
18 : :
19 : 0 : void posix_vprint_error_and_exit(const char *format, va_list vargs)
20 : : {
21 : 0 : vfprintf(stderr, format, vargs);
22 : 0 : posix_exit(1);
23 : : }
24 : :
25 : 0 : void posix_vprint_warning(const char *format, va_list vargs)
26 : : {
27 : 0 : vfprintf(stderr, format, vargs);
28 : 0 : }
29 : :
30 : 0 : void posix_vprint_trace(const char *format, va_list vargs)
31 : : {
32 : 0 : vfprintf(stdout, format, vargs);
33 : 0 : }
34 : :
35 : 0 : void posix_print_error_and_exit(const char *format, ...)
36 : : {
37 : 0 : va_list variable_args;
38 : :
39 : 0 : va_start(variable_args, format);
40 : 0 : posix_vprint_error_and_exit(format, variable_args);
41 : : va_end(variable_args);
42 : : }
43 : :
44 : 0 : void posix_print_warning(const char *format, ...)
45 : : {
46 : 0 : va_list variable_args;
47 : :
48 : 0 : va_start(variable_args, format);
49 : 0 : vfprintf(stderr, format, variable_args);
50 : 0 : va_end(variable_args);
51 : 0 : }
52 : :
53 : 180 : void posix_print_trace(const char *format, ...)
54 : : {
55 : 180 : va_list variable_args;
56 : :
57 : 180 : va_start(variable_args, format);
58 : 180 : vfprintf(stdout, format, variable_args);
59 : 180 : va_end(variable_args);
60 : 180 : }
61 : :
62 : : /**
63 : : * Are stdout and stderr connected to a tty
64 : : * 0 = no
65 : : * 1 = yes
66 : : * -1 = we do not know yet
67 : : * Indexed 0:stdout, 1:stderr
68 : : */
69 : : static int is_a_tty[2] = {-1, -1};
70 : :
71 : 0 : void trace_disable_color(char *argv, int offset)
72 : : {
73 : 0 : is_a_tty[0] = 0;
74 : 0 : is_a_tty[1] = 0;
75 : 0 : }
76 : :
77 : 0 : void trace_enable_color(char *argv, int offset)
78 : : {
79 : 0 : is_a_tty[0] = -1;
80 : 0 : is_a_tty[1] = -1;
81 : :
82 : 0 : }
83 : :
84 : 0 : void trace_force_color(char *argv, int offset)
85 : : {
86 : 0 : is_a_tty[0] = 1;
87 : 0 : is_a_tty[1] = 1;
88 : 0 : }
89 : :
90 : 0 : int posix_trace_over_tty(int file_number)
91 : : {
92 : 0 : return is_a_tty[file_number];
93 : : }
94 : :
95 : 1 : static void decide_about_color(void)
96 : : {
97 [ + - ]: 1 : if (is_a_tty[0] == -1) {
98 : 1 : is_a_tty[0] = isatty(STDOUT_FILENO);
99 : : }
100 [ + - ]: 1 : if (is_a_tty[1] == -1) {
101 : 1 : is_a_tty[1] = isatty(STDERR_FILENO);
102 : : }
103 : 1 : }
104 : :
105 : : NATIVE_TASK(decide_about_color, PRE_BOOT_2, 0);
106 : :
107 : 1 : void native_add_tracing_options(void)
108 : : {
109 : 1 : static struct args_struct_t trace_options[] = {
110 : : /*
111 : : * Fields:
112 : : * manual, mandatory, switch,
113 : : * option_name, var_name ,type,
114 : : * destination, callback,
115 : : * description
116 : : */
117 : : { false, false, true,
118 : : "color", "color", 'b',
119 : : NULL, trace_enable_color,
120 : : "(default) Enable color in traces if printing to console"},
121 : : { false, false, true,
122 : : "no-color", "no-color", 'b',
123 : : NULL, trace_disable_color,
124 : : "Disable color in traces even if printing to console"},
125 : : { false, false, true,
126 : : "force-color", "force-color", 'b',
127 : : NULL, trace_force_color,
128 : : "Enable color in traces even if printing to files/pipes"},
129 : : ARG_TABLE_ENDMARKER};
130 : :
131 : 1 : native_add_command_line_opts(trace_options);
132 : 1 : }
|