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