summaryrefslogtreecommitdiff
path: root/usage.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2017-06-13 20:26:59 (GMT)
committerJunio C Hamano <gitster@pobox.com>2017-06-13 20:26:59 (GMT)
commit7a190a215dbcf782c33ed531104389de8504e29d (patch)
tree05b00d7adb3abb89de530834599a5daa04a6d026 /usage.c
parent146b0ab1a528b54803adbf8b6b72239a8d68a65c (diff)
parent3d7dd2d3b6ccc8903a37cffe3a2f39cf1be21c86 (diff)
downloadgit-7a190a215dbcf782c33ed531104389de8504e29d.zip
git-7a190a215dbcf782c33ed531104389de8504e29d.tar.gz
git-7a190a215dbcf782c33ed531104389de8504e29d.tar.bz2
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 ad6d291..1f63e03 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