usage.con commit Merge branch 'jc/repack' (75dedd5)
   1/*
   2 * GIT - The information manager from hell
   3 *
   4 * Copyright (C) Linus Torvalds, 2005
   5 */
   6#include "git-compat-util.h"
   7
   8static void report(const char *prefix, const char *err, va_list params)
   9{
  10        fputs(prefix, stderr);
  11        vfprintf(stderr, err, params);
  12        fputs("\n", stderr);
  13}
  14
  15static NORETURN void usage_builtin(const char *err)
  16{
  17        fprintf(stderr, "usage: %s\n", err);
  18        exit(129);
  19}
  20
  21static NORETURN void die_builtin(const char *err, va_list params)
  22{
  23        report("fatal: ", err, params);
  24        exit(128);
  25}
  26
  27static void error_builtin(const char *err, va_list params)
  28{
  29        report("error: ", err, params);
  30}
  31
  32
  33/* If we are in a dlopen()ed .so write to a global variable would segfault
  34 * (ugh), so keep things static. */
  35static void (*usage_routine)(const char *err) NORETURN = usage_builtin;
  36static void (*die_routine)(const char *err, va_list params) NORETURN = die_builtin;
  37static void (*error_routine)(const char *err, va_list params) = error_builtin;
  38
  39void set_usage_routine(void (*routine)(const char *err) NORETURN)
  40{
  41        usage_routine = routine;
  42}
  43
  44void set_die_routine(void (*routine)(const char *err, va_list params) NORETURN)
  45{
  46        die_routine = routine;
  47}
  48
  49void set_error_routine(void (*routine)(const char *err, va_list params))
  50{
  51        error_routine = routine;
  52}
  53
  54
  55void usage(const char *err)
  56{
  57        usage_routine(err);
  58}
  59
  60void die(const char *err, ...)
  61{
  62        va_list params;
  63
  64        va_start(params, err);
  65        die_routine(err, params);
  66        va_end(params);
  67}
  68
  69int error(const char *err, ...)
  70{
  71        va_list params;
  72
  73        va_start(params, err);
  74        error_routine(err, params);
  75        va_end(params);
  76        return -1;
  77}