/* Plan9 style error popping.  For details, read Documentation/plan9.txt */

#pragma once

#include <setjmp.h>
#include <kthread.h>
#include <error.h>

#define ERRSTACK(x) struct errbuf *prev_errbuf; struct errbuf errstack[(x)];   \
                    int curindex = 0;
#define waserror() setjmp(&(errpush(errstack, ARRAY_SIZE(errstack), &curindex, \
									&prev_errbuf)->jmpbuf))

/* In syscall.h, but want to avoid circular include issues. */
extern void set_error(int error, const char *fmt, ...);
extern struct errbuf *get_cur_errbuf(void);

#define error_jmp() longjmp(&get_cur_errbuf()->jmpbuf, 1)

#define error(e, x, ...)						\
	do {								\
		set_error(e, x, ##__VA_ARGS__);				\
		error_jmp();						\
	} while(0)
#define nexterror() longjmp(&(errpop(errstack, ARRAY_SIZE(errstack), &curindex,\
				     prev_errbuf)->jmpbuf), 1)
#define poperror() errpop(errstack, ARRAY_SIZE(errstack), &curindex,	\
			  prev_errbuf)
/* Give Akaros people a hint that we need a real error message. */
#define ERROR_FIXME "This space in %s@%d needs filling in.", __FILE__, __LINE__

struct errbuf *errpush(struct errbuf *errstack, int stacksize, int *curindex,
		       struct errbuf **prev_errbuf);
struct errbuf *errpop(struct errbuf *errstack, int stacksize, int *curindex,
		      struct errbuf *prev_errbuf);
