summaryrefslogtreecommitdiff
path: root/cmd/wmii/error.c
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/wmii/error.c')
-rw-r--r--cmd/wmii/error.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/cmd/wmii/error.c b/cmd/wmii/error.c
new file mode 100644
index 0000000..3f66653
--- /dev/null
+++ b/cmd/wmii/error.c
@@ -0,0 +1,41 @@
+/* Copyright ©2007-2010 Kris Maglione <jg@suckless.org>
+ * See LICENSE file for license details.
+ */
+
+#include "dat.h"
+#include "fns.h"
+
+static jmp_buf errjmp[16];
+static long nerror;
+
+void
+error(char *fmt, ...) {
+ char errbuf[IXP_ERRMAX];
+ va_list ap;
+
+ va_start(ap, fmt);
+ vsnprint(errbuf, IXP_ERRMAX, fmt, ap);
+ va_end(ap);
+ ixp_errstr(errbuf, IXP_ERRMAX);
+
+ nexterror();
+}
+
+void
+nexterror(void) {
+ assert(nerror > 0);
+ longjmp(errjmp[--nerror], 1);
+}
+
+void
+poperror(void) {
+ assert(nerror > 0);
+ --nerror;
+}
+
+jmp_buf*
+pusherror(void) {
+ assert(nerror < nelem(errjmp));
+ return &errjmp[nerror++];
+}
+