#ifndef SP_E_H_ #define SP_E_H_ /* * sophia database * sphia.org * * Copyright (c) Dmitry Simonenko * BSD License */ typedef struct spe spe; enum { SPENONE, SPE, /* general error (with format) */ SPEOOM, /* out of memory */ SPESYS, /* system + errno */ SPEIO /* system-io + errno */ }; struct spe { spspinlock lock; int type; int errno_; char e[256]; }; static inline void sp_einit(spe *e) { e->lock = 0; e->type = SPENONE; e->e[0] = 0; sp_lockinit(&e->lock); } static inline void sp_efree(spe *e) { sp_lockfree(&e->lock); } static inline int sp_eis(spe *e) { sp_lock(&e->lock); register int is = e->type != SPENONE; sp_unlock(&e->lock); return is; } void sp_ve(spe *e, int type, va_list args); #endif