1 // SPDX-License-Identifier: GPL-2.0 << 2 /* 1 /* 3 * usage.c !! 2 * GIT - The information manager from hell 4 * << 5 * Various reporting routines. << 6 * Originally copied from GIT source. << 7 * 3 * 8 * Copyright (C) Linus Torvalds, 2005 4 * Copyright (C) Linus Torvalds, 2005 9 */ 5 */ 10 #include "util.h" 6 #include "util.h" 11 #include <stdio.h> << 12 #include <stdlib.h> << 13 #include <linux/compiler.h> << 14 << 15 const char perf_usage_string[] = << 16 "perf [--version] [--help] [OPTIONS] C << 17 7 18 const char perf_more_info_string[] = !! 8 static void report(const char *prefix, const char *err, va_list params) 19 "See 'perf help COMMAND' for more info !! 9 { >> 10 char msg[1024]; >> 11 vsnprintf(msg, sizeof(msg), err, params); >> 12 fprintf(stderr, " %s%s\n", prefix, msg); >> 13 } 20 14 21 static __noreturn void usage_builtin(const cha !! 15 static NORETURN void usage_builtin(const char *err) 22 { 16 { 23 fprintf(stderr, "\n Usage: %s\n", err) 17 fprintf(stderr, "\n Usage: %s\n", err); 24 exit(129); 18 exit(129); 25 } 19 } 26 20 >> 21 static NORETURN void die_builtin(const char *err, va_list params) >> 22 { >> 23 report(" Fatal: ", err, params); >> 24 exit(128); >> 25 } >> 26 >> 27 static void error_builtin(const char *err, va_list params) >> 28 { >> 29 report(" Error: ", err, params); >> 30 } >> 31 >> 32 static void warn_builtin(const char *warn, va_list params) >> 33 { >> 34 report(" Warning: ", warn, params); >> 35 } >> 36 27 /* If we are in a dlopen()ed .so write to a gl 37 /* If we are in a dlopen()ed .so write to a global variable would segfault 28 * (ugh), so keep things static. */ 38 * (ugh), so keep things static. */ 29 static void (*usage_routine)(const char *err) !! 39 static void (*usage_routine)(const char *err) NORETURN = usage_builtin; >> 40 static void (*die_routine)(const char *err, va_list params) NORETURN = die_builtin; >> 41 static void (*error_routine)(const char *err, va_list params) = error_builtin; >> 42 static void (*warn_routine)(const char *err, va_list params) = warn_builtin; >> 43 >> 44 void set_die_routine(void (*routine)(const char *err, va_list params) NORETURN) >> 45 { >> 46 die_routine = routine; >> 47 } 30 48 31 void usage(const char *err) 49 void usage(const char *err) 32 { 50 { 33 usage_routine(err); 51 usage_routine(err); >> 52 } >> 53 >> 54 void die(const char *err, ...) >> 55 { >> 56 va_list params; >> 57 >> 58 va_start(params, err); >> 59 die_routine(err, params); >> 60 va_end(params); >> 61 } >> 62 >> 63 int error(const char *err, ...) >> 64 { >> 65 va_list params; >> 66 >> 67 va_start(params, err); >> 68 error_routine(err, params); >> 69 va_end(params); >> 70 return -1; >> 71 } >> 72 >> 73 void warning(const char *warn, ...) >> 74 { >> 75 va_list params; >> 76 >> 77 va_start(params, warn); >> 78 warn_routine(warn, params); >> 79 va_end(params); 34 } 80 } 35 81
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.