packages feed

bindings-sophia-0.1.0: sophia/db/e.h

#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