X-Git-Url: https://git.draconx.ca/gitweb/liblbx.git/blobdiff_plain/0eb74c284927b79b607adceae7262734e81a46b3..fa7c556d251ebcb41ef9709b4d85a2c820dee94b:/src/lbx.c diff --git a/src/lbx.c b/src/lbx.c index 0e26315..26a59bd 100644 --- a/src/lbx.c +++ b/src/lbx.c @@ -28,13 +28,12 @@ #include "pack.h" #include "misc.h" +#include "error.h" #include "lbx.h" #define LBX_MAGIC 0x0000fead #define LBX_HDR_SIZE 8 -int lbx_errno = 0; - struct lbx_state { char *name; @@ -62,13 +61,13 @@ static struct lbx_state *lbx_init(unsigned char hdr[static LBX_HDR_SIZE]) struct lbx_state *lbx; if (magic != LBX_MAGIC) { - lbx_errno = -LBX_EMAGIC; + lbx_error_raise(LBX_EMAGIC); return NULL; } lbx = malloc(sizeof *lbx + sizeof lbx->offsets[0] * (nfiles+1)); if (!lbx) { - lbx_errno = -errno; + lbx_error_raise(LBX_ENOMEM); return NULL; } @@ -98,12 +97,13 @@ struct lbx_state *lbx_open(void *f, const struct lbx_file_ops *fops, dupname = str_dup(name); if (!dupname) { - lbx_errno = -errno; + lbx_error_raise(LBX_ENOMEM); goto err; } if (fops->read(hdr_buf, sizeof hdr_buf, f) != sizeof hdr_buf) { - lbx_errno = -errno; + if (fops->eof(f)) + lbx_error_raise(LBX_EEOF); goto err; } @@ -120,9 +120,8 @@ struct lbx_state *lbx_open(void *f, const struct lbx_file_ops *fops, unsigned char buf[4]; if (fops->read(buf, sizeof buf, f) != sizeof buf) { - lbx_errno = -errno; if (fops->eof(f)) - lbx_errno = LBX_EEOF; + lbx_error_raise(LBX_EEOF); goto err; } @@ -196,8 +195,8 @@ lbx_file_stat(struct lbx_state *lbx, unsigned fileno, struct lbx_statbuf *buf) static char str[256]; /* FIXME */ if (fileno >= lbx->nfiles) { + lbx_error_raise(LBX_ENOENT); buf->name = NULL; - lbx_errno = LBX_ERANGE; return -1; } @@ -224,19 +223,18 @@ struct lbx_file_state *lbx_file_open(struct lbx_state *lbx, unsigned fileno) struct lbx_file_state *state; if (fileno >= lbx->nfiles) { - lbx_errno = LBX_ERANGE; + lbx_error_raise(LBX_ENOENT); return NULL; } lbx->last_file = NULL; if (lbx->fops->seek(lbx->f, lbx->offsets[fileno], SEEK_SET) != 0) { - lbx_errno = -errno; return NULL; } state = malloc(sizeof *state); if (!state) { - lbx_errno = -errno; + lbx_error_raise(LBX_ENOMEM); return NULL; } @@ -318,19 +316,3 @@ void lbx_file_close(struct lbx_file_state *f) f->lbx->last_file = NULL; free(f); } - -const char *lbx_strerror(void) -{ - if (lbx_errno < 0) - return strerror(-lbx_errno); - - switch (lbx_errno) { - case LBX_ESUCCESS: return "Success"; - case LBX_EMAGIC: return "Bad magic number"; - case LBX_EEOF: return "Unexpected end-of-file"; - case LBX_ERANGE: return "Index out of range"; - case LBX_EFORMAT: return "Invalid file format"; - } - - return "Unknown error"; -}