summaryrefslogtreecommitdiff
path: root/src/die.c
diff options
context:
space:
mode:
authorLinnnus <[email protected]>2024-02-01 22:59:38 +0100
committerLinnnus <[email protected]>2024-02-04 09:58:06 +0100
commitd38f82f6462af4e5aad6a2c776f5c00ce5b13c87 (patch)
tree01a222792dfb10473ae4370b4fc90f3a48e1a499 /src/die.c
feat: initial commit
Here is a small overview of the state of the project at this first commit. I have basic Git Repo -> HTML working, and a plan for how setting up an actual server would work (mainly, NGINX + a git hook to rebuild). The main thing I'm working on right now is parsing WikiCreole, though I am starting to wonder if this is the right langauge. WikiCreole is pretty irregular and has a lot of edge cases (e.g. around emphasis).
Diffstat (limited to 'src/die.c')
-rw-r--r--src/die.c58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/die.c b/src/die.c
new file mode 100644
index 0000000..529eb9b
--- /dev/null
+++ b/src/die.c
@@ -0,0 +1,58 @@
+#include "die.h"
+
+#include <assert.h> // assert
+#include <stdio.h> // fprintf, vfprintf, fputc, stderr
+#include <stdlib.h> // exit, EXIT_FAILURE
+#include <stdarg.h> // va_*
+#include <git2.h> // git_*
+#include <string.h> // strerror
+#include <errno.h> // errno
+
+void die(const char *msg, ...)
+{
+ va_list ap;
+ va_start(ap, msg);
+ vfprintf(stderr, msg, ap);
+ va_end(ap);
+
+ fputc('\n', stderr);
+
+#ifndef NDEBUG
+ git_libgit2_shutdown();
+#endif
+ exit(EXIT_FAILURE);
+}
+
+// Die but include the last git error.
+void noreturn die_git(const char *msg, ...)
+{
+ va_list ap;
+ va_start(ap, msg);
+ vfprintf(stderr, msg, ap);
+ va_end(ap);
+
+ const git_error *e = git_error_last();
+ assert(e != NULL && "die_git called without error");
+ fprintf(stderr, ": %s\n", e->message);
+
+#ifndef NDEBUG
+ git_libgit2_shutdown();
+#endif
+ exit(EXIT_FAILURE);
+}
+
+// Die but include errno information.
+void noreturn die_errno(const char *msg, ...)
+{
+ va_list ap;
+ va_start(ap, msg);
+ vfprintf(stderr, msg, ap);
+ va_end(ap);
+
+ fprintf(stderr, ": %s\n", strerror(errno));
+
+#ifndef NDEBUG
+ git_libgit2_shutdown();
+#endif
+ exit(EXIT_FAILURE);
+}