/* 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);
