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 */ 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 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 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 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 */ 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 */ 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