aboutsummaryrefslogtreecommitdiff
path: root/usage.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2017-05-29 12:34:45 +0900
committerJunio C Hamano <gitster@pobox.com>2017-05-29 12:34:45 +0900
commit220c6a70803d520a7cd19f9f2889650d54574470 (patch)
tree511bbcf9b63f7152729a716d8dbd049d2376ed29 /usage.c
parent15c96723457cfa1be6cdbd74e3131ecf13cd9790 (diff)
parent3d7dd2d3b6ccc8903a37cffe3a2f39cf1be21c86 (diff)
downloadgit-220c6a70803d520a7cd19f9f2889650d54574470.tar.gz
git-220c6a70803d520a7cd19f9f2889650d54574470.tar.xz
Merge branch 'jk/bug-to-abort'
Introduce the BUG() macro to improve die("BUG: ..."). * jk/bug-to-abort: usage: add NORETURN to BUG() function definitions config: complain about --local outside of a git repo setup_git_env: convert die("BUG") to BUG() usage.c: add BUG() function
Diffstat (limited to 'usage.c')
-rw-r--r--usage.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/usage.c b/usage.c
index ad6d2910f..1f63e033e 100644
--- a/usage.c
+++ b/usage.c
@@ -201,3 +201,35 @@ void warning(const char *warn, ...)
warn_routine(warn, params);
va_end(params);
}
+
+static NORETURN void BUG_vfl(const char *file, int line, const char *fmt, va_list params)
+{
+ char prefix[256];
+
+ /* truncation via snprintf is OK here */
+ if (file)
+ snprintf(prefix, sizeof(prefix), "BUG: %s:%d: ", file, line);
+ else
+ snprintf(prefix, sizeof(prefix), "BUG: ");
+
+ vreportf(prefix, fmt, params);
+ abort();
+}
+
+#ifdef HAVE_VARIADIC_MACROS
+NORETURN void BUG_fl(const char *file, int line, const char *fmt, ...)
+{
+ va_list ap;
+ va_start(ap, fmt);
+ BUG_vfl(file, line, fmt, ap);
+ va_end(ap);
+}
+#else
+NORETURN void BUG(const char *fmt, ...)
+{
+ va_list ap;
+ va_start(ap, fmt);
+ BUG_vfl(NULL, 0, fmt, ap);
+ va_end(ap);
+}
+#endif