usage.con commit git-upload-pack: make sure we close unused pipe ends (3ac53e0)
   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
  32static void warn_builtin(const char *warn, va_list params)
  33{
  34        report("warning: ", warn, params);
  35}
  36
  37/* If we are in a dlopen()ed .so write to a global variable would segfault
  38 * (ugh), so keep things static. */
  39static void (*usage_routine)(const char *err) NORETURN = usage_builtin;
  40static void (*die_routine)(const char *err, va_list params) NORETURN = die_builtin;
  41static void (*error_routine)(const char *err, va_list params) = error_builtin;
  42static void (*warn_routine)(const char *err, va_list params) = warn_builtin;
  43
  44void set_usage_routine(void (*routine)(const char *err) NORETURN)
  45{
  46        usage_routine = routine;
  47}
  48
  49void set_die_routine(void (*routine)(const char *err, va_list params) NORETURN)
  50{
  51        die_routine = routine;
  52}
  53
  54void set_error_routine(void (*routine)(const char *err, va_list params))
  55{
  56        error_routine = routine;
  57}
  58
  59void set_warn_routine(void (*routine)(const char *warn, va_list params))
  60{
  61        warn_routine = routine;
  62}
  63
  64
  65void usage(const char *err)
  66{
  67        usage_routine(err);
  68}
  69
  70void die(const char *err, ...)
  71{
  72        va_list params;
  73
  74        va_start(params, err);
  75        die_routine(err, params);
  76        va_end(params);
  77}
  78
  79int error(const char *err, ...)
  80{
  81        va_list params;
  82
  83        va_start(params, err);
  84        error_routine(err, params);
  85        va_end(params);
  86        return -1;
  87}
  88
  89void warn(const char *warn, ...)
  90{
  91        va_list params;
  92
  93        va_start(params, warn);
  94        warn_routine(warn, params);
  95        va_end(params);
  96}