Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
git/usage.c
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
96 lines (78 sloc)
1.95 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* GIT - The information manager from hell | |
* | |
* Copyright (C) Linus Torvalds, 2005 | |
*/ | |
#include "git-compat-util.h" | |
static void report(const char *prefix, const char *err, va_list params) | |
{ | |
char msg[256]; | |
vsnprintf(msg, sizeof(msg), err, params); | |
fprintf(stderr, "%s%s\n", prefix, msg); | |
} | |
static NORETURN void usage_builtin(const char *err) | |
{ | |
fprintf(stderr, "usage: %s\n", err); | |
exit(129); | |
} | |
static NORETURN void die_builtin(const char *err, va_list params) | |
{ | |
report("fatal: ", err, params); | |
exit(128); | |
} | |
static void error_builtin(const char *err, va_list params) | |
{ | |
report("error: ", err, params); | |
} | |
static void warn_builtin(const char *warn, va_list params) | |
{ | |
report("warning: ", warn, params); | |
} | |
/* If we are in a dlopen()ed .so write to a global variable would segfault | |
* (ugh), so keep things static. */ | |
static void (*usage_routine)(const char *err) NORETURN = usage_builtin; | |
static void (*die_routine)(const char *err, va_list params) NORETURN = die_builtin; | |
static void (*error_routine)(const char *err, va_list params) = error_builtin; | |
static void (*warn_routine)(const char *err, va_list params) = warn_builtin; | |
void set_usage_routine(void (*routine)(const char *err) NORETURN) | |
{ | |
usage_routine = routine; | |
} | |
void set_die_routine(void (*routine)(const char *err, va_list params) NORETURN) | |
{ | |
die_routine = routine; | |
} | |
void set_error_routine(void (*routine)(const char *err, va_list params)) | |
{ | |
error_routine = routine; | |
} | |
void set_warn_routine(void (*routine)(const char *warn, va_list params)) | |
{ | |
warn_routine = routine; | |
} | |
void usage(const char *err) | |
{ | |
usage_routine(err); | |
} | |
void die(const char *err, ...) | |
{ | |
va_list params; | |
va_start(params, err); | |
die_routine(err, params); | |
va_end(params); | |
} | |
int error(const char *err, ...) | |
{ | |
va_list params; | |
va_start(params, err); | |
error_routine(err, params); | |
va_end(params); | |
return -1; | |
} | |
void warning(const char *warn, ...) | |
{ | |
va_list params; | |
va_start(params, warn); | |
warn_routine(warn, params); | |
va_end(params); | |
} |