Home | History | Annotate | Download | only in util
      1 /*
      2  * GIT - The information manager from hell
      3  *
      4  * Copyright (C) Linus Torvalds, 2005
      5  */
      6 #include "util.h"
      7 
      8 static void report(const char *prefix, const char *err, va_list params)
      9 {
     10 	char msg[1024];
     11 	vsnprintf(msg, sizeof(msg), err, params);
     12 	fprintf(stderr, " %s%s\n", prefix, msg);
     13 }
     14 
     15 static NORETURN void usage_builtin(const char *err)
     16 {
     17 	fprintf(stderr, "\n Usage: %s\n", err);
     18 	exit(129);
     19 }
     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 
     37 /* If we are in a dlopen()ed .so write to a global variable would segfault
     38  * (ugh), so keep things static. */
     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 }
     48 
     49 void usage(const char *err)
     50 {
     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);
     80 }
     81