1 | // SPDX-License-Identifier: GPL-2.0 |
2 | #include "util.h" |
3 | #include "../util/debug.h" |
4 | #include <stdio.h> |
5 | |
6 | /* |
7 | * Default error logging functions |
8 | */ |
9 | static int perf_stdio__error(const char *format, va_list args) |
10 | { |
11 | fprintf(stderr, "Error:\n" ); |
12 | vfprintf(stderr, format, args); |
13 | return 0; |
14 | } |
15 | |
16 | static int perf_stdio__warning(const char *format, va_list args) |
17 | { |
18 | if (quiet) |
19 | return 0; |
20 | |
21 | fprintf(stderr, "Warning:\n" ); |
22 | vfprintf(stderr, format, args); |
23 | return 0; |
24 | } |
25 | |
26 | static struct perf_error_ops default_eops = |
27 | { |
28 | .error = perf_stdio__error, |
29 | .warning = perf_stdio__warning, |
30 | }; |
31 | |
32 | static struct perf_error_ops *perf_eops = &default_eops; |
33 | |
34 | |
35 | int ui__error(const char *format, ...) |
36 | { |
37 | int ret; |
38 | va_list args; |
39 | |
40 | va_start(args, format); |
41 | ret = perf_eops->error(format, args); |
42 | va_end(args); |
43 | |
44 | return ret; |
45 | } |
46 | |
47 | int ui__warning(const char *format, ...) |
48 | { |
49 | int ret; |
50 | va_list args; |
51 | if (quiet) |
52 | return 0; |
53 | |
54 | va_start(args, format); |
55 | ret = perf_eops->warning(format, args); |
56 | va_end(args); |
57 | |
58 | return ret; |
59 | } |
60 | |
61 | /** |
62 | * perf_error__register - Register error logging functions |
63 | * @eops: The pointer to error logging function struct |
64 | * |
65 | * Register UI-specific error logging functions. Before calling this, |
66 | * other logging functions should be unregistered, if any. |
67 | */ |
68 | int perf_error__register(struct perf_error_ops *eops) |
69 | { |
70 | if (perf_eops != &default_eops) |
71 | return -1; |
72 | |
73 | perf_eops = eops; |
74 | return 0; |
75 | } |
76 | |
77 | /** |
78 | * perf_error__unregister - Unregister error logging functions |
79 | * @eops: The pointer to error logging function struct |
80 | * |
81 | * Unregister already registered error logging functions. |
82 | */ |
83 | int perf_error__unregister(struct perf_error_ops *eops) |
84 | { |
85 | if (perf_eops != eops) |
86 | return -1; |
87 | |
88 | perf_eops = &default_eops; |
89 | return 0; |
90 | } |
91 | |