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