summaryrefslogtreecommitdiff
path: root/usage.c
diff options
context:
space:
mode:
authorLibravatar Junio C Hamano <gitster@pobox.com>2017-06-13 13:26:59 -0700
committerLibravatar Junio C Hamano <gitster@pobox.com>2017-06-13 13:26:59 -0700
commit7a190a215dbcf782c33ed531104389de8504e29d (patch)
tree05b00d7adb3abb89de530834599a5daa04a6d026 /usage.c
parentMerge branch 'sb/checkout-recurse-submodules' into maint (diff)
parentusage: add NORETURN to BUG() function definitions (diff)
downloadtgif-7a190a215dbcf782c33ed531104389de8504e29d.tar.xz
Merge branch 'jk/bug-to-abort' into maint
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 ad6d2910fb..1f63e033e9 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