X-Git-Url: https://git.draconx.ca/gitweb/liblbx.git/blobdiff_plain/2ec44cef64979d8e19eb66206c26a7bcad4bef8a..1c79f726622c4a90e9ed4882246c0c320a8e6fdc:/src/lbx.c diff --git a/src/lbx.c b/src/lbx.c index 30cd156..17c68b1 100644 --- a/src/lbx.c +++ b/src/lbx.c @@ -51,7 +51,7 @@ struct lbx_file_state { int eof; }; -static struct lbx_priv *lbx_init(unsigned char hdr[static LBX_HDR_SIZE]) +static struct lbx_priv *lbx_init(unsigned char *hdr) { unsigned short nfiles = unpack_16_le(hdr+0); unsigned long magic = unpack_32_le(hdr+2); @@ -262,8 +262,13 @@ size_t lbx_file_read(struct lbx_file_state *f, void *buf, size_t n) rc = fops->read(buf, want, f->lbx->f); f->offset += rc; - if (want < n || (rc < want && fops->eof(f->lbx->f))) + if (rc < want) { + if (fops->eof(f->lbx->f)) + lbx_error_raise(LBX_EEOF); + } else if (rc < n) { f->eof = 1; + } + return rc; } @@ -282,10 +287,15 @@ int lbx_file_seek(struct lbx_file_state *f, long offset, int whence) case SEEK_END: pos = f->limit + offset; break; + default: + lbx_error_raise(LBX_EINVAL); + return -1; } - if (pos > f->limit) + if (pos > f->limit) { + lbx_error_raise(LBX_EINVAL); return -1; + } f->lbx->last_file = NULL; if (fops->seek(f->lbx->f, f->base + pos, SEEK_SET) != 0)