blob: 689b27c34246c5086419a059d61fbf4a2c4b048f [file] [log] [blame]
Greg Kroah-Hartmanb2441312017-11-01 15:07:57 +01001// SPDX-License-Identifier: GPL-2.0
Arnaldo Carvalho de Melo1e6dd072010-08-10 15:58:50 -03002#include "util.h"
Luke Mujica2b758632019-07-19 13:22:53 -07003#include "../util/debug.h"
Arnaldo Carvalho de Melo8520a982019-08-29 16:18:59 -03004#include <stdio.h>
Namhyung Kimba47a142012-05-29 13:22:58 +09005
6/*
7 * Default error logging functions
8 */
9static int perf_stdio__error(const char *format, va_list args)
Arnaldo Carvalho de Melo1056d3dd2011-10-26 07:11:03 -020010{
Namhyung Kimba47a142012-05-29 13:22:58 +090011 fprintf(stderr, "Error:\n");
Arnaldo Carvalho de Meloae557952011-10-26 08:00:55 -020012 vfprintf(stderr, format, args);
Namhyung Kimba47a142012-05-29 13:22:58 +090013 return 0;
14}
15
16static int perf_stdio__warning(const char *format, va_list args)
17{
18 fprintf(stderr, "Warning:\n");
19 vfprintf(stderr, format, args);
20 return 0;
21}
22
23static struct perf_error_ops default_eops =
24{
25 .error = perf_stdio__error,
26 .warning = perf_stdio__warning,
27};
28
29static struct perf_error_ops *perf_eops = &default_eops;
30
31
32int ui__error(const char *format, ...)
33{
34 int ret;
35 va_list args;
36
37 va_start(args, format);
38 ret = perf_eops->error(format, args);
39 va_end(args);
40
41 return ret;
Arnaldo Carvalho de Melo53c54012010-03-24 16:40:14 -030042}
Arnaldo Carvalho de Melo068ffaa2010-11-27 02:41:01 -020043
Arnaldo Carvalho de Melo4610e412011-10-26 12:04:37 -020044int ui__warning(const char *format, ...)
Arnaldo Carvalho de Melo068ffaa2010-11-27 02:41:01 -020045{
Namhyung Kimba47a142012-05-29 13:22:58 +090046 int ret;
Arnaldo Carvalho de Melo068ffaa2010-11-27 02:41:01 -020047 va_list args;
48
49 va_start(args, format);
Namhyung Kimba47a142012-05-29 13:22:58 +090050 ret = perf_eops->warning(format, args);
Arnaldo Carvalho de Meloae557952011-10-26 08:00:55 -020051 va_end(args);
Namhyung Kimba47a142012-05-29 13:22:58 +090052
53 return ret;
Arnaldo Carvalho de Meloae557952011-10-26 08:00:55 -020054}
55
Namhyung Kimba47a142012-05-29 13:22:58 +090056/**
57 * perf_error__register - Register error logging functions
58 * @eops: The pointer to error logging function struct
59 *
60 * Register UI-specific error logging functions. Before calling this,
61 * other logging functions should be unregistered, if any.
62 */
63int perf_error__register(struct perf_error_ops *eops)
64{
65 if (perf_eops != &default_eops)
66 return -1;
67
68 perf_eops = eops;
69 return 0;
70}
71
72/**
73 * perf_error__unregister - Unregister error logging functions
74 * @eops: The pointer to error logging function struct
75 *
76 * Unregister already registered error logging functions.
77 */
78int perf_error__unregister(struct perf_error_ops *eops)
79{
80 if (perf_eops != eops)
81 return -1;
82
83 perf_eops = &default_eops;
84 return 0;
Arnaldo Carvalho de Melo068ffaa2010-11-27 02:41:01 -020085}