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   */
perf_stdio__error(const char * format,va_list args)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  
perf_stdio__warning(const char * format,va_list args)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  
ui__error(const char * format,...)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  
ui__warning(const char * format,...)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   */
perf_error__register(struct perf_error_ops * eops)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   */
perf_error__unregister(struct perf_error_ops * eops)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