linux/tools/perf/util/usage.c
<<
>>
Prefs
   1/*
   2 * usage.c
   3 *
   4 * Various reporting routines.
   5 * Originally copied from GIT source.
   6 *
   7 * Copyright (C) Linus Torvalds, 2005
   8 */
   9#include "util.h"
  10#include "debug.h"
  11
  12static void report(const char *prefix, const char *err, va_list params)
  13{
  14        char msg[1024];
  15        vsnprintf(msg, sizeof(msg), err, params);
  16        fprintf(stderr, " %s%s\n", prefix, msg);
  17}
  18
  19static NORETURN void usage_builtin(const char *err)
  20{
  21        fprintf(stderr, "\n Usage: %s\n", err);
  22        exit(129);
  23}
  24
  25static NORETURN void die_builtin(const char *err, va_list params)
  26{
  27        report(" Fatal: ", err, params);
  28        exit(128);
  29}
  30
  31static void error_builtin(const char *err, va_list params)
  32{
  33        report(" Error: ", err, params);
  34}
  35
  36static void warn_builtin(const char *warn, va_list params)
  37{
  38        report(" Warning: ", warn, params);
  39}
  40
  41/* If we are in a dlopen()ed .so write to a global variable would segfault
  42 * (ugh), so keep things static. */
  43static void (*usage_routine)(const char *err) NORETURN = usage_builtin;
  44static void (*die_routine)(const char *err, va_list params) NORETURN = die_builtin;
  45static void (*error_routine)(const char *err, va_list params) = error_builtin;
  46static void (*warn_routine)(const char *err, va_list params) = warn_builtin;
  47
  48void set_die_routine(void (*routine)(const char *err, va_list params) NORETURN)
  49{
  50        die_routine = routine;
  51}
  52
  53void usage(const char *err)
  54{
  55        usage_routine(err);
  56}
  57
  58void die(const char *err, ...)
  59{
  60        va_list params;
  61
  62        va_start(params, err);
  63        die_routine(err, params);
  64        va_end(params);
  65}
  66
  67int error(const char *err, ...)
  68{
  69        va_list params;
  70
  71        va_start(params, err);
  72        error_routine(err, params);
  73        va_end(params);
  74        return -1;
  75}
  76
  77void warning(const char *warn, ...)
  78{
  79        va_list params;
  80
  81        va_start(params, warn);
  82        warn_routine(warn, params);
  83        va_end(params);
  84}
  85