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 */ 9static 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 16static 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 26static struct perf_error_ops default_eops = 27{ 28 .error = perf_stdio__error, 29 .warning = perf_stdio__warning, 30}; 31 32static struct perf_error_ops *perf_eops = &default_eops; 33 34 35int 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 47int 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 */ 68int 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 */ 83int 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